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_slist.H
1 
2 # ifndef TPL_SLIST_H
3 # define TPL_SLIST_H
4 
5 # include <ahDefs.H>
6 # include <tpl_snode.H>
7 
8 using namespace Aleph;
9 
10 namespace Aleph {
11 
20 template <typename T> class Slist : public Snode<T>
21 {
22 
23 public:
24 
25  typedef Snode<T> Node;
27  Slist() { /* empty */ }
35  void insert_first(Node * node)
36  {
37 
38  I(node not_eq NULL);
39  I(node->is_empty());
40 
41  this->insert_next(node);
42  }
51 
52  throw(std::exception, std::underflow_error)
53 
54  {
55 
56  if (this->is_empty())
57  throw std::underflow_error ("list is empty");
58 
59  return this->remove_next();
60  }
63 
64  Exception_Prototypes(std::underflow_error)
65 
66  {
67 
68  if (this->is_empty())
69  throw std::underflow_error ("list is empty");
70 
71  return this->get_next();
72  }
81  class Iterator
82  {
83 
84  private:
85 
86  Slist * list;
87  Node * current;
88 
89  public:
91  typedef Snode<T> Set_Type;
93  typedef Snode<T> * Item_Type;
94 
101  Iterator(Slist & _list) : list(&_list), current(list->get_first()) {}
102 
104  bool has_current() const { return current != list; }
105 
113 
114  throw(std::exception, std::overflow_error)
115 
116  {
117 
118  if (not this->has_current())
119  throw std::overflow_error ("");
120 
121  return current;
122  }
133  void next()
134 
135  throw(std::exception, std::overflow_error)
136 
137  {
138 
139  if (not this->has_current())
140  throw std::overflow_error ("");
141 
142  current = current->get_next();
143  }
145  void reset_first() { current = list->get_next(); }
146  Iterator & operator = (Node * node)
147  {
148  if (this == node)
149  return *this;
150 
151  current = node;
152  return *this;
153  }
154  };
155 };
156 
157 } // end namespace Aleph
158 
159 # endif /* TPL_SLIST_H */
160 
Definition: tpl_slist.H:81
Snode * remove_next()
Definition: tpl_snode.H:48
Node * get_first() Exception_Prototypes(std
Retorna el primer nodo de la lista.
Definition: tpl_slist.H:62
Definition: tpl_snode.H:22
Iterator(Slist &_list)
Definition: tpl_slist.H:101
Snode< T > * Item_Type
El tipo de elemento que retorna get_current().
Definition: tpl_slist.H:93
bool has_current() const
Retorna true si el iterador tiene nodo actual.
Definition: tpl_slist.H:104
void reset_first()
Coloca el iterador en el primer elemento de la lista.
Definition: tpl_slist.H:145
Definition: tpl_slist.H:20
Snode *& get_next()
Retorna el nodo siguiente a this.
Definition: tpl_snode.H:51
void insert_first(Node *node)
Definition: tpl_slist.H:35
Slist()
Constructor vacío.
Definition: tpl_slist.H:27
Node * get_current()
Definition: tpl_slist.H:112
Snode< T > Set_Type
El tipo de conjunto sobre el cual se itera.
Definition: tpl_slist.H:91
Node * remove_first()
Definition: tpl_slist.H:50
Definition: List.H:23
void next()
Definition: tpl_slist.H:133

Leandro Rabindranath León