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_stl_itor.H
1 # ifndef TPL_STD_ITRO_H
2 # define TPL_STD_ITRO_H
3 
4 namespace Aleph {
5 
6 
12  template <class Tree_Type>
14 {
15 private:
16 
17  friend class Set_Type;
18 
19  typedef typename Tree_Type::Iterator Iterator;
20 
21  Iterator itor;
22  bool underflow;
23  bool overflow;
24 
25  void init_flags ()
26  {
27  if (itor.has_current () )
28  underflow = overflow = false;
29  else
30  underflow = overflow = true;
31  }
32 
33  void goto_begin ()
34  {
35  itor.reset_first ();
36  init_flags ();
37  }
38 
39  void goto_last ()
40  {
41  itor.reset_last ();
42  init_flags ();
43  }
44 
45  void goto_end ()
46  {
47  itor.reset_last ();
48  init_flags ();
49  overflow = true;
50  if (not size() != 0)
51  itor.next ();
52  }
53 
54  void forward ()
55  {
56  if (underflow)
57  {
58  goto_begin ();
59  return;
60  }
61 
62  itor.next ();
63 
64  if (not itor.has_current () )
65  overflow = true;
66  }
67 
68  void backward ()
69  {
70  if (overflow)
71  {
72  goto_last ();
73  return;
74  }
75 
76  itor.prev ();
77 
78  if (not itor.has_current () )
79  underflow = true;
80  }
81 
82  iterator (Tree_Type & _tree, Node * node)
83  : itor (_tree, node), underflow (false), overflow (false)
84  {
85  /* empty */
86  }
87 
88 public:
89 
90  typedef typename map::value_type value_type;
91  typedef typename map::size_type difference_type;
92  typedef typename map::value_type * pointer;
93  typedef typename map::reference reference;
94 
96  iterator () { /* empty */ }
97 
98  iterator (Tree_Type & tree) : itor (tree)
99  {
100  init_flags ();
101  }
102 
104  Pair & operator * ()
105  {
106  return KEY (itor.get_current () );
107  }
108 
110  Pair * operator -> ()
111  {
112  return &KEY (itor.get_current () );
113  }
114 
117  Pair & operator ++ ()
118  {
119  forward ();
120 
121  return KEY (itor.get_current () );
122  }
123 
124  Pair & operator ++ (int)
125  {
126  Pair & retPair = KEY (itor.get_current () );
127  forward ();
128 
129  return retPair;
130  }
131 
132  Pair & operator -- ()
133  {
134  backward ();
135 
136  return KEY (itor.get_current () );
137  }
138 
139  Pair & operator -- (int)
140  {
141  Pair & retPair = KEY (itor.get_current () );
142  backward ();
143 
144  return retPair;
145  }
146 
147  Pair & operator += (const size_type & n)
148  {
149  itor.reset_to_pos (itor.get_current_position () + n);
150 
151  return KEY (itor.get_current () );
152  }
153 
154  Pair & operator -= (const size_type & n)
155  {
156  itor.reset_to_pos (itor.get_current_position () - n);
157 
158  return KEY (itor.get_current () );
159  }
160 
161  bool operator == (const iterator & _itor) const
162  {
163  return itor == _itor.itor;
164  }
165 
166  bool operator != (const iterator & _itor) const
167  {
168  return not (itor == _itor.itor);
169  }
170 
171  bool verify (const map & _map) const
172  {
173  return itor.verify ( (Tree_Type*) &_map.tree);
174  }
175 
176  bool verify (const iterator & it) const
177  {
178  return itor.verify (it.itor);
179  }
180 };
181 
182 
183 
184 } // end namespace Aleph
185 
186 # endif // TPL_STD_ITRO_H
Pair * operator->()
"Dereferencia" un puntero al elemento actual.
Definition: tpl_stl_itor.H:110
Definition: tpl_stl_itor.H:13
Pair & operator++()
Definition: tpl_stl_itor.H:117
Pair & operator*()
Proporciona una referencia al elemento actual.
Definition: tpl_stl_itor.H:104
map::value_type & reference
Definition: Map.H:79
Pair value_type
Tipo a exportar como tipo del contenedor.
Definition: Map.H:75
iterator()
Constructor vacío; no tiene validez si no se asocia un conjunto.
Definition: tpl_stl_itor.H:96
#define KEY(p)
Definition: tpl_binNode.H:206

Leandro Rabindranath León