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);
487 const HashTable<
const DiscreteVariable*,
const DiscreteVariable* >& map,
488 const Instantiation& external);
496 bool contains(
const DiscreteVariable& v)
const final;
497 bool contains(
const std::string& name)
const;
505 bool contains(
const DiscreteVariable* v)
const;
511 const Sequence<
const DiscreteVariable* >& variablesSequence()
const final;
517 virtual bool empty()
const final;
540 bool inOverflow()
const;
579 void unsetOverflow();
685 void incIn(
const Instantiation& i);
707 void decIn(
const Instantiation& i);
729 void incOut(
const Instantiation& i);
750 void decOut(
const Instantiation& i);
767 void incNotVar(
const DiscreteVariable& v);
786 void decNotVar(
const DiscreteVariable& v);
804 void incVar(
const DiscreteVariable& v);
822 void decVar(
const DiscreteVariable& v);
861 void setFirstIn(
const Instantiation& i);
879 void setLastIn(
const Instantiation& i);
895 void setFirstOut(
const Instantiation& i);
910 void setLastOut(
const Instantiation& i);
923 void setFirstNotVar(
const DiscreteVariable& v);
935 void setLastNotVar(
const DiscreteVariable& v);
947 void setFirstVar(
const DiscreteVariable& v);
959 void setLastVar(
const DiscreteVariable& v);
982 bool actAsSlave(MultiDimAdressable& aMD);
995 bool isSlave()
const;
1001 bool isMaster(
const MultiDimAdressable* m)
const;
1007 bool isMaster(
const MultiDimAdressable& m)
const;
1019 void synchronizeWithMaster(
const MultiDimAdressable* m);
1029 void addWithMaster(
const MultiDimAdressable* m,
const DiscreteVariable& v);
1039 void eraseWithMaster(
const MultiDimAdressable* m,
const DiscreteVariable& v);
1050 bool operator==(
const Instantiation& other)
const;
1056 Instantiation& operator++();
1062 Instantiation& operator--();
1068 Instantiation& operator+=(Size depl);
1074 Instantiation& operator-=(Size depl);
1086 Idx hamming()
const;
1092 std::string toString()
const;
1105 void reorder(
const Sequence<
const DiscreteVariable* >& v);
1113 void reorder(
const Instantiation& i);
1123 virtual void replace_(
const DiscreteVariable* x,
1124 const DiscreteVariable* y) final;
1129 MultiDimAdressable* master__;
1132 Sequence<
const DiscreteVariable* > vars__;
1135 std::vector< Idx > vals__;
1149 void swap__(Idx i, Idx j);
1160 void chgVal__(Idx varPos, Idx newVal);
1184 void add__(
const DiscreteVariable& v);
1202 void erase__(
const DiscreteVariable& v);
1212 void notifiedDimChanged__(
const Sequence<
const DiscreteVariable* >& v);
1218 void init__(MultiDimAdressable* master);
1230 void reorder__(
const Sequence<
const DiscreteVariable* >& v);
1232 void masterChangeNotification__(Idx varPos, Idx newVal, Idx oldVal)
const;
1233 void masterFirstNotification__()
const;
1234 void masterIncNotification__()
const;
1235 void masterLastNotification__()
const;
1236 void masterDecNotification__()
const;
1242 std::ostream& operator<<(std::ostream&,
const Instantiation&);
1250 class HashFunc< Instantiation >:
public HashFuncBase< Instantiation > {
1257 static Size castToSize(
const Instantiation& key);
1264 virtual Size operator()(
const Instantiation& key)
const override final;
1268 #ifndef GUM_NO_INLINE 1269 # include <agrum/tools/multidim/instantiation_inl.h>