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_dynListStack.H
1 
2 # ifndef TPL_DYNLISTSTACK_H
3 # define TPL_DYNLISTSTACK_H
4 
5 # include <htlist.H>
6 
7 namespace Aleph {
8 
19  template <typename T>
20 class DynListStack : private DynList<T>
21 {
22  size_t num_items;
23 
24 public:
25 
26  DynListStack() : num_items(0) { /* empty */ }
27 
28  const size_t & size() const { return num_items; }
29 
30  bool is_empty() const { return this->DynList<T>::is_empty(); }
31 
32  void swap(DynListStack & s)
33  {
34  this->DynList<T>::swap(s);
35  std::swap(num_items, s.num_items);
36  }
37 
38  DynListStack(const DynListStack & s) : num_items(0)
39  {
40  s.for_each([this] (const T & d) { this->append(d); ++num_items; });
41  }
42 
43  DynListStack(DynListStack && s) : num_items(0)
44  {
45  swap(s);
46  }
47 
48  DynListStack & operator = (const DynListStack & s)
49  {
50  if (this == &s)
51  return *this;
52 
53  num_items = s.num_items;
54  (DynList<T>&) *this = s;
55  return *this;
56  }
57 
58  DynListStack & operator = (DynListStack && s)
59  {
60  this->swap(s);
61  return *this;
62  }
63 
66 
68  typedef T Item_Type;
69 
78  const T & top() const
79  {
80  return this->get_first();
81  }
82 
93  T & push(const T & item)
94  {
95  T & ret_val = this->insert(item);
96  ++num_items;
97 
98  return ret_val;
99  }
100 
101  T & push(T && item)
102  {
103  T & ret_val = this->insert(std::move(item));
104  ++num_items;
105 
106  return ret_val;
107  }
108 
110  T & put(const T & item) { return push(item); }
111 
112  T & put(T && item) { return push(std::move(item)); }
113 
122  T pop() throw(std::exception, std::underflow_error)
123  {
124  T retVal = this->remove_first();
125  --num_items;
126 
127  return retVal;
128  }
129 
131  T get() { return pop(); }
132 
134  void empty()
135  {
136  this->DynList<T>::empty();
137  num_items = 0;
138  }
139 
141  virtual ~DynListStack()
142  {
143  empty();
144  }
145 
146  template <class Operation>
147  bool traverse(Operation & operation)
148  {
149  return this->DynList<T>::traverse(operation);
150  }
151 
152  template <class Operation>
153  bool traverse(Operation & operation) const
154  {
155  return this->DynList<T>::traverse(operation);
156  }
157 
158  template <class Operation>
159  bool traverse(Operation && operation = Operation()) const
160  {
161  return this->DynList<T>::traverse(std::move(operation));
162  }
163 
164  template <class Operation>
165  bool traverse(Operation && operation = Operation())
166  {
167  return this->DynList<T>::traverse(std::move(operation));
168  }
169 
170  Functional_Methods(T);
171 
172  Generic_Items(T);
173 };
174 
175 } // end namespace Aleph
176 # endif /* TPL_DYNLISTSTACK_H */
177 
T remove_first()
Definition: htlist.H:719
void empty()
Elimina todos los elementos de la lista.
Definition: htlist.H:755
const T & top() const
Definition: tpl_dynListStack.H:78
virtual ~DynListStack()
Destructor.
Definition: tpl_dynListStack.H:141
Definition: tpl_dynListStack.H:20
void empty()
Vacía la pila; todos los elementos son borrados.
Definition: tpl_dynListStack.H:134
bool is_empty() const
Retorna true si la lista está vacía.
Definition: htlist.H:248
T & insert(const T &item)
Inserta un item como primer elemento.
Definition: htlist.H:674
T & put(const T &item)
Definition: tpl_dynListStack.H:110
DynListStack Set_Type
El tipo de conjunto.
Definition: tpl_dynListStack.H:65
Recorre condicionalmente el contenedor y ejecuta una operation mientras ésta retorne true...
T pop()
Definition: tpl_dynListStack.H:122
Definition: ahDry.H:13
T & push(const T &item)
Definition: tpl_dynListStack.H:93
T & append(const T &item)
Inserta un item como último elemento.
Definition: htlist.H:685
T Item_Type
El tipo de dato que alberga el conjunto.
Definition: tpl_dynListStack.H:68

Leandro Rabindranath León