aGrUM  0.20.3
a C++ library for (probabilistic) graphical models
internalNode.cpp
Go to the documentation of this file.
1 /**
2  *
3  * Copyright (c) 2005-2021 by Pierre-Henri WUILLEMIN(@LIP6) & Christophe GONZALES(@AMU)
4  * info_at_agrum_dot_org
5  *
6  * This library is free software: you can redistribute it and/or modify
7  * it under the terms of the GNU Lesser General Public License as published by
8  * the Free Software Foundation, either version 3 of the License, or
9  * (at your option) any later version.
10  *
11  * This library is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public License
17  * along with this library. If not, see <http://www.gnu.org/licenses/>.
18  *
19  */
20 
21 
22 /**
23  * @file
24  * @brief Methods of the MultiDimFunctionGraph InternalNode class.
25  *
26  * @author Pierre-Henri WUILLEMIN(@LIP6) & Christophe GONZALES(@AMU)
27  * @author Pierre-Henri WUILLEMIN(@LIP6) and Jean-Christophe MAGNAN and Christophe
28  * GONZALES(@AMU)
29  */
30 
31 #include <agrum/tools/multidim/utils/FunctionGraphUtilities/internalNode.h>
32 
33 #define ALLOCATE(x) SmallObjectAllocator::instance().allocate(x)
34 #define DEALLOCATE(x, y) SmallObjectAllocator::instance().deallocate(x, y)
35 
36 namespace gum {
37 
38  // ============================================================================
39  // Constructors
40  // ============================================================================
43  _nodeVar_ = nullptr;
44  }
45 
48  _setNodeVar_(v);
49  }
50 
53  _nodeVar_ = v;
54  _nodeSons_ = sons;
55  }
56 
57  // ============================================================================
58  // Destructors
59  // ============================================================================
63  }
64 
65  // ============================================================================
66  // Allocates a table of nodeid of the size given in parameter
67  // ============================================================================
69  NodeId* sons = static_cast< NodeId* >(ALLOCATE(sizeof(NodeId) * v->domainSize()));
70  for (gum::Idx i = 0; i < v->domainSize(); ++i)
71  sons[i] = 0;
72  return sons;
73  }
74 
75  // ============================================================================
76  // Deallocates a NodeSons table
77  // ============================================================================
79  DEALLOCATE(s, sizeof(NodeId) * v->domainSize());
80  }
81 
82  // ============================================================================
83  // Node handlers
84  // ============================================================================
87  _nodeVar_ = v;
88  _nodeSons_ = sons;
89  }
90 
91  // ============================================================================
92  // Var handlers
93  // ============================================================================
96  _setNodeVar_(v);
97  }
98 
100  _nodeVar_ = v;
102  }
103 
104  // ============================================================================
105  // Parent handlers
106  // ============================================================================
109  }
110 
113  }
114 
115 } // namespace gum
116 
117 #ifdef GUM_NO_INLINE
118 # include <agrum/tools/multidim/utils/FunctionGraphUtilities/internalNode_inl.h>
119 #endif /* GUM_NO_INLINE */
INLINE void emplace(Args &&... args)
Definition: set_tpl.h:643
#define DEALLOCATE(x, y)
#define ALLOCATE(x)