aGrUM  0.14.2
multiDimDecorator.h
Go to the documentation of this file.
1 /***************************************************************************
2  * Copyright (C) 2005 by Pierre-Henri WUILLEMIN et Christophe GONZALES *
3  * {prenom.nom}_at_lip6.fr *
4  * *
5  * This program is free software; you can redistribute it and/or modify *
6  * it under the terms of the GNU General Public License as published by *
7  * the Free Software Foundation; either version 2 of the License, or *
8  * (at your option) any later version. *
9  * *
10  * This program is distributed in the hope that it will be useful, *
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of *
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
13  * GNU General Public License for more details. *
14  * *
15  * You should have received a copy of the GNU General Public License *
16  * along with this program; if not, write to the *
17  * Free Software Foundation, Inc., *
18  * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
19  ***************************************************************************/
26 #ifndef GUM_MULTI_DIM_DECORATOR_H
27 #define GUM_MULTI_DIM_DECORATOR_H
28 
29 #include <agrum/agrum.h>
30 
32 
33 namespace gum {
34 
35  // ===========================================================================
36  // === MULTIDIM DECORATOR ===
37  // ===========================================================================
38 
55  template < typename GUM_SCALAR >
56  class MultiDimDecorator : public MultiDimContainer< GUM_SCALAR > {
57  public:
58  // =========================================================================
60  // =========================================================================
62 
68  GUM_SCALAR empty_value = (GUM_SCALAR)0);
69 
74 
79  operator=(const MultiDimDecorator& from) noexcept;
80 
85 
90 
95 
97  // =========================================================================
99  // =========================================================================
101 
102  virtual Idx nbrDim() const final;
103 
104  virtual Size domainSize() const final;
105 
106  virtual void add(const DiscreteVariable& v) final;
107 
108  virtual void erase(const DiscreteVariable& var) final;
109 
111  variablesSequence() const final;
112  virtual const DiscreteVariable& variable(Idx) const final;
113  virtual const DiscreteVariable& variable(const std::string& name) const final;
114 
115  virtual Idx pos(const DiscreteVariable& var) const final;
116 
117  virtual bool contains(const DiscreteVariable& var) const final;
118 
119  virtual bool empty() const final;
120 
122  // ========================================================================
124  // ========================================================================
126 
127  virtual bool unregisterSlave(Instantiation& i) final;
128 
129  virtual bool registerSlave(Instantiation& i) final;
130 
131  virtual void changeNotification(const Instantiation& i,
132  const DiscreteVariable* const var,
133  Idx oldval,
134  Idx newval) final;
135 
136  virtual void setChangeNotification(const Instantiation& i) final;
137 
138  virtual void setFirstNotification(const Instantiation& i) final;
139 
140  virtual void setLastNotification(const Instantiation& i) final;
141 
142  virtual void setIncNotification(const Instantiation& i) final;
143 
144  virtual void setDecNotification(const Instantiation& i) final;
145 
146  virtual void notifyChange() const final;
147 
149  // =========================================================================
151  // =========================================================================
153 
159  virtual void set(const Instantiation& i, const GUM_SCALAR& value) const final;
160 
166  virtual GUM_SCALAR get(const Instantiation& i) const final;
167 
168  virtual void fill(const GUM_SCALAR& d) const final;
169 
188  virtual void populate(const std::vector< GUM_SCALAR >& v) const final;
189 
194  virtual void apply(std::function< GUM_SCALAR(GUM_SCALAR) > f) const final;
195 
201  virtual GUM_SCALAR
202  reduce(std::function< GUM_SCALAR(GUM_SCALAR, GUM_SCALAR) > f,
203  GUM_SCALAR base) const final;
204 
205  virtual MultiDimDecorator< GUM_SCALAR >* newFactory() const = 0;
206 
207  virtual void beginMultipleChanges() final;
208 
209  virtual void endMultipleChanges() final;
210 
211  virtual void endMultipleChanges(const GUM_SCALAR&) final;
212 
213  virtual const std::string toString(const Instantiation* i) const;
214 
215  virtual const std::string toString() const;
216 
218  // =========================================================================
220  // =========================================================================
222 
223 
227  virtual const MultiDimImplementation< GUM_SCALAR >* content() const final;
228 
233 
235  protected:
236  virtual void _replace(const DiscreteVariable* x, const DiscreteVariable* y);
237 
243 
248 
255  GUM_SCALAR& _get(const Instantiation& i) const final;
256 
261  mutable GUM_SCALAR _empty_value;
262  };
263 
264 } /* namespace gum */
265 
267 
268 #endif /* GUM_MULTI_DIM_DECORATOR_H */
virtual void beginMultipleChanges() final
Default implementation of MultiDimContainer::set().
virtual Idx nbrDim() const final
Returns the number of vars in the multidimensional container.
MultiDimImplementation< GUM_SCALAR > * _content
The true container.
virtual Size domainSize() const final
Returns the product of the variables domain size.
virtual const std::string toString() const
Default implementation of MultiDimContainer::set().
virtual bool unregisterSlave(Instantiation &i) final
Unregister i as a slave of this MultiDimAdressable.
GUM_SCALAR & _get(const Instantiation &i) const final
Return a data, given a Insantiation - final method.
The generic class for storing (ordered) sequences of objects.
Definition: sequence.h:1019
virtual void erase(const DiscreteVariable &var) final
Removes a var from the variables of the multidimensional matrix.
virtual MultiDimDecorator< GUM_SCALAR > * newFactory() const =0
Default implementation of MultiDimContainer::set().
GUM_SCALAR _empty_value
value of the MultiDimDecorator if no dimension.
MultiDimDecorator< GUM_SCALAR > & operator=(const MultiDimDecorator &from) noexcept
copy operator
Base class for discrete random variable.
gum is the global namespace for all aGrUM entities
Definition: agrum.h:25
Abstract base class for all multi dimensionnal containers.
virtual void changeNotification(const Instantiation &i, const DiscreteVariable *const var, Idx oldval, Idx newval) final
Listen to changes in a given Instantiation.
virtual void _replace(const DiscreteVariable *x, const DiscreteVariable *y)
This is called by MultiDimContainer::replace() to proceed with the replacing between x and y...
virtual bool empty() const final
Returns true if no var is in *this.
virtual const MultiDimImplementation< GUM_SCALAR > * content() const final
Returns the implementation for this object (may be *this).
virtual void populate(const std::vector< GUM_SCALAR > &v) const final
Automatically fills this MultiDimContainer with the values in v.
virtual void setLastNotification(const Instantiation &i) final
Listen to setLast in a given Instantiation.
MultiDimDecorator(MultiDimImplementation< GUM_SCALAR > *aContent=nullptr, GUM_SCALAR empty_value=(GUM_SCALAR) 0)
Class constructor.
virtual void setFirstNotification(const Instantiation &i) final
Listen to setFirst in a given Instantiation.
virtual void apply(std::function< GUM_SCALAR(GUM_SCALAR) > f) const final
Apply a function on every element of the container.
void _swapContent(MultiDimImplementation< GUM_SCALAR > *aContent) const
protecte method to swap the implementation behind the Potential
virtual bool registerSlave(Instantiation &i) final
Register i as a slave of this MultiDimAdressable.
virtual void endMultipleChanges() final
Default implementation of MultiDimContainer::set().
virtual GUM_SCALAR reduce(std::function< GUM_SCALAR(GUM_SCALAR, GUM_SCALAR) > f, GUM_SCALAR base) const final
compute lfold for this container
virtual void notifyChange() const final
Implementation for MultiDimDecorator.
virtual const DiscreteVariable & variable(Idx) const final
Returns a const ref to the ith var.
virtual void setIncNotification(const Instantiation &i) final
Listen to increment in a given Instantiation.
virtual void setDecNotification(const Instantiation &i) final
Listen to increment in each recorded Instantiation.
Class for assigning/browsing values to tuples of discrete variables.
Definition: instantiation.h:80
virtual Idx pos(const DiscreteVariable &var) const final
Returns the index of a variable.
Decorator design pattern in order to separate implementations from multidimensional matrix concepts...
virtual void add(const DiscreteVariable &v) final
Adds a new var to the variables of the multidimensional matrix.
<agrum/multidim/multiDimImplementation.h>
Size Idx
Type for indexes.
Definition: types.h:50
virtual void fill(const GUM_SCALAR &d) const final
Default implementation of MultiDimContainer::set().
std::size_t Size
In aGrUM, hashed values are unsigned long int.
Definition: types.h:45
Header of the MultiDimArray class.
~MultiDimDecorator()
Class destructor.
virtual const Sequence< const DiscreteVariable *> & variablesSequence() const final
Returns a const ref to the sequence of DiscreteVariable*.
virtual void setChangeNotification(const Instantiation &i) final
Listen to an assignment of a value in a Instantiation.
virtual bool contains(const DiscreteVariable &var) const final
Returns true if var is in *this.