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, Instantiation* p_i)
const;
259 virtual void extractFrom(
const MultiDimContainer< GUM_SCALAR >& src,
const Instantiation& mask);
264 virtual const MultiDimImplementation< GUM_SCALAR >* content()
const = 0;
269 virtual MultiDimImplementation< GUM_SCALAR >* content() = 0;
276 virtual MultiDimAdressable& getMasterRef();
283 virtual const MultiDimAdressable& getMasterRef()
const;
292 virtual void copy(
const MultiDimContainer< GUM_SCALAR >& src);
312 virtual MultiDimContainer< GUM_SCALAR >* newFactory()
const = 0;
324 virtual std::string toString()
const;
330 virtual std::string toString(
const Instantiation* i)
const = 0;
337 bool operator==(
const MultiDimContainer< GUM_SCALAR >& p)
const;
344 bool operator!=(
const MultiDimContainer< GUM_SCALAR >& p)
const;
350 virtual void apply(std::function< GUM_SCALAR(GUM_SCALAR) > f)
const;
357 virtual GUM_SCALAR reduce(std::function< GUM_SCALAR(GUM_SCALAR, GUM_SCALAR) > f,
358 GUM_SCALAR base)
const;
374 virtual void beginMultipleChanges() = 0;
380 virtual void endMultipleChanges() = 0;
386 virtual void endMultipleChanges(
const GUM_SCALAR& v) = 0;
404 virtual GUM_SCALAR& get_(
const Instantiation& i)
const = 0;
408 #include <agrum/tools/multidim/implementations/multiDimContainer_tpl.h>