![]() |
aGrUM
0.20.3
a C++ library for (probabilistic) graphical models
|
Decorator design pattern in order to separate implementations from multidimensional matrix concepts. More...
#include <agrum/tools/multidim/multiDimDecorator.h>
Public Member Functions | |
Constructors / Destructors | |
MultiDimDecorator (MultiDimImplementation< GUM_SCALAR > *aContent=nullptr, GUM_SCALAR empty_value=(GUM_SCALAR) 0) | |
Class constructor. More... | |
MultiDimDecorator (const MultiDimDecorator< GUM_SCALAR > &from) | |
copy constructor & assignment More... | |
MultiDimDecorator< GUM_SCALAR > & | operator= (const MultiDimDecorator &from) noexcept |
copy operator More... | |
MultiDimDecorator (MultiDimDecorator< GUM_SCALAR > &&) noexcept | |
Class move constructor. More... | |
MultiDimDecorator< GUM_SCALAR > & | operator= (MultiDimDecorator &&from) |
assignment operator. More... | |
~MultiDimDecorator () | |
Class destructor. More... | |
MultiDimInterface implementation | |
virtual Idx | nbrDim () const final |
Returns the number of vars in the multidimensional container. More... | |
virtual Size | domainSize () const final |
Returns the product of the variables domain size. More... | |
virtual void | add (const DiscreteVariable &v) final |
Adds a new var to the variables of the multidimensional matrix. More... | |
virtual void | erase (const DiscreteVariable &var) final |
Removes a var from the variables of the multidimensional matrix. More... | |
virtual void | erase (const std::string &name) final |
virtual const Sequence< const DiscreteVariable *> & | variablesSequence () const final |
Returns a const ref to the sequence of DiscreteVariable*. More... | |
virtual const DiscreteVariable & | variable (Idx) const final |
Returns a const ref to the ith var. More... | |
virtual const DiscreteVariable & | variable (const std::string &name) const final |
Returns the variable with the name. More... | |
virtual Idx | pos (const DiscreteVariable &var) const final |
Returns the index of a variable. More... | |
virtual bool | contains (const DiscreteVariable &var) const final |
Returns true if var is in *this. More... | |
virtual bool | empty () const final |
Returns true if no var is in *this. More... | |
MultiDimAddressable implementation | |
virtual bool | unregisterSlave (Instantiation &i) final |
Unregister i as a slave of this MultiDimAdressable. More... | |
virtual bool | registerSlave (Instantiation &i) final |
Register i as a slave of this MultiDimAdressable. More... | |
virtual void | changeNotification (const Instantiation &i, const DiscreteVariable *const var, Idx oldval, Idx newval) final |
Listen to changes in a given Instantiation. More... | |
virtual void | setChangeNotification (const Instantiation &i) final |
Listen to an assignment of a value in a Instantiation. More... | |
virtual void | setFirstNotification (const Instantiation &i) final |
Listen to setFirst in a given Instantiation. More... | |
virtual void | setLastNotification (const Instantiation &i) final |
Listen to setLast in a given Instantiation. More... | |
virtual void | setIncNotification (const Instantiation &i) final |
Listen to increment in a given Instantiation. More... | |
virtual void | setDecNotification (const Instantiation &i) final |
Listen to increment in each recorded Instantiation. More... | |
virtual void | notifyChange () const final |
MultiDimContainer implementation | |
virtual void | set (const Instantiation &i, const GUM_SCALAR &value) const final |
Default implementation of MultiDimContainer::set(). More... | |
virtual GUM_SCALAR | get (const Instantiation &i) const final |
Default implementation of MultiDimContainer::get(). More... | |
virtual void | fill (const GUM_SCALAR &d) const final |
Default implementation of MultiDimContainer::set(). More... | |
virtual void | populate (const std::vector< GUM_SCALAR > &v) const final |
Automatically fills this MultiDimContainer with the values in v. More... | |
virtual void | apply (std::function< GUM_SCALAR(GUM_SCALAR) > f) const final |
Apply a function on every element of the container. More... | |
virtual GUM_SCALAR | reduce (std::function< GUM_SCALAR(GUM_SCALAR, GUM_SCALAR) > f, GUM_SCALAR base) const final |
compute lfold for this container More... | |
virtual MultiDimDecorator< GUM_SCALAR > * | newFactory () const =0 |
Default implementation of MultiDimContainer::set(). More... | |
virtual void | beginMultipleChanges () final |
Default implementation of MultiDimContainer::set(). More... | |
virtual void | endMultipleChanges () final |
Default implementation of MultiDimContainer::set(). More... | |
virtual void | endMultipleChanges (const GUM_SCALAR &) final |
Default implementation of MultiDimContainer::set(). More... | |
virtual std::string | toString (const Instantiation *i) const |
Default implementation of MultiDimContainer::set(). More... | |
virtual std::string | toString () const |
Default implementation of MultiDimContainer::set(). More... | |
Various methods. | |
virtual const MultiDimImplementation< GUM_SCALAR > * | content () const final |
Returns the implementation for this object (may be *this). More... | |
virtual MultiDimImplementation< GUM_SCALAR > * | content () final |
Returns the implementation for this object (may be *this). More... | |
Accessors / Modifiers | |
GUM_SCALAR | operator[] (const Instantiation &i) const |
An [] operator using a Instantiation as argument. More... | |
virtual void | populate (std::initializer_list< GUM_SCALAR > l) const |
Automatically fills this MultiDimContainer with the values in l. More... | |
Copy methods. | |
virtual void | copyFrom (const MultiDimContainer< GUM_SCALAR > &src) const |
Basic copy of a MultiDimContainer. More... | |
virtual void | copyFrom (const MultiDimContainer< GUM_SCALAR > &src, Instantiation *p_i) const |
Basic copy of a MultiDimContainer. More... | |
virtual void | extractFrom (const MultiDimContainer< GUM_SCALAR > &src, const Instantiation &mask) |
Basic extraction of a MultiDimContainer. More... | |
virtual MultiDimAdressable & | getMasterRef () |
In order to insure the dereference for decorators, we need to virtualize the access to master pointer. More... | |
virtual const MultiDimAdressable & | getMasterRef () const |
In order to insure the dereference for decorators, we need to virtualize the access to master pointer. More... | |
virtual void | copy (const MultiDimContainer< GUM_SCALAR > &src) |
Removes all variables in this MultiDimContainer and copy the content of src, variables included. More... | |
Various methods. | |
bool | operator== (const MultiDimContainer< GUM_SCALAR > &p) const |
Test if this MultiDimContainer is equal to p. More... | |
bool | operator!= (const MultiDimContainer< GUM_SCALAR > &p) const |
Test if this MultiDimContainer is different of p. More... | |
Accessors / Modifiers | |
void | replace (const DiscreteVariable &x, const DiscreteVariable &y) |
Replace variables in this multidim. More... | |
Protected Attributes | |
MultiDimImplementation< GUM_SCALAR > * | content_ |
The true container. More... | |
GUM_SCALAR | empty_value_ |
value of the MultiDimDecorator if no dimension. More... | |
Protected Member Functions | |
virtual void | replace_ (const DiscreteVariable *x, const DiscreteVariable *y) |
This is called by MultiDimContainer::replace() to proceed with the replacing between x and y. More... | |
void | swapContent_ (MultiDimImplementation< GUM_SCALAR > *aContent) const |
protecte method to swap the implementation behind the Potential More... | |
GUM_SCALAR & | get_ (const Instantiation &i) const final |
Return a data, given a Insantiation - final method. More... | |
Decorator design pattern in order to separate implementations from multidimensional matrix concepts.
A MultiDimDecorator is a virtual class for all encapsulation of MultiDimImplementation, for example probability, utility, etc. It implements a decorator design pattern in order to have a array, tree, sparse or matrix (...) implementation of MultiDimImplementation.
GUM_SCALAR | The type of the scalar stored in this multidimensional matrix. |
Definition at line 58 of file multiDimDecorator.h.
INLINE gum::MultiDimDecorator< GUM_SCALAR >::MultiDimDecorator | ( | MultiDimImplementation< GUM_SCALAR > * | aContent = nullptr , |
GUM_SCALAR | empty_value = (GUM_SCALAR)0 |
||
) |
Class constructor.
aContent | The implementation used by this MultiDimDecorator. |
Definition at line 66 of file multiDimDecorator_tpl.h.
References gum::Set< Key, Alloc >::emplace().
INLINE gum::MultiDimDecorator< GUM_SCALAR >::MultiDimDecorator | ( | const MultiDimDecorator< GUM_SCALAR > & | from | ) |
copy constructor & assignment
Definition at line 76 of file multiDimDecorator_tpl.h.
References gum::Set< Key, Alloc >::emplace().
|
noexcept |
Class move constructor.
Definition at line 105 of file multiDimDecorator_tpl.h.
References gum::Set< Key, Alloc >::emplace().
INLINE gum::MultiDimDecorator< GUM_SCALAR >::~MultiDimDecorator | ( | ) |
Class destructor.
Definition at line 133 of file multiDimDecorator_tpl.h.
References gum::Set< Key, Alloc >::emplace().
|
finalvirtual |
Adds a new var to the variables of the multidimensional matrix.
v | The new var. |
DuplicateElement | Raised if the variable already belongs to the sequence of variables. |
OperationNotAllowed | Raised if this object is non mutable. |
Implements gum::MultiDimInterface.
Definition at line 175 of file multiDimDecorator_tpl.h.
References gum::Set< Key, Alloc >::emplace().
|
finalvirtual |
Apply a function on every element of the container.
f | the function to apply |
Reimplemented from gum::MultiDimContainer< GUM_SCALAR >.
Definition at line 325 of file multiDimDecorator_tpl.h.
References gum::Set< Key, Alloc >::emplace().
|
finalvirtual |
Default implementation of MultiDimContainer::set().
Calls get_ as a r-value.
Implements gum::MultiDimContainer< GUM_SCALAR >.
Definition at line 358 of file multiDimDecorator_tpl.h.
References gum::Set< Key, Alloc >::emplace().
|
finalvirtual |
Listen to changes in a given Instantiation.
i | The Instantiation to listen. |
var | The changed dim. |
oldval | The old value. |
newval | The changed value. |
Implements gum::MultiDimAdressable.
Definition at line 185 of file multiDimDecorator_tpl.h.
References gum::Set< Key, Alloc >::emplace().
|
finalvirtual |
Returns true if var is in *this.
v | A DiscreteVariable. |
Implements gum::MultiDimInterface.
Definition at line 264 of file multiDimDecorator_tpl.h.
References gum::Set< Key, Alloc >::emplace().
|
finalvirtual |
Returns the implementation for this object (may be *this).
Implements gum::MultiDimContainer< GUM_SCALAR >.
Definition at line 353 of file multiDimDecorator_tpl.h.
References gum::Set< Key, Alloc >::emplace().
|
finalvirtual |
Returns the implementation for this object (may be *this).
Implements gum::MultiDimContainer< GUM_SCALAR >.
Definition at line 346 of file multiDimDecorator_tpl.h.
References gum::Set< Key, Alloc >::emplace().
|
virtualinherited |
Removes all variables in this MultiDimContainer and copy the content of src, variables included.
src | The MultiDimContainer to copy. |
Reimplemented in gum::MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy >, gum::MultiDimFunctionGraph< GUM_SCALAR >, and gum::MultiDimFunctionGraph< GUM_SCALAR, ExactTerminalNodePolicy >.
Definition at line 272 of file multiDimContainer_tpl.h.
References gum::Set< Key, Alloc >::emplace().
|
virtualinherited |
Basic copy of a MultiDimContainer.
This method is virtual because it should be optimized in certain MultiDimContainer.
src | The MultiDimContainer src which values are copied. This is a full copy with no verification of dimensions. |
OperationNotAllowed | Raised if src does not have the same domain size than this MultiDimContainer. |
Reimplemented in gum::aggregator::MultiDimAggregator< GUM_SCALAR >, gum::MultiDimICIModel< GUM_SCALAR >, and gum::MultiDimArray< GUM_SCALAR >.
Definition at line 255 of file multiDimContainer_tpl.h.
References gum::Set< Key, Alloc >::emplace().
|
virtualinherited |
Basic copy of a MultiDimContainer.
This method is virtual because it should be optimized in certain MultiDimContainer.
src | The MultiDimContainer src which values are copied. |
p_i | Give the order to iterate in this MultiDimContainer during the copy (nullptr will correctly copy if this is a reorganization of src). |
OperationNotAllowed | Raised if src does not have the same domain size than this MultiDimContainer. |
Reimplemented in gum::MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy >, gum::MultiDimFunctionGraph< GUM_SCALAR >, and gum::MultiDimFunctionGraph< GUM_SCALAR, ExactTerminalNodePolicy >.
Definition at line 209 of file multiDimContainer_tpl.h.
References gum::Set< Key, Alloc >::emplace().
|
finalvirtual |
Returns the product of the variables domain size.
Implements gum::MultiDimInterface.
Definition at line 168 of file multiDimDecorator_tpl.h.
References gum::Set< Key, Alloc >::emplace().
|
finalvirtual |
Returns true if no var is in *this.
Implements gum::MultiDimInterface.
Definition at line 269 of file multiDimDecorator_tpl.h.
References gum::Set< Key, Alloc >::emplace().
|
finalvirtual |
Default implementation of MultiDimContainer::set().
Calls get_ as a r-value.
Implements gum::MultiDimContainer< GUM_SCALAR >.
Definition at line 363 of file multiDimDecorator_tpl.h.
References gum::Set< Key, Alloc >::emplace().
|
finalvirtual |
Default implementation of MultiDimContainer::set().
Calls get_ as a r-value.
Implements gum::MultiDimContainer< GUM_SCALAR >.
Definition at line 368 of file multiDimDecorator_tpl.h.
References gum::Set< Key, Alloc >::emplace().
|
finalvirtual |
Removes a var from the variables of the multidimensional matrix.
OperationNotAllowed | Raised if this object is non mutable. |
NotFound | Raised if v does not belong to this. |
Implements gum::MultiDimInterface.
Definition at line 238 of file multiDimDecorator_tpl.h.
References gum::Set< Key, Alloc >::emplace().
|
finalvirtual |
Definition at line 243 of file multiDimDecorator_tpl.h.
References gum::Set< Key, Alloc >::emplace().
|
virtualinherited |
Basic extraction of a MultiDimContainer.
This method is virtual because it should be optimized in certain MultiDimContainer.
src | The MultiDimContainer src which datas are copied. |
mask | partial instantiation of variables of the Potential : the |
extraction will concern every variable not in the instantiation and the copy of data will use the (relevant) values in this instantiation.
Definition at line 231 of file multiDimContainer_tpl.h.
References gum::Set< Key, Alloc >::emplace().
|
finalvirtual |
Default implementation of MultiDimContainer::set().
Calls get_ as a r-value.
Implements gum::MultiDimContainer< GUM_SCALAR >.
Definition at line 280 of file multiDimDecorator_tpl.h.
References gum::Set< Key, Alloc >::emplace().
|
finalvirtual |
Default implementation of MultiDimContainer::get().
Calls get_ as a l-value.
Reimplemented from gum::MultiDimContainer< GUM_SCALAR >.
Definition at line 147 of file multiDimDecorator_tpl.h.
References gum::Set< Key, Alloc >::emplace().
|
finalprotectedvirtual |
Return a data, given a Insantiation - final method.
i | The instantiation. |
NullElement | |
NotFound |
Implements gum::MultiDimContainer< GUM_SCALAR >.
Definition at line 142 of file multiDimDecorator_tpl.h.
References gum::Set< Key, Alloc >::emplace().
|
virtualinherited |
In order to insure the dereference for decorators, we need to virtualize the access to master pointer.
Implements gum::MultiDimAdressable.
Reimplemented in gum::MultiDimBucket< GUM_SCALAR >.
Definition at line 290 of file multiDimContainer_tpl.h.
References gum::Set< Key, Alloc >::emplace().
|
virtualinherited |
In order to insure the dereference for decorators, we need to virtualize the access to master pointer.
Implements gum::MultiDimAdressable.
Reimplemented in gum::MultiDimBucket< GUM_SCALAR >.
Definition at line 295 of file multiDimContainer_tpl.h.
References gum::Set< Key, Alloc >::emplace().
|
finalvirtual |
Returns the number of vars in the multidimensional container.
Implements gum::MultiDimInterface.
Definition at line 307 of file multiDimDecorator_tpl.h.
References gum::Set< Key, Alloc >::emplace().
|
pure virtual |
Default implementation of MultiDimContainer::set().
Calls get_ as a r-value.
Implements gum::MultiDimContainer< GUM_SCALAR >.
Implemented in gum::Potential< GUM_SCALAR >.
|
finalvirtual |
Definition at line 291 of file multiDimDecorator_tpl.h.
References gum::Set< Key, Alloc >::emplace().
|
inherited |
Test if this MultiDimContainer is different of p.
p | The MultiDimContainer to test for inequality. |
Definition at line 154 of file multiDimContainer_tpl.h.
References gum::Set< Key, Alloc >::emplace().
|
noexcept |
copy operator
Definition at line 117 of file multiDimDecorator_tpl.h.
References gum::Set< Key, Alloc >::emplace().
INLINE MultiDimDecorator< GUM_SCALAR > & gum::MultiDimDecorator< GUM_SCALAR >::operator= | ( | MultiDimDecorator< GUM_SCALAR > && | from | ) |
assignment operator.
Definition at line 88 of file multiDimDecorator_tpl.h.
References gum::Set< Key, Alloc >::emplace().
|
inherited |
Test if this MultiDimContainer is equal to p.
p | The MultiDimContainer to test for equality. |
Definition at line 124 of file multiDimContainer_tpl.h.
References gum::Set< Key, Alloc >::emplace().
|
inherited |
An [] operator using a Instantiation as argument.
i | An Instantiation. |
Definition at line 79 of file multiDimContainer_tpl.h.
References gum::Set< Key, Alloc >::emplace().
|
finalvirtual |
Automatically fills this MultiDimContainer with the values in v.
The order used to fill this MultiDimContainer is the same as with an instantiation over it.
v | Vector of values. |
SizeError | Raised if v size's does not matches this MultiDimContainer domain size. |
Reimplemented from gum::MultiDimContainer< GUM_SCALAR >.
Definition at line 312 of file multiDimDecorator_tpl.h.
References gum::Set< Key, Alloc >::emplace().
|
virtualinherited |
Automatically fills this MultiDimContainer with the values in l.
The order used to fill this MultiDimContainer is the same as with an instantiation over it.
l | contains the data. |
SizeError | Raised if l size's does not matches this MultiDimContainer domain size. |
Reimplemented in gum::MultiDimBijArray< GUM_SCALAR >, gum::MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy >, gum::MultiDimFunctionGraph< GUM_SCALAR >, and gum::MultiDimFunctionGraph< GUM_SCALAR, ExactTerminalNodePolicy >.
Definition at line 174 of file multiDimContainer_tpl.h.
References gum::Set< Key, Alloc >::emplace().
|
finalvirtual |
Returns the index of a variable.
v | The variable for which the index is returned. |
NotFound | Raised if v is not in this multidimensional matrix. |
Implements gum::MultiDimInterface.
Definition at line 259 of file multiDimDecorator_tpl.h.
References gum::Set< Key, Alloc >::emplace().
|
finalvirtual |
compute lfold for this container
f | the function to apply |
base | the initial value |
Reimplemented from gum::MultiDimContainer< GUM_SCALAR >.
Definition at line 335 of file multiDimDecorator_tpl.h.
References gum::Set< Key, Alloc >::emplace().
|
finalvirtual |
Register i as a slave of this MultiDimAdressable.
i | The Instantiation to enslave. |
Implements gum::MultiDimAdressable.
Definition at line 233 of file multiDimDecorator_tpl.h.
References gum::Set< Key, Alloc >::emplace().
|
inherited |
Replace variables in this multidim.
If x is in this MultiDim and y has the same domain size, then x will be replace by y in this MultiDim.
x | The variable in this which will be replaced. |
y | The variable replacing y. |
NotFound | Raised if x does not belong to this MultiDim. |
OperationNotAllowed | If y and x are not interchangeable. |
DuplicateElement | If y is already in this MultiDim. |
Definition at line 35 of file multiDimInterface_inl.h.
References gum::Set< Key, Alloc >::emplace().
|
protectedvirtual |
This is called by MultiDimContainer::replace() to proceed with the replacing between x and y.
This is called only when everything have been checked.
x | The variable to replace in |
y | The second variable to swap. |
Implements gum::MultiDimInterface.
Definition at line 394 of file multiDimDecorator_tpl.h.
References gum::Set< Key, Alloc >::emplace().
|
finalvirtual |
Default implementation of MultiDimContainer::set().
Calls get_ as a r-value.
Reimplemented from gum::MultiDimContainer< GUM_SCALAR >.
Definition at line 156 of file multiDimDecorator_tpl.h.
References gum::Set< Key, Alloc >::emplace().
|
finalvirtual |
Listen to an assignment of a value in a Instantiation.
i | The Instantiation to listen. |
Implements gum::MultiDimAdressable.
Definition at line 198 of file multiDimDecorator_tpl.h.
References gum::Set< Key, Alloc >::emplace().
|
finalvirtual |
Listen to increment in each recorded Instantiation.
i | The Instantiation to listen. |
Implements gum::MultiDimAdressable.
Definition at line 226 of file multiDimDecorator_tpl.h.
References gum::Set< Key, Alloc >::emplace().
|
finalvirtual |
Listen to setFirst in a given Instantiation.
i | The Instantiation to listen. |
Implements gum::MultiDimAdressable.
Definition at line 205 of file multiDimDecorator_tpl.h.
References gum::Set< Key, Alloc >::emplace().
|
finalvirtual |
Listen to increment in a given Instantiation.
i | The Instantiation to listen. |
Implements gum::MultiDimAdressable.
Definition at line 219 of file multiDimDecorator_tpl.h.
References gum::Set< Key, Alloc >::emplace().
|
finalvirtual |
Listen to setLast in a given Instantiation.
i | The Instantiation to listen. |
Implements gum::MultiDimAdressable.
Definition at line 212 of file multiDimDecorator_tpl.h.
References gum::Set< Key, Alloc >::emplace().
|
protected |
protecte method to swap the implementation behind the Potential
Definition at line 373 of file multiDimDecorator_tpl.h.
References gum::Set< Key, Alloc >::emplace().
|
virtual |
Default implementation of MultiDimContainer::set().
Calls get_ as a r-value.
Implements gum::MultiDimContainer< GUM_SCALAR >.
Definition at line 388 of file multiDimDecorator_tpl.h.
References gum::Set< Key, Alloc >::emplace().
|
virtual |
Default implementation of MultiDimContainer::set().
Calls get_ as a r-value.
Reimplemented from gum::MultiDimContainer< GUM_SCALAR >.
Reimplemented in gum::Potential< GUM_SCALAR >.
Definition at line 400 of file multiDimDecorator_tpl.h.
References gum::Set< Key, Alloc >::emplace().
|
finalvirtual |
Unregister i as a slave of this MultiDimAdressable.
i | The Instantiation to free. |
Implements gum::MultiDimAdressable.
Definition at line 275 of file multiDimDecorator_tpl.h.
References gum::Set< Key, Alloc >::emplace().
|
finalvirtual |
Returns a const ref to the ith var.
param i An index of this multidimensional matrix.
NotFound | Raised if i does not reference a variable in this multidimensional matrix. |
Implements gum::MultiDimInterface.
Definition at line 248 of file multiDimDecorator_tpl.h.
References gum::Set< Key, Alloc >::emplace().
|
finalvirtual |
Returns the variable with the name.
name | The index of the variable |
NotFound | Raised if the element cannot be found. |
Implements gum::MultiDimInterface.
Definition at line 254 of file multiDimDecorator_tpl.h.
References gum::Set< Key, Alloc >::emplace().
|
finalvirtual |
Returns a const ref to the sequence of DiscreteVariable*.
Implements gum::MultiDimInterface.
Definition at line 300 of file multiDimDecorator_tpl.h.
References gum::Set< Key, Alloc >::emplace().
|
mutableprotected |
The true container.
Definition at line 247 of file multiDimDecorator.h.
|
mutableprotected |
value of the MultiDimDecorator if no dimension.
Definition at line 261 of file multiDimDecorator.h.