28 #ifndef DOXYGEN_SHOULD_SKIP_THIS 36 template <
typename GUM_SCALAR,
template <
typename >
class TABLE >
38 TABLE< GUM_SCALAR >* (*proj)(
const TABLE< GUM_SCALAR >&,
39 const Set< const DiscreteVariable* >&)) :
46 template <
typename GUM_SCALAR,
template <
typename >
class TABLE >
48 const MultiDimProjection< GUM_SCALAR, TABLE >& from) :
55 template <
typename GUM_SCALAR,
template <
typename >
class TABLE >
62 template <
typename GUM_SCALAR,
template <
typename >
class TABLE >
63 MultiDimProjection< GUM_SCALAR, TABLE >*
65 return new MultiDimProjection< GUM_SCALAR, TABLE >(*this);
69 template <
typename GUM_SCALAR,
template <
typename >
class TABLE >
71 const TABLE< GUM_SCALAR >& table,
72 const Set< const DiscreteVariable* >& del_vars) {
73 return _proj(table, del_vars);
77 template <
typename GUM_SCALAR,
template <
typename >
class TABLE >
79 TABLE< GUM_SCALAR >& container,
80 const TABLE< GUM_SCALAR >& table,
81 const Set<
const TABLE< GUM_SCALAR >* >& del_vars) {
82 TABLE< GUM_SCALAR >* res =
project(table, del_vars);
88 template <
typename GUM_SCALAR,
template <
typename >
class TABLE >
90 TABLE< GUM_SCALAR >* (*proj)(
const TABLE< GUM_SCALAR >&,
91 const Set< const DiscreteVariable* >&)) {
96 template <
typename GUM_SCALAR,
template <
typename >
class TABLE >
97 INLINE TABLE< GUM_SCALAR >* (
99 const TABLE< GUM_SCALAR >&,
const Set< const DiscreteVariable* >&) {
105 template <
typename GUM_SCALAR,
template <
typename >
class TABLE >
107 const TABLE< GUM_SCALAR >& table,
108 const Set< const DiscreteVariable* >& del_vars)
const {
109 return float(table.domainSize());
114 template <
typename GUM_SCALAR,
template <
typename >
class TABLE >
116 const Sequence< const DiscreteVariable* >& vars,
117 const Set< const DiscreteVariable* >& del_vars)
const {
122 iter != vars.endSafe();
124 res *= (*iter)->domainSize();
131 template <
typename GUM_SCALAR,
template <
typename >
class TABLE >
133 const Sequence< const DiscreteVariable* >& vars,
134 const Set< const DiscreteVariable* >& del_vars)
const {
139 iter != vars.endSafe();
141 if (!del_vars.contains(*iter)) {
142 if (std::numeric_limits< long >::max() / (long)(*iter)->domainSize()
144 GUM_ERROR(OutOfBounds,
"memory usage out of long int range");
147 res *= long((*iter)->domainSize());
151 return std::pair< long, long >(res, res);
155 template <
typename GUM_SCALAR,
template <
typename >
class TABLE >
156 INLINE std::pair< long, long >
158 const TABLE< GUM_SCALAR >& table,
159 const Set< const DiscreteVariable* >& del_vars)
const {
160 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.
gum is the global namespace for all aGrUM entities
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.