aGrUM  0.17.2
a C++ library for (probabilistic) graphical models
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 
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  void erase(const std::string& name);
257 
262  void clear();
263 
270  Size domainSize() const final;
271 
279  Idx pos(const DiscreteVariable& v) const final;
280 
294  Idx val(Idx i) const;
295 
309  Idx val(const DiscreteVariable& var) const;
310  Idx val(const std::string& name) const;
311 
325  Idx valFromPtr(const DiscreteVariable* pvar) const;
326 
334  const DiscreteVariable& variable(Idx i) const final;
335 
344  const DiscreteVariable& variable(const std::string& name) const final;
345 
365  Instantiation& chgVal(const DiscreteVariable& v, Idx newval);
366 
386  Instantiation& chgVal(const DiscreteVariable* v, Idx newval);
387 
408  Instantiation& chgVal(Idx varPos, Idx newval);
409 
430  Instantiation& chgVal(const std::string& var, Idx newval);
431 
452  Instantiation& chgVal(const std::string& var, const std::string& newval);
453 
476 
487  void setValsFrom(
489  const Instantiation& external);
490 
497  bool contains(const DiscreteVariable& v) const final;
498  bool contains(const std::string& name) const;
499 
506  bool contains(const DiscreteVariable* v) const;
507 
513 
518  virtual bool empty() const final;
519 
521  // =========================================================================
523  // =========================================================================
525 
541  bool inOverflow() const;
542 
580  void unsetOverflow();
581 
586  void unsetEnd();
587 
600  bool end() const;
601 
614  bool rend() const;
615 
617  // =========================================================================
619  // =========================================================================
621 
642  void inc();
643 
664  void dec();
665 
686  void incIn(const Instantiation& i);
687 
708  void decIn(const Instantiation& i);
709 
730  void incOut(const Instantiation& i);
731 
751  void decOut(const Instantiation& i);
752 
768  void incNotVar(const DiscreteVariable& v);
769 
787  void decNotVar(const DiscreteVariable& v);
788 
805  void incVar(const DiscreteVariable& v);
806 
823  void decVar(const DiscreteVariable& v);
824 
826  // =========================================================================
828  // =========================================================================
830 
838  void setFirst();
839 
847  void setLast();
848 
862  void setFirstIn(const Instantiation& i);
863 
880  void setLastIn(const Instantiation& i);
881 
896  void setFirstOut(const Instantiation& i);
897 
911  void setLastOut(const Instantiation& i);
912 
924  void setFirstNotVar(const DiscreteVariable& v);
925 
936  void setLastNotVar(const DiscreteVariable& v);
937 
948  void setFirstVar(const DiscreteVariable& v);
949 
960  void setLastVar(const DiscreteVariable& v);
961 
963  // =========================================================================
965  // =========================================================================
967 
983  bool actAsSlave(MultiDimAdressable& aMD);
984 
990  bool forgetMaster();
991 
996  bool isSlave() const;
997 
1002  bool isMaster(const MultiDimAdressable* m) const;
1003 
1008  bool isMaster(const MultiDimAdressable& m) const;
1009 
1021 
1030  void addWithMaster(const MultiDimAdressable* m, const DiscreteVariable& v);
1031 
1040  void eraseWithMaster(const MultiDimAdressable* m, const DiscreteVariable& v);
1041 
1043  // =========================================================================
1045  // =========================================================================
1047 
1051  bool operator==(const Instantiation& other) const;
1052 
1058 
1064 
1069  Instantiation& operator+=(Size depl);
1070 
1075  Instantiation& operator-=(Size depl);
1076 
1078  // =========================================================================
1080  // =========================================================================
1082 
1087  Idx hamming() const;
1088 
1093  std::string toString() const;
1094 
1107 
1114  void reorder(const Instantiation& i);
1115 
1117 
1118  protected:
1124  virtual void _replace(const DiscreteVariable* x,
1125  const DiscreteVariable* y) final;
1126 
1127  private:
1131 
1134 
1136  std::vector< Idx > __vals;
1137 
1144 
1150  void __swap(Idx i, Idx j);
1151 
1161  void __chgVal(Idx varPos, Idx newVal);
1162 
1185  void __add(const DiscreteVariable& v);
1186 
1203  void __erase(const DiscreteVariable& v);
1204 
1214 
1219  void __init(MultiDimAdressable* master);
1220 
1232 
1233  void __masterChangeNotification(Idx varPos, Idx newVal, Idx oldVal) const;
1234  void __masterFirstNotification() const;
1235  void __masterIncNotification() const;
1236  void __masterLastNotification() const;
1237  void __masterDecNotification() const;
1238  };
1239 
1243  std::ostream& operator<<(std::ostream&, const Instantiation&);
1244 
1249  template <>
1250  // class HashFunc< Instantiation > : public HashFuncBase< Instantiation > {
1251  class HashFunc< Instantiation >: public HashFuncBase< Instantiation > {
1252  public:
1258  static Size castToSize(const Instantiation& key);
1259 
1265  virtual Size operator()(const Instantiation& key) const override final;
1266  };
1267 } /* namespace gum */
1268 
1269 #ifndef GUM_NO_INLINE
1271 #endif /* GUM_NO_INLINE */
1272 
1273 #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-2020 Pierre-Henri WUILLEMIN () et Christophe GONZALES () info_at_agrum_dot_org.
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:626
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-2020 Pierre-Henri WUILLEMIN () et Christophe GONZALES () info_at_agrum_dot_org.
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-2020 Pierre-Henri WUILLEMIN () et Christophe GONZALES () info_at_agrum_dot_org.
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-2020 Pierre-Henri WUILLEMIN () et Christophe GONZALES () info_at_agrum_dot_org.
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.