Aleph-w  1.5a.2
Biblioteca general de algoritmos y estructuras de datos
 Todo Clases Archivos Funciones Variables 'typedefs' Enumeraciones Amigas Grupos Páginas
slink_nc.H
1 # ifndef SLINK_NC_H
2 # define SLINK_NC_H
3 
4 # include <aleph.H>
5 
6 namespace Aleph
7 {
16  class Slink_Nc
17  {
18  protected:
19  Slink_Nc * next;
20 
21  public:
23  Slink_Nc() : next(NULL) { /* empty */ }
24 
26  Slink_Nc(const Slink_Nc &) : next(NULL) { /* empty */ }
27 
28  ~Slink_Nc() { /* empty */ }
29 
31  Slink_Nc & operator = (const Slink_Nc & link)
32  {
33  if (&link == this)
34  return *this;
35 
36  if (not is_empty())
37  throw std::invalid_argument("link is not empty");
38 
39  next = NULL;
40  }
41 
43  void reset()
44  {
45  I(this not_eq NULL);
46  next = NULL;
47  }
48 
50  bool is_empty() const
51  {
52  I(this not_eq NULL);
53  return next == NULL;
54  }
55 
58  {
59  I(this not_eq NULL);
60  return next;
61  }
62 
70  void insert(Slink_Nc * p)
71  {
72  I(this not_eq NULL);
73  I(p not_eq NULL);
74  I(p->is_empty());
75  p->next = next;
76  next = p;
77  }
78 
88  {
89  I(this not_eq NULL);
90  Slink_Nc * ret_val = next;
91  next = ret_val->next;
92  ret_val->reset();
93  return ret_val;
94  }
95 
96  class Iterator
97  {
98  Slink_Nc * head;
99  Slink_Nc * curr;
100 
101  public:
102  Iterator() : head(NULL), curr(NULL) { /* Empty */ }
103 
104  Iterator(Slink_Nc * head_ptr) : head(head_ptr), curr(head->get_next())
105  {
106  // empty
107  }
108 
109  Iterator(Slink_Nc & _head) : head(&_head), curr(head->get_next())
110  {
111  // empty
112  }
113 
114  Iterator(Slink_Nc * head_ptr, Slink_Nc * curr_ptr)
115  : head(head_ptr), curr(curr_ptr)
116  {
117  // empty
118  }
119 
120  void reset_first()
121  {
122  I(curr != NULL and head != NULL);
123  curr = head->get_next();
124  }
125 
126  void set(Slink_Nc * new_curr)
127  {
128  I(curr != NULL and head != NULL);
129  curr = new_curr;
130  }
131 
132  void reset(Slink_Nc * new_head)
133  {
134  head = new_head;
135  curr = head->get_next();;
136  }
137 
138  bool has_current() const
139  {
140  I(head != NULL);
141  return curr != NULL;
142  }
143 
144  // sinónimo de has_current()
145  bool has_curr() const { return has_current(); }
146 
149  {
150  I(curr != NULL and head != NULL);
151 
152  if (not has_current())
153  throw std::overflow_error("Not element in list");
154 
155  return curr;
156  }
157 
158  // sinónimo de get_current()
159  Slink_Nc * get_curr() { return get_current(); }
160 
162  bool is_in_first() const { return curr == head->next; }
163 
165  void next() throw(std::exception, std::overflow_error)
166  {
167  if (not has_current())
168  throw std::overflow_error("Not next element in list");
169 
170  curr = curr->get_next();
171  }
172 
174  bool operator == (const Iterator & it) const { return curr == it.curr; }
175 
177  bool operator != (const Iterator & it) const { return curr != it.curr; }
178 
179  bool verify(Slink_Nc * l) const { return head == l; }
180 
181  bool verify(const Iterator & it) const { return head == it.head; }
182  };
183 
184  };
185 }
186 
187 # endif
188 
Definition: Set.H:39

Leandro Rabindranath León