aGrUM  0.20.2
a C++ library for (probabilistic) graphical models
internalNode.cpp
Go to the documentation of this file.
1 /**
2  *
3  * Copyright 2005-2020 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
70  = static_cast< NodeId* >(ALLOCATE(sizeof(NodeId) * v->domainSize()));
71  for (gum::Idx i = 0; i < v->domainSize(); ++i)
72  sons[i] = 0;
73  return sons;
74  }
75 
76  // ============================================================================
77  // Deallocates a NodeSons table
78  // ============================================================================
80  DEALLOCATE(s, sizeof(NodeId) * v->domainSize());
81  }
82 
83  // ============================================================================
84  // Node handlers
85  // ============================================================================
88  nodeVar__ = v;
89  nodeSons__ = sons;
90  }
91 
92  // ============================================================================
93  // Var handlers
94  // ============================================================================
97  setNodeVar__(v);
98  }
99 
101  nodeVar__ = v;
103  }
104 
105  // ============================================================================
106  // Parent handlers
107  // ============================================================================
110  }
111 
114  }
115 
116 } // namespace gum
117 
118 #ifdef GUM_NO_INLINE
119 # include <agrum/tools/multidim/utils/FunctionGraphUtilities/internalNode_inl.h>
120 #endif /* GUM_NO_INLINE */
INLINE void emplace(Args &&... args)
Definition: set_tpl.h:669
#define DEALLOCATE(x, y)
#define ALLOCATE(x)