31 #ifndef DOXYGEN_SHOULD_SKIP_THIS 39 template <
typename GUM_SCALAR,
template <
typename >
class TABLE >
41 TABLE< GUM_SCALAR >* (*proj)(
const TABLE< GUM_SCALAR >&,
42 const Set< const DiscreteVariable* >&)) :
49 template <
typename GUM_SCALAR,
template <
typename >
class TABLE >
51 const MultiDimProjection< GUM_SCALAR, TABLE >& from) :
58 template <
typename GUM_SCALAR,
template <
typename >
class TABLE >
65 template <
typename GUM_SCALAR,
template <
typename >
class TABLE >
66 MultiDimProjection< GUM_SCALAR, TABLE >*
68 return new MultiDimProjection< GUM_SCALAR, TABLE >(*this);
72 template <
typename GUM_SCALAR,
template <
typename >
class TABLE >
74 const TABLE< GUM_SCALAR >& table,
75 const Set< const DiscreteVariable* >& del_vars) {
76 return _proj(table, del_vars);
80 template <
typename GUM_SCALAR,
template <
typename >
class TABLE >
82 TABLE< GUM_SCALAR >& container,
83 const TABLE< GUM_SCALAR >& table,
84 const Set<
const TABLE< GUM_SCALAR >* >& del_vars) {
85 TABLE< GUM_SCALAR >* res =
project(table, del_vars);
91 template <
typename GUM_SCALAR,
template <
typename >
class TABLE >
93 TABLE< GUM_SCALAR >* (*proj)(
const TABLE< GUM_SCALAR >&,
94 const Set< const DiscreteVariable* >&)) {
99 template <
typename GUM_SCALAR,
template <
typename >
class TABLE >
100 INLINE TABLE< GUM_SCALAR >* (
102 const TABLE< GUM_SCALAR >&,
const Set< const DiscreteVariable* >&) {
108 template <
typename GUM_SCALAR,
template <
typename >
class TABLE >
110 const TABLE< GUM_SCALAR >& table,
111 const Set< const DiscreteVariable* >& del_vars)
const {
112 return float(table.domainSize());
117 template <
typename GUM_SCALAR,
template <
typename >
class TABLE >
119 const Sequence< const DiscreteVariable* >& vars,
120 const Set< const DiscreteVariable* >& del_vars)
const {
125 iter != vars.endSafe();
127 res *= (*iter)->domainSize();
134 template <
typename GUM_SCALAR,
template <
typename >
class TABLE >
136 const Sequence< const DiscreteVariable* >& vars,
137 const Set< const DiscreteVariable* >& del_vars)
const {
142 iter != vars.endSafe();
144 if (!del_vars.contains(*iter)) {
145 if (std::numeric_limits< long >::max() / (long)(*iter)->domainSize()
147 GUM_ERROR(OutOfBounds,
"memory usage out of long int range");
150 res *= long((*iter)->domainSize());
154 return std::pair< long, long >(res, res);
158 template <
typename GUM_SCALAR,
template <
typename >
class TABLE >
159 INLINE std::pair< long, long >
161 const TABLE< GUM_SCALAR >& table,
162 const Set< const DiscreteVariable* >& del_vars)
const {
163 return memoryUsage(table.variablesSequence(), del_vars);
TABLE< GUM_SCALAR > *(*)(const TABLE< GUM_SCALAR > &, const Set< const DiscreteVariable *> &) projectFunction()
Returns the projection function currently used by the projector.
MultiDimProjection(TABLE< GUM_SCALAR > *(*proj)(const TABLE< GUM_SCALAR > &, const Set< const DiscreteVariable * > &))
Default constructor.
Copyright 2005-2019 Pierre-Henri WUILLEMIN et Christophe GONZALES (LIP6) {prenom.nom}_at_lip6.fr.
std::pair< long, long > memoryUsage(const TABLE< GUM_SCALAR > &table, const Set< const DiscreteVariable * > &del_vars) const
Returns the memory consumption used during the projection.
virtual MultiDimProjection< GUM_SCALAR, TABLE > * newFactory() const
virtual constructor
TABLE< GUM_SCALAR > *(* _proj)(const TABLE< GUM_SCALAR > &, const Set< const DiscreteVariable * > &)
The projection function actually used.
virtual ~MultiDimProjection()
Destructor.
float nbOperations(const TABLE< GUM_SCALAR > &table, const Set< const DiscreteVariable * > &del_vars) const
returns a rough estimate of the number of operations that will be performed to compute the projection...
#define GUM_ERROR(type, msg)
void setProjectFunction(TABLE< GUM_SCALAR > *(*proj)(const TABLE< GUM_SCALAR > &, const Set< const DiscreteVariable * > &))
Changes the function used for projecting TABLES.
TABLE< GUM_SCALAR > * project(const TABLE< GUM_SCALAR > &table, const Set< const DiscreteVariable * > &del_vars)
Creates and returns the projection of the table over a subset of its vars.
SequenceIteratorSafe< Key > const_iterator_safe
Types for STL compliance.