aGrUM  0.20.3
a C++ library for (probabilistic) graphical models
link_tpl.h
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 Template methods of MultiDimFunctionGraph.
25  *
26  * @author Pierre-Henri WUILLEMIN(@LIP6) and Jean-Christophe MAGNAN and Christophe
27  * GONZALES(@AMU)
28  * @author Christophe GONZALES(@AMU) and Pierre-Henri WUILLEMIN(@LIP6)
29  *
30  */
31 
32 #include <agrum/tools/multidim/utils/FunctionGraphUtilities/link.h>
33 
34 namespace gum {
35 
36  // Constructor
37  template < typename T >
38  INLINE Link< T >::Link(const T& elem) : _element_(elem) {
40  }
41 
42  // Constructor
43  template < typename T >
44  INLINE Link< T >::Link(const T& elem, Link< T >* nextLink) :
47  }
48 
49  // Destructor
50  template < typename T >
51  INLINE Link< T >::~Link() {
53  }
54 
55  template < typename T >
56  INLINE void* Link< T >::operator new(size_t s) {
58  }
59 
60  template < typename T >
61  INLINE void Link< T >::operator delete(void* p) {
63  }
64 
65  template < typename T >
66  INLINE const T& Link< T >::element() const {
67  return _element_;
68  }
69 
70  template < typename T >
71  INLINE T& Link< T >::element() {
72  return _element_;
73  }
74 
75  template < typename T >
76  INLINE const Link< T >* Link< T >::nextLink() const {
77  return _nextLink_;
78  }
79 
80  template < typename T >
81  INLINE Link< T >* Link< T >::nextLink() {
82  return _nextLink_;
83  }
84 
85  template < typename T >
86  INLINE void Link< T >::setNextLink(Link< T >* newLink) {
88  }
89 
90  // Constructor
91  template < typename T >
94  _firstLink_ = nullptr;
95  }
96 
97  // Destructor
98  template < typename T >
100  clear();
102  }
103 
104  template < typename T >
105  INLINE void* LinkedList< T >::operator new(size_t s) {
107  }
108 
109  template < typename T >
110  INLINE void LinkedList< T >::operator delete(void* p) {
112  }
113 
114  template < typename T >
115  INLINE const Link< T >* LinkedList< T >::list() const {
116  return _firstLink_;
117  }
118 
119  template < typename T >
120  INLINE Link< T >* LinkedList< T >::list() {
121  return _firstLink_;
122  }
123 
124  template < typename T >
125  void LinkedList< T >::clear() {
126  Link< T >* curLink = _firstLink_;
127  Link< T >* nl = nullptr;
128  while (curLink) {
129  nl = curLink->nextLink();
130  delete curLink;
131  curLink = nl;
132  }
133  }
134 
135  template < typename T >
136  INLINE void LinkedList< T >::addLink(const T& elem) {
137  Link< T >* newLink = new Link< T >(elem, _firstLink_);
139  }
140 
141  template < typename T >
143  Link< T >* curLink = _firstLink_;
144  Link< T >* prevLink = nullptr;
145  while (curLink && curLink->element() != elem) {
146  prevLink = curLink;
147  curLink = curLink->nextLink();
148  }
149  if (curLink) {
150  if (prevLink)
152  else
154  delete curLink;
155  }
156  }
157 
158 } // namespace gum
INLINE void emplace(Args &&... args)
Definition: set_tpl.h:643