Aleph-w  1.5a.2
Biblioteca general de algoritmos y estructuras de datos
 Todo Clases Archivos Funciones Variables 'typedefs' Enumeraciones Amigas Grupos Páginas
tpl_dlist.H
1 # ifndef TPL_DLIST_H
2 # define TPL_DLIST_H
3 
4 # include <tpl_dnode.H>
5 
6 using namespace Aleph;
7 
8 namespace Aleph {
9 
16  template <typename T>
17 class Dlist_Node : public Dnode<T>
18 {
19 public:
20 
21  Dlist_Node() : Dnode<T>() { /* Empty */ }
22 
23  Dlist_Node(const T & _data) : Dnode<T>(_data) { /* Empty */ }
24 };
31  template <typename T>
32 class Dlist_Node_Vtl : public Dlist_Node<T>
33 {
34 public:
35 
36  Dlist_Node_Vtl() : Dlist_Node<T>() { /* Empty */ }
37 
38  virtual ~Dlist_Node_Vtl() { /* Empty */ }
39 
40  Dlist_Node_Vtl(const T & _data) : Dlist_Node<T>(_data) { /* Empty */ }
41 };
42  template <template <class> class Node, typename T>
43 class MetaDlistNode : public Node<T>
44 {
45 public:
46 
47  MetaDlistNode() { /* Empty */ }
48 
49  MetaDlistNode(const T& _data) : Node<T>(_data) { /* Empty */ }
50 
52  : Node<T>(node) { /* Empty */ }
53 
54  MetaDlistNode<Node, T> *& get_next()
55  {
56  return (MetaDlistNode<Node, T> *&) Node<T>::get_next();
57  }
58  MetaDlistNode<Node, T> *& get_prev()
59  {
60  return (MetaDlistNode<Node, T> *&) Node<T>::get_prev();
61  }
62 };
77  template <template <class> class Node_Type, typename T>
78 class GenDlist : public MetaDlistNode<Node_Type, T>
79 {
80 public:
81 
92  throw(std::exception, std::underflow_error)
93  {
94  if (this->is_empty())
95  throw std::underflow_error ("List is empty");
96 
97  return this->get_next();
98  }
107  throw(std::exception, std::underflow_error)
108  {
109  if (this->is_empty())
110  throw std::underflow_error ("List is empty");
111  return this->get_prev();
112  }
122  throw(std::exception, std::underflow_error)
123  {
124  if (this->is_empty())
125  throw std::underflow_error ("List is empty");
126 
127  Node* retValue = this->get_next();
128  retValue->del();
129  return retValue;
130  }
140  throw(std::exception, std::underflow_error)
141  {
142  if (this->is_empty())
143  throw std::underflow_error ("List is empty");
144  Node* retValue = this->get_prev();
145  retValue->del();
146  return retValue;
147  }
153  class Iterator : public Node::Iterator
154  {
155  public:
158 
160  typedef Node * Item_Type;
161 
164 
167  : Node::Iterator(&list, curr)
168  {
169  // Empty
170  }
171 
173  Iterator() : Node::Iterator() { /* empty */ }
174 
176  Iterator(const Iterator & it) : Node::Iterator(it) { /* Empty */ }
177 
180  {
181  if (this == &it)
182  return *this;
183 
184  Node::Iterator::operator = (it);
185  return *this;
186  }
188  Node * get_current() { return (Node*) Node::Iterator::get_current(); }
189 
191  Node * del() { return (Node*) Node::Iterator::del(); }
192  };
193 };
199  template <typename T>
200 class Dlist : public GenDlist<Dlist_Node, T>
201 {
202 public:
203 
206 
209 };
215  template <typename T>
216 class DlistVtl : public GenDlist<Dlist_Node_Vtl, T>
217 {
218 public:
219 
222 
225 };
226 
227 } // end namespace Aleph
228 
229 # endif /* TPL_DLIST_H */
230 
GenDlist< Dlist_Node_Vtl, T >::Node Node
Tipo de nodo que maneja la lista.
Definition: tpl_dlist.H:221
Node * get_current()
Retorna el nodo actual.
Definition: tpl_dlist.H:188
Iterator(const Iterator &it)
Constructor copia.
Definition: tpl_dlist.H:176
Definition: tpl_dlist.H:17
Lista doblemente enlazada de nodos sin destructor virtual.
Definition: tpl_dlist.H:200
GenDlist< Dlist_Node, T >::Iterator Iterator
Tipo de Iterador que maneja la lista.
Definition: tpl_dlist.H:208
Iterador sobre los nodos de una lista doblemente enlazada.
Definition: tpl_dlist.H:153
GenDlist< Dlist_Node, T >::Node Node
Tipo de nodo que maneja la lista.
Definition: tpl_dlist.H:205
Lista genérica doblemente enlazada de nodos.
Definition: tpl_dlist.H:78
Definition: tpl_dlist.H:43
Definition: tpl_dlist.H:32
GenDlist< Node_Type, T > Set_Type
Tipo de conjunto sobre el cual se itera.
Definition: tpl_dlist.H:157
Node * get_first()
Definition: tpl_dlist.H:91
Node * del()
Elimina nodo actual y avanza iterador hacia delante.
Definition: tpl_dlist.H:191
Node * remove_first()
Definition: tpl_dlist.H:121
Node * get_last()
Definition: tpl_dlist.H:106
Iterator & operator=(const Iterator &it)
Asignación de iterador.
Definition: tpl_dlist.H:179
Iterator(GenDlist< Node_Type, T > &list, GenDlist< Node_Type, T > *curr)
Constructor con actual sobre nodo curr.
Definition: tpl_dlist.H:166
Node * Item_Type
Tipo que retorna get_current().
Definition: tpl_dlist.H:160
Iterator()
Constructor vacío.
Definition: tpl_dlist.H:173
Node * remove_last()
Definition: tpl_dlist.H:139
Lista doblemente enlazada de nodos con destructor virtual.
Definition: tpl_dlist.H:216
GenDlist< Dlist_Node_Vtl, T >::Iterator Iterator
Tipo de Iterador que maneja la lista.
Definition: tpl_dlist.H:224
Iterator(GenDlist< Node_Type, T > &list)
Constructor.
Definition: tpl_dlist.H:163
Definition: List.H:23
MetaDlistNode< Node_Type, T > Node
Tipo de nodo de la lista.
Definition: tpl_dlist.H:83
Nodo perteneciente a lista doblemente enlazada circular.
Definition: tpl_dnode.H:19

Leandro Rabindranath León