28 #ifndef GUM_INSTANTIATION_H 29 #define GUM_INSTANTIATION_H 34 #include <agrum/agrum.h> 36 #include <agrum/tools/core/hashTable.h> 37 #include <agrum/tools/multidim/implementations/multiDimInterface.h> 41 class MultiDimAdressable;
82 class Instantiation:
public MultiDimInterface {
107 Instantiation(
const Instantiation& aI,
const bool notifyMaster =
true);
122 Instantiation& operator=(
const Instantiation& aI);
141 Instantiation(MultiDimAdressable& aMD);
160 Instantiation(
const MultiDimAdressable& aMD);
179 Instantiation(MultiDimAdressable* aMD);
198 Instantiation(
const MultiDimAdressable* aMD);
215 Idx nbrDim()
const final;
239 void add(
const DiscreteVariable& v) final;
254 void erase(
const DiscreteVariable& v) final;
255 void erase(
const std::string& name);
269 Size domainSize()
const final;
278 Idx pos(
const DiscreteVariable& v)
const final;
293 Idx val(Idx i)
const;
308 Idx val(
const DiscreteVariable& var)
const;
309 Idx val(
const std::string& name)
const;
324 Idx valFromPtr(
const DiscreteVariable* pvar)
const;
333 const DiscreteVariable& variable(Idx i)
const final;
343 const DiscreteVariable& variable(
const std::string& name)
const final;
364 Instantiation& chgVal(
const DiscreteVariable& v, Idx newval);
385 Instantiation& chgVal(
const DiscreteVariable* v, Idx newval);
407 Instantiation& chgVal(Idx varPos, Idx newval);
429 Instantiation& chgVal(
const std::string& var, Idx newval);
451 Instantiation& chgVal(
const std::string& var,
const std::string& newval);
474 Instantiation& setVals(
const Instantiation& i);
486 void setValsFrom(
const HashTable<
const DiscreteVariable*,
const DiscreteVariable* >& map,
487 const Instantiation& external);
495 bool contains(
const DiscreteVariable& v)
const final;
496 bool contains(
const std::string& name)
const;
504 bool contains(
const DiscreteVariable* v)
const;
510 const Sequence<
const DiscreteVariable* >& variablesSequence()
const final;
516 virtual bool empty()
const final;
539 bool inOverflow()
const;
578 void unsetOverflow();
684 void incIn(
const Instantiation& i);
706 void decIn(
const Instantiation& i);
728 void incOut(
const Instantiation& i);
749 void decOut(
const Instantiation& i);
766 void incNotVar(
const DiscreteVariable& v);
785 void decNotVar(
const DiscreteVariable& v);
803 void incVar(
const DiscreteVariable& v);
821 void decVar(
const DiscreteVariable& v);
860 void setFirstIn(
const Instantiation& i);
878 void setLastIn(
const Instantiation& i);
894 void setFirstOut(
const Instantiation& i);
909 void setLastOut(
const Instantiation& i);
922 void setFirstNotVar(
const DiscreteVariable& v);
934 void setLastNotVar(
const DiscreteVariable& v);
946 void setFirstVar(
const DiscreteVariable& v);
958 void setLastVar(
const DiscreteVariable& v);
981 bool actAsSlave(MultiDimAdressable& aMD);
994 bool isSlave()
const;
1000 bool isMaster(
const MultiDimAdressable* m)
const;
1006 bool isMaster(
const MultiDimAdressable& m)
const;
1018 void synchronizeWithMaster(
const MultiDimAdressable* m);
1028 void addWithMaster(
const MultiDimAdressable* m,
const DiscreteVariable& v);
1038 void eraseWithMaster(
const MultiDimAdressable* m,
const DiscreteVariable& v);
1049 bool operator==(
const Instantiation& other)
const;
1055 Instantiation& operator++();
1061 Instantiation& operator--();
1067 Instantiation& operator+=(Size depl);
1073 Instantiation& operator-=(Size depl);
1085 Idx hamming()
const;
1091 std::string toString()
const;
1104 void reorder(
const Sequence<
const DiscreteVariable* >& v);
1112 void reorder(
const Instantiation& i);
1122 virtual void replace_(
const DiscreteVariable* x,
const DiscreteVariable* y) final;
1127 MultiDimAdressable* _master_;
1130 Sequence<
const DiscreteVariable* > _vars_;
1133 std::vector< Idx > _vals_;
1147 void _swap_(Idx i, Idx j);
1158 void _chgVal_(Idx varPos, Idx newVal);
1182 void _add_(
const DiscreteVariable& v);
1200 void _erase_(
const DiscreteVariable& v);
1210 void _notifiedDimChanged_(
const Sequence<
const DiscreteVariable* >& v);
1216 void _init_(MultiDimAdressable* master);
1228 void _reorder_(
const Sequence<
const DiscreteVariable* >& v);
1230 void _masterChangeNotification_(Idx varPos, Idx newVal, Idx oldVal)
const;
1231 void _masterFirstNotification_()
const;
1232 void _masterIncNotification_()
const;
1233 void _masterLastNotification_()
const;
1234 void _masterDecNotification_()
const;
1240 std::ostream& operator<<(std::ostream&,
const Instantiation&);
1248 class HashFunc< Instantiation >:
public HashFuncBase< Instantiation > {
1255 static Size castToSize(
const Instantiation& key);
1262 virtual Size operator()(
const Instantiation& key)
const override final;
1266 #ifndef GUM_NO_INLINE 1267 # include <agrum/tools/multidim/instantiation_inl.h>