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_listQueue.H
1 
2 # ifndef TPL_LISTQUEUE_H
3 # define TPL_LISTQUEUE_H
4 
5 # include <tpl_snode.H>
6 
7 using namespace Aleph;
8 
9 namespace Aleph {
10 
22  template <typename T>
23 class ListQueue
24 {
25 public:
26 
28  typedef Snode<T> Node;
29 
32 
34  typedef Node * Item_Type;
35 
36 private:
37 
38  Node * rear_ptr;
39  size_t num_nodes;
40 
41 public:
42 
44  ListQueue() : rear_ptr(NULL), num_nodes(0) { /* empty */ }
45 
52  void put(Node * node)
53  {
54  I(node->is_empty());
55 
56  if (num_nodes > 0)
57  rear_ptr->insert_next(node);
58  num_nodes++;
59  rear_ptr = node;
60  }
61 
67  Node * get() throw(std::exception, std::underflow_error)
68  {
69  if (num_nodes == 0)
70  throw std::underflow_error("stack is empty");
71 
72  Node * ret_val = rear_ptr->remove_next();
73  num_nodes--;
74  if (num_nodes == 0)
75  rear_ptr = NULL;
76 
77  return ret_val;
78  }
79 
85  Node * front() const throw(std::exception, std::underflow_error)
86  {
87  if (num_nodes == 0)
88  throw std::underflow_error("stack is empty");
89 
90  return rear_ptr->get_next();
91  }
92 
98  Node * rear() const throw(std::exception, std::underflow_error)
99  {
100  if (num_nodes == 0)
101  throw std::underflow_error("stack is empty");
102 
103  return rear_ptr;
104  }
105 
107  size_t size() const { return num_nodes; }
108 
110  bool is_empty() const { return num_nodes == 0; }
111 
112  void swap(ListQueue & q)
113  {
114  std::swap(num_nodes, q.num_nodes);
115  std::swap(rear_ptr, q.rear_ptr);
116  }
117 };
118 
119 } // end namespace Aleph
120 
121 # endif /* TPL_LISTQUEUE_H */
122 
void put(Node *node)
Definition: tpl_listQueue.H:52
Snode * remove_next()
Definition: tpl_snode.H:48
Node * front() const
Definition: tpl_listQueue.H:85
Node * rear() const
Definition: tpl_listQueue.H:98
bool is_empty() const
Retorna true si la cola está vacía.
Definition: tpl_listQueue.H:110
Definition: tpl_snode.H:22
Snode *& get_next()
Retorna el nodo siguiente a this.
Definition: tpl_snode.H:51
ListQueue Set_Type
El tipo de conjunto sobre el cual se itera.
Definition: tpl_listQueue.H:31
ListQueue()
Constructor.
Definition: tpl_listQueue.H:44
Snode< T > Node
Tipo de nodo.
Definition: tpl_listQueue.H:28
Node * Item_Type
El tipo de elemento que retorna get_current().
Definition: tpl_listQueue.H:34
size_t size() const
Retorna la cantidad de elementos que tiene la cola.
Definition: tpl_listQueue.H:107
Definition: tpl_listQueue.H:23

Leandro Rabindranath León