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_dynListQueue.H
1 
2 # ifndef TPL_DYNLISTQUEUE_H
3 # define TPL_DYNLISTQUEUE_H
4 
5 # include <iostream>
6 # include <htlist.H>
7 
8 using namespace std;
9 
10 
11 namespace Aleph {
12 
21  template <typename T>
22 class DynListQueue : private DynList<T>
23 {
24  size_t num_items;
25 
26 public:
27 
28  void swap(DynListQueue & q)
29  {
30  std::swap(num_items, q.num_items);
31  this->DynList<T>::swap(q);
32  }
33 
34  DynListQueue() : num_items(0) { /* empty */ }
35 
36  DynListQueue(const DynListQueue & q)
37  : DynList<T>(q), num_items(q.num_items)
38  {
39  // empty
40  }
41 
43  {
44  swap(q);
45  }
46 
47  DynListQueue & operator = (const DynListQueue & q)
48  {
49  if (this == &q)
50  return *this;
51 
52  *static_cast<DynList<T>*>(this) = q;
53  num_items = q.num_items;
54 
55  return *this;
56  }
57 
58  DynListQueue & operator = (DynListQueue && q)
59  {
60  std::swap(num_items, q.num_items);
61  this->DynList<T>::swap(q);
62  return *this;
63  }
64 
65  const size_t & size() const { return num_items; }
66 
67  bool is_empty() const { return this->DynList<T>::is_empty(); }
68 
71 
73  typedef T Item_Type;
74 
86  T & put(const T & data)
87  {
88  T & ret_val = this->append(data);
89  ++num_items;
90  return ret_val;
91  }
92 
93  T & put(T && data)
94  {
95  T & ret_val = this->append(std::move(data));
96  ++num_items;
97  return ret_val;
98  }
99 
107  T get()
108  {
109  T ret_val = this->remove_first();
110  --num_items;
111  return ret_val;
112  }
113 
115  T & front()
116  {
117  return this->get_first();
118  }
119 
121  T & rear()
122  {
123  return this->get_last();
124  }
125 
127  const T & front() const
128  {
129  return this->get_first();
130  }
131 
133  const T & rear() const
134  {
135  return this->get_last();
136  }
137 
138  void empty()
139  {
140  this->DynList<T>::empty();
141  }
142 
143  template <class Operation>
144  bool traverse(Operation & operation)
145  {
146  return this->DynList<T>::traverse(operation);
147  }
148 
149  template <class Operation>
150  bool traverse(Operation & operation) const
151  {
152  return this->DynList<T>::traverse(operation);
153  }
154 
155  template <class Operation>
156  bool traverse(Operation && operation = Operation()) const
157  {
158  return this->DynList<T>::traverse(std::move(operation));
159  }
160 
161  template <class Operation>
162  bool traverse(Operation && operation = Operation())
163  {
164  return this->DynList<T>::traverse(std::move(operation));
165  }
166 
167  Functional_Methods(T);
168 
169  Generic_Items(T);
170 };
171 
172 } // end namespace Aleph
173 # endif // TPL_DYNLISTQUEUE_H
174 
T & rear()
Retorna una referencia modificable al trasero de la cola.
Definition: tpl_dynListQueue.H:121
T & front()
Retorna una referencia modificable al frente de la cola.
Definition: tpl_dynListQueue.H:115
DynListQueue Set_Type
El tipo de conjunto sobre el cual se itera.
Definition: tpl_dynListQueue.H:70
const T & front() const
Retorna una referencia constante al frente de la cola.
Definition: tpl_dynListQueue.H:127
Definition: tpl_dynListQueue.H:22
const T & rear() const
Retorna una referencia constante al trasero de la cola.
Definition: tpl_dynListQueue.H:133
T Item_Type
El tipo de elemento que retorna get_current().
Definition: tpl_dynListQueue.H:73
Recorre condicionalmente el contenedor y ejecuta una operation mientras ésta retorne true...
Definition: ahDry.H:13
T & put(const T &data)
Definition: tpl_dynListQueue.H:86

Leandro Rabindranath León