aGrUM  0.16.0
instantiation.h
Go to the documentation of this file.
1 
29 #ifndef GUM_INSTANTIATION_H
30 #define GUM_INSTANTIATION_H
31 
32 #include <ostream>
33 #include <sstream>
34 
35 #include <agrum/agrum.h>
36 
37 #include <agrum/core/hashTable.h>
39 
40 namespace gum {
41 
42  class MultiDimAdressable;
43  // =========================================================================
44  // === GUM_INSTANTIATION ===
45  // =========================================================================
84  public:
85  // =========================================================================
87  // =========================================================================
89 
93  Instantiation();
94 
108  Instantiation(const Instantiation& aI, const bool notifyMaster = true);
109 
124 
143 
161  Instantiation(const MultiDimAdressable& aMD);
162 
181 
199  Instantiation(const MultiDimAdressable* aMD);
200 
204  ~Instantiation();
205 
207  // =========================================================================
209  // =========================================================================
211 
216  Idx nbrDim() const final;
217 
240  void add(const DiscreteVariable& v) final;
241 
255  void erase(const DiscreteVariable& v) final;
256 
261  void clear();
262 
269  Size domainSize() const final;
270 
278  Idx pos(const DiscreteVariable& v) const final;
279 
293  Idx val(Idx i) const;
294 
308  Idx val(const DiscreteVariable& var) const;
309 
323  Idx valFromPtr(const DiscreteVariable* pvar) const;
324 
332  const DiscreteVariable& variable(Idx i) const final;
333 
342  const DiscreteVariable& variable(const std::string& name) const final;
343 
363  Instantiation& chgVal(const DiscreteVariable& v, Idx newval);
364 
384  Instantiation& chgVal(const DiscreteVariable* v, Idx newval);
385 
406  Instantiation& chgVal(Idx varPos, Idx newval);
407 
428  Instantiation& chgVal(const std::string& var, Idx newval);
429 
450  Instantiation& chgVal(const std::string& var, const std::string& newval);
451 
474 
485  void setValsFrom(
487  const Instantiation& external);
488 
495  bool contains(const DiscreteVariable& v) const final;
496 
503  bool contains(const DiscreteVariable* v) const;
504 
510 
515  virtual bool empty() const final;
516 
518  // =========================================================================
520  // =========================================================================
522 
538  bool inOverflow() const;
539 
577  void unsetOverflow();
578 
583  void unsetEnd();
584 
597  bool end() const;
598 
611  bool rend() const;
612 
614  // =========================================================================
616  // =========================================================================
618 
639  void inc();
640 
661  void dec();
662 
683  void incIn(const Instantiation& i);
684 
705  void decIn(const Instantiation& i);
706 
727  void incOut(const Instantiation& i);
728 
748  void decOut(const Instantiation& i);
749 
765  void incNotVar(const DiscreteVariable& v);
766 
784  void decNotVar(const DiscreteVariable& v);
785 
802  void incVar(const DiscreteVariable& v);
803 
820  void decVar(const DiscreteVariable& v);
821 
823  // =========================================================================
825  // =========================================================================
827 
835  void setFirst();
836 
844  void setLast();
845 
859  void setFirstIn(const Instantiation& i);
860 
877  void setLastIn(const Instantiation& i);
878 
893  void setFirstOut(const Instantiation& i);
894 
908  void setLastOut(const Instantiation& i);
909 
921  void setFirstNotVar(const DiscreteVariable& v);
922 
933  void setLastNotVar(const DiscreteVariable& v);
934 
945  void setFirstVar(const DiscreteVariable& v);
946 
957  void setLastVar(const DiscreteVariable& v);
958 
960  // =========================================================================
962  // =========================================================================
964 
980  bool actAsSlave(MultiDimAdressable& aMD);
981 
987  bool forgetMaster();
988 
993  bool isSlave() const;
994 
999  bool isMaster(const MultiDimAdressable* m) const;
1000 
1005  bool isMaster(const MultiDimAdressable& m) const;
1006 
1018 
1027  void addWithMaster(const MultiDimAdressable* m, const DiscreteVariable& v);
1028 
1037  void eraseWithMaster(const MultiDimAdressable* m, const DiscreteVariable& v);
1038 
1040  // =========================================================================
1042  // =========================================================================
1044 
1048  bool operator==(const Instantiation& other) const;
1049 
1055 
1061 
1066  Instantiation& operator+=(Size depl);
1067 
1072  Instantiation& operator-=(Size depl);
1073 
1075  // =========================================================================
1077  // =========================================================================
1079 
1084  Idx hamming() const;
1085 
1090  std::string toString() const;
1091 
1104 
1111  void reorder(const Instantiation& i);
1112 
1114 
1115  protected:
1121  virtual void _replace(const DiscreteVariable* x,
1122  const DiscreteVariable* y) final;
1123 
1124  private:
1128 
1131 
1133  std::vector< Idx > __vals;
1134 
1141 
1147  void __swap(Idx i, Idx j);
1148 
1158  void __chgVal(Idx varPos, Idx newVal);
1159 
1182  void __add(const DiscreteVariable& v);
1183 
1200  void __erase(const DiscreteVariable& v);
1201 
1211 
1216  void __init(MultiDimAdressable* master);
1217 
1229 
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;
1235  };
1236 
1240  std::ostream& operator<<(std::ostream&, const Instantiation&);
1241 
1246  template <>
1247  // class HashFunc< Instantiation > : public HashFuncBase< Instantiation > {
1248  class HashFunc< Instantiation > : public HashFuncBase< Instantiation > {
1249  public:
1255  static Size castToSize(const Instantiation& key);
1256 
1262  virtual Size operator()(const Instantiation& key) const override final;
1263  };
1264 } /* namespace gum */
1265 
1266 #ifndef GUM_NO_INLINE
1268 #endif /* GUM_NO_INLINE */
1269 
1270 #endif /* GUM_INSTANTIATION_H */
void __erase(const DiscreteVariable &v)
Removes a variable from the sequence of vars.
void __init(MultiDimAdressable *master)
Initialize this Instantiation.
bool __overflow
Indicates whether the current value of the tuple is valid when we loop sufficiently over values of th...
void decIn(const Instantiation &i)
Operator decrement for the variables in i.
Idx valFromPtr(const DiscreteVariable *pvar) const
Returns the current value of a given variable.
void addWithMaster(const MultiDimAdressable *m, const DiscreteVariable &v)
Call Instantiation::__add(const DiscreteVariable&) by master.
Idx pos(const DiscreteVariable &v) const final
Returns the position of the variable v.
Size domainSize() const final
Returns the product of the variable&#39;s domain size in the Instantiation.
void __masterDecNotification() const
~Instantiation()
Destructor.
Idx nbrDim() const final
Returns the number of variables in the Instantiation.
void setLast()
Assign the last values in the Instantiation.
The generic class for storing (ordered) sequences of objects.
Definition: sequence.h:1022
void setLastIn(const Instantiation &i)
Assign the last values in the Instantiation for the variables in i.
Sequence< const DiscreteVariable *> __vars
The tuple of variables to be instantiated.
bool forgetMaster()
Deassociate the master MultiDimAdressable, if any.
void unsetOverflow()
Removes the flag overflow.
void __masterIncNotification() const
void dec()
Operator decrement.
bool operator==(const Instantiation &other) const
operator==
Instantiation & chgVal(const DiscreteVariable &v, Idx newval)
Assign newval to variable v in the Instantiation.
Interface for all classes addressing in a multiDim fashion.
void reorder(const Sequence< const DiscreteVariable * > &v)
Reorder vars of this instantiation giving the order in v.
Class template representing hashing function of LpCol.
Definition: hashFunc.h:471
Base class for discrete random variable.
void setLastOut(const Instantiation &i)
Assign the last values in the Instantiation for the variables not in i.
void incNotVar(const DiscreteVariable &v)
Operator increment for vars which are not v.
Copyright 2005-2019 Pierre-Henri WUILLEMIN et Christophe GONZALES (LIP6) {prenom.nom}_at_lip6.fr.
Definition: agrum.h:25
void incVar(const DiscreteVariable &v)
Operator increment for variable v only.
Instantiation & setVals(const Instantiation &i)
Assign the values from i in the Instantiation.
const Sequence< const DiscreteVariable *> & variablesSequence() const final
Returns the sequence of DiscreteVariable of this instantiation.
The class for generic Hash Tables.
Definition: hashTable.h:679
void setFirstNotVar(const DiscreteVariable &v)
Assign the first values to variables different of v.
void unsetEnd()
Alias for unsetOverflow().
void decOut(const Instantiation &i)
Operator decrement for the variables not in i.
Idx val(Idx i) const
Returns the current value of the variable at position i.
Instantiation & operator--()
Alias of Instantiation::dec().
Instantiation & operator++()
Alias of Instantiation::inc().
bool rend() const
Returns true if the Instantiation reached the rend.
void incOut(const Instantiation &i)
Operator increment for the variables not in i.
std::ostream & operator<<(std::ostream &output, const BayesNet< GUM_SCALAR > &bn)
Prints map&#39;s DAG in output using the Graphviz-dot format.
Definition: BayesNet_tpl.h:605
void setFirstIn(const Instantiation &i)
Assign the first values in the Instantiation for the variables in i.
void clear()
Erase all variables from an Instantiation.
void inc()
Operator increment.
void __chgVal(Idx varPos, Idx newVal)
Modifies internally the value of a given variable of the sequence.
void setFirstVar(const DiscreteVariable &v)
Assign the first value in the Instantiation for var v.
std::string toString() const
Give a string version of instantiation.
void __reorder(const Sequence< const DiscreteVariable * > &v)
Reorder vars of this instantiation giving the order in v.
Idx hamming() const
Returns the hamming distance of this instantiation.
Instantiation & operator-=(Size depl)
Calls depl times Instantiation::dec().
virtual bool empty() const final
Returns true if the instantiation is empty.
void __masterFirstNotification() const
void incIn(const Instantiation &i)
Operator increment for the variables in i.
void setLastNotVar(const DiscreteVariable &v)
Assign the last values to variables different of v.
void __masterLastNotification() const
MultiDimAdressable * __master
The master, if any, contains precisely the set of variables to be instantiated.
Abstract base class for all multi dimensionnal addressable.
Class for assigning/browsing values to tuples of discrete variables.
Definition: instantiation.h:83
bool contains(const DiscreteVariable &v) const final
Indicates whether a given variable belongs to the Instantiation.
Copyright 2005-2019 Pierre-Henri WUILLEMIN et Christophe GONZALES (LIP6) {prenom.nom}_at_lip6.fr.
void __notifiedDimChanged(const Sequence< const DiscreteVariable * > &v)
This function is called by the master (if any) when changes arise in its vars list.
void setValsFrom(const HashTable< const DiscreteVariable *, const DiscreteVariable * > &map, const Instantiation &external)
Assign the values of external in *this, using map as a bijection between external and this variables...
bool isMaster(const MultiDimAdressable *m) const
Indicates whether m is the master of this instantiation.
Instantiation & operator+=(Size depl)
Calls depl times Instantiation::inc().
void synchronizeWithMaster(const MultiDimAdressable *m)
Force the variables sequence to be the same as the master one.
void setLastVar(const DiscreteVariable &v)
Assign the last value in the Instantiation for var v.
void setFirst()
Assign the first values to the tuple of the Instantiation.
Instantiation & operator=(const Instantiation &aI)
Copy operator.
void __swap(Idx i, Idx j)
Swap two variables in the Instantiation.
All hash functions should inherit from this class.
Definition: hashFunc.h:149
Instantiation()
Default constructor: creates an empty tuple.
Size Idx
Type for indexes.
Definition: types.h:53
bool inOverflow() const
Indicates whether the current value of the tuple is correct or not.
void decNotVar(const DiscreteVariable &v)
Operator decrement for vars which are not v.
void add(const DiscreteVariable &v) final
Adds a new variable in the Instantiation.
void erase(const DiscreteVariable &v) final
Removes a variable from the Instantiation.
bool isSlave() const
Indicates whether the Instantiation has a master.
Copyright 2005-2019 Pierre-Henri WUILLEMIN et Christophe GONZALES (LIP6) {prenom.nom}_at_lip6.fr.
std::size_t Size
In aGrUM, hashed values are unsigned long int.
Definition: types.h:48
bool actAsSlave(MultiDimAdressable &aMD)
Tries to register the Instantiation to a MultiDimAdressable.
virtual void _replace(const DiscreteVariable *x, const DiscreteVariable *y) final
Replace x by y.
const DiscreteVariable & variable(Idx i) const final
Returns the variable at position i in the tuple.
void __add(const DiscreteVariable &v)
Adds a new var to the sequence of vars.
Copyright 2005-2019 Pierre-Henri WUILLEMIN et Christophe GONZALES (LIP6) {prenom.nom}_at_lip6.fr.
void decVar(const DiscreteVariable &v)
Operator decrement for variable v only.
void eraseWithMaster(const MultiDimAdressable *m, const DiscreteVariable &v)
Call Instantiation::__erase(const DiscreteVariable&) by master.
void __masterChangeNotification(Idx varPos, Idx newVal, Idx oldVal) const
bool end() const
Returns true if the Instantiation reached the end.
std::vector< Idx > __vals
The current instantiation: the value of the tuple.
void setFirstOut(const Instantiation &i)
Assign the first values in the Instantiation for the variables not in i.