aGrUM  0.16.0
link_tpl.h
Go to the documentation of this file.
1 
33 
34 namespace gum {
35 
36  // Constructor
37  template < typename T >
38  INLINE Link< T >::Link(const T& elem) : __element(elem) {
39  GUM_CONSTRUCTOR(Link);
40  }
41 
42  // Constructor
43  template < typename T >
44  INLINE Link< T >::Link(const T& elem, Link< T >* nextLink) :
45  __element(elem), __nextLink(nextLink) {
46  GUM_CONSTRUCTOR(Link);
47  }
48 
49  // Destructor
50  template < typename T >
51  INLINE Link< T >::~Link() {
52  GUM_DESTRUCTOR(Link);
53  }
54 
55  template < typename T >
56  INLINE void* Link< T >::operator new(size_t s) {
57  return SmallObjectAllocator::instance().allocate(Size(s));
58  }
59 
60  template < typename T >
61  INLINE void Link< T >::operator delete(void* p) {
62  SmallObjectAllocator::instance().deallocate(p, sizeof(Link< T >));
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 >
82  return __nextLink;
83  }
84 
85  template < typename T >
86  INLINE void Link< T >::setNextLink(Link< T >* newLink) {
87  __nextLink = newLink;
88  }
89 
90  // Constructor
91  template < typename T >
93  GUM_CONSTRUCTOR(LinkedList);
94  __firstLink = nullptr;
95  }
96 
97  // Destructor
98  template < typename T >
100  clear();
101  GUM_DESTRUCTOR(LinkedList);
102  }
103 
104  template < typename T >
105  INLINE void* LinkedList< T >::operator new(size_t s) {
106  return SmallObjectAllocator::instance().allocate(Size(s));
107  }
108 
109  template < typename T >
110  INLINE void LinkedList< T >::operator delete(void* p) {
111  SmallObjectAllocator::instance().deallocate(p, sizeof(LinkedList< T >));
112  }
113 
114  template < typename T >
115  INLINE const Link< T >* LinkedList< T >::list() const {
116  return __firstLink;
117  }
118 
119  template < typename T >
121  return __firstLink;
122  }
123 
124  template < typename T >
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);
138  __firstLink = newLink;
139  }
140 
141  template < typename T >
142  INLINE void LinkedList< T >::searchAndRemoveLink(const T& elem) {
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)
151  prevLink->setNextLink(curLink->nextLink());
152  else
153  __firstLink = curLink->nextLink();
154  delete curLink;
155  }
156  }
157 
158 } // namespace gum
Copyright 2005-2019 Pierre-Henri WUILLEMIN et Christophe GONZALES (LIP6) {prenom.nom}_at_lip6.fr.
Definition: agrum.h:25
Chain list allocated using the SmallObjectAllocator.
Definition: link.h:134
std::size_t Size
In aGrUM, hashed values are unsigned long int.
Definition: types.h:48