55#define ALLOCATE(x) SmallObjectAllocator::instance().allocate(x)
56#define DEALLOCATE(x, y) SmallObjectAllocator::instance().deallocate(x, y)
60 template <
typename GUM_SCALAR,
61 template <
typename >
class COMBINEOPERATOR,
62 template <
typename >
class TerminalNodePolicy >
72 template <
typename GUM_SCALAR,
73 template <
typename >
class COMBINEOPERATOR,
74 template <
typename >
class TerminalNodePolicy >
85 template <
typename GUM_SCALAR,
86 template <
typename >
class COMBINEOPERATOR,
87 template <
typename >
class TerminalNodePolicy >
94 template <
typename GUM_SCALAR,
95 template <
typename >
class COMBINEOPERATOR,
96 template <
typename >
class TerminalNodePolicy >
106 template <
typename GUM_SCALAR,
107 template <
typename >
class COMBINEOPERATOR,
108 template <
typename >
class TerminalNodePolicy >
111 if (
_dt1_->isTerminalNode(currentNodeId)) {
118 if (!
_rd_->variablesSequence().exists(currentNode->
nodeVar()))
123 for (
Idx moda = 0; moda < currentNode->
nodeVar()->domainSize(); ++moda) {
131 template <
typename GUM_SCALAR,
132 template <
typename >
class COMBINEOPERATOR,
133 template <
typename >
class TerminalNodePolicy >
136 if (
_dt2_->isTerminalNode(currentNodeId))
137 return _rd_->manager()->addTerminalNode(
142 if (!
_rd_->variablesSequence().exists(currentNode->
nodeVar()))
150 for (
Idx moda = 0; moda < currentNode->
nodeVar()->domainSize(); ++moda) {
158 template <
typename GUM_SCALAR,
159 template <
typename >
class COMBINEOPERATOR,
160 template <
typename >
class TerminalNodePolicy >
165 for (
Idx moda = 1; moda < var->
domainSize() && !diff; ++moda)
166 if (sonsMap[0] != sonsMap[moda]) diff =
true;
174 return _rd_->manager()->addInternalNode(var, sonsMap);
Base class for discrete random variable.
virtual Size domainSize() const =0
The class for generic Hash Tables.
Structure used to represent a node internal structure.
const DiscreteVariable * nodeVar() const
Returns the node variable.
NodeId son(Idx modality) const
Returns the son at a given index.
static MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > * getTreeInstance()
Returns an arborescent instance.
const MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > * _dt1_
The two function graphs used for the operation.
NodeId _xPloreDT2_(NodeId currentNodeId)
The main recursion function.
MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > * _rd_
The resulting function graph.
const MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > * _dt2_
NodeId _checkRedundancy_(const DiscreteVariable *, NodeId *)
~TreeOperator()
Default destructor.
HashTable< const DiscreteVariable *, Idx > _context_
MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > * compute()
Computes and builds the Function Graph that is the result of the operation.
NodeId _xPloreDT1_(NodeId currentNodeId)
The main recursion function.
TreeOperator(const MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > *dt1, const MultiDimFunctionGraph< GUM_SCALAR, TerminalNodePolicy > *dt2)
Default constructor.
const COMBINEOPERATOR< GUM_SCALAR > _combine_
The function to be performed on the leaves.
Size Idx
Type for indexes.
Size NodeId
Type for node ids.
Headers of the InternalNode class.
gum is the global namespace for all aGrUM entities
Class used to compute the operation between two decision diagrams.