Aleph-w  1.5a.2
Biblioteca general de algoritmos y estructuras de datos
 Todo Clases Archivos Funciones Variables 'typedefs' Enumeraciones Amigas Grupos Páginas
wrapper_iterator.H
1 
2 #line 5097 "grafos.nw"
3 # ifndef WRAPPER_ITERATOR_H
4 # define WRAPPER_ITERATOR_H
5 
37  template <class Container, class It, class Show_Item>
38 class Wrapper_Iterator : public It
39 {
40 
41 private:
42 
43 
44 #line 5175 "grafos.nw"
45 Container * cont;
46 #line 5182 "grafos.nw"
47 void goto_first_valid_item()
48 {
49  try
50  { // colocarse en el primer elemento que acepte Show_Item
51  for (It::reset_first(); true; It::next())
52  if (not It::has_current() or Show_Item () (*cont, It::get_current()))
53  return;
54  }
55  catch (std::overflow_error) { /* se queda en overflow sin propagar */ }
56 }
57 void forward()
58 {
59  It::next();
60  try
61  { // avanzar hasta el siguiente item que acepte Show_Item
62  for (;true; It::next())
63  if (not It::has_current() or Show_Item () (*cont, It::get_current()))
64  return;
65  }
66  catch (std::overflow_error) { /* se queda en overflow sin propagar */ }
67 }
68 #line 5220 "grafos.nw"
69 void goto_last_valid_item()
70 {
71  for (It::reset_last(); true; It::prev())
72  if (not It::has_current() or Show_Item () (*cont, It::get_current()))
73  return;
74 }
75 void backward()
76 {
77  It::prev();
78  try
79  {
80  for (;true; It::prev())
81  if (not It::has_current() or Show_Item() (*cont, It::get_current()))
82  return;
83  }
84  catch (std::underflow_error) { /* se queda en overflow sin propagar */ }
85 }
86 
87 #line 5139 "grafos.nw"
88 public:
89 
90 
91 #line 5245 "grafos.nw"
92 typedef typename It::Item_Type Item_Type;
94 Wrapper_Iterator() : cont(NULL) { /* empty */ }
96 Wrapper_Iterator(Container & cont) : It(cont), cont(&cont)
97 {
98  goto_first_valid_item();
99 }
101 Wrapper_Iterator(const Wrapper_Iterator & it) : It(it), cont(it.cont) { /* empty */ }
102 Wrapper_Iterator & operator = (const Wrapper_Iterator & it)
103 {
104  *((It*) this) = it;
105  cont = it.cont;
106  return *this;
107 }
109 void next() { forward(); }
111 void prev() { backward(); }
113 void reset_first() { goto_first_valid_item(); }
115 void reset_last() { goto_last_valid_item(); }
116 #line 5142 "grafos.nw"
117 };
118 
119 
120 # endif // WRAPPER_ITERATOR_H
121 
void prev()
Retrocede el iterador una posición.
Definition: wrapper_iterator.H:111
It::Item_Type Item_Type
Tipo de elemento que retorna get_current()
Definition: wrapper_iterator.H:93
Definition: wrapper_iterator.H:38
void next()
Adelanta el iterador una posición.
Definition: wrapper_iterator.H:109
Wrapper_Iterator(Container &cont)
Iterador sobre conjunto conj.
Definition: wrapper_iterator.H:96
void reset_last()
Coloca el iterador sobre el último elemento de la secuencia.
Definition: wrapper_iterator.H:115
Wrapper_Iterator(const Wrapper_Iterator &it)
Constructor copia.
Definition: wrapper_iterator.H:101
void reset_first()
Coloca el iterador sobre el primer elemento de la secuencia.
Definition: wrapper_iterator.H:113

Leandro Rabindranath León