29 #ifndef GUM_MULTIDIM_CONTAINER_H 30 #define GUM_MULTIDIM_CONTAINER_H 33 #include <initializer_list> 37 #include <agrum/agrum.h> 38 #include <agrum/tools/core/math/math_utils.h> 40 #include <agrum/tools/multidim/implementations/multiDimAdressable.h> 44 template <
typename GUM_SCALAR >
45 class MultiDimImplementation;
91 template <
typename GUM_SCALAR >
92 class MultiDimContainer:
public MultiDimAdressable {
108 MultiDimContainer(
const MultiDimContainer< GUM_SCALAR >& src);
110 MultiDimContainer& operator=(
const MultiDimContainer< GUM_SCALAR >& src);
115 MultiDimContainer(MultiDimContainer< GUM_SCALAR >&&);
117 MultiDimContainer& operator=(MultiDimContainer< GUM_SCALAR >&& src);
122 virtual ~MultiDimContainer();
139 virtual void set(
const Instantiation& i,
const GUM_SCALAR& value)
const;
151 virtual GUM_SCALAR get(
const Instantiation& i)
const;
163 GUM_SCALAR operator[](
const Instantiation& i)
const;
169 virtual void fill(
const GUM_SCALAR& d)
const = 0;
189 virtual void populate(
const std::vector< GUM_SCALAR >& v)
const;
209 virtual void populate(std::initializer_list< GUM_SCALAR > l)
const;
229 virtual void copyFrom(
const MultiDimContainer< GUM_SCALAR >& src)
const;
245 virtual void copyFrom(
const MultiDimContainer< GUM_SCALAR >& src,
246 Instantiation* p_i)
const;
260 virtual void extractFrom(
const MultiDimContainer< GUM_SCALAR >& src,
261 const Instantiation& mask);
266 virtual const MultiDimImplementation< GUM_SCALAR >* content()
const = 0;
271 virtual MultiDimImplementation< GUM_SCALAR >* content() = 0;
278 virtual MultiDimAdressable& getMasterRef();
285 virtual const MultiDimAdressable& getMasterRef()
const;
294 virtual void copy(
const MultiDimContainer< GUM_SCALAR >& src);
314 virtual MultiDimContainer< GUM_SCALAR >* newFactory()
const = 0;
326 virtual std::string toString()
const;
332 virtual std::string toString(
const Instantiation* i)
const = 0;
339 bool operator==(
const MultiDimContainer< GUM_SCALAR >& p)
const;
346 bool operator!=(
const MultiDimContainer< GUM_SCALAR >& p)
const;
352 virtual void apply(std::function< GUM_SCALAR(GUM_SCALAR) > f)
const;
360 reduce(std::function< GUM_SCALAR(GUM_SCALAR, GUM_SCALAR) > f,
361 GUM_SCALAR base)
const;
377 virtual void beginMultipleChanges() = 0;
383 virtual void endMultipleChanges() = 0;
389 virtual void endMultipleChanges(
const GUM_SCALAR& v) = 0;
407 virtual GUM_SCALAR& get_(
const Instantiation& i)
const = 0;
411 #include <agrum/tools/multidim/implementations/multiDimContainer_tpl.h>