Java iterators for C++:
 All Classes Namespaces Files Functions Variables Typedefs Friends Macros Pages
Tree_LRP.h
Go to the documentation of this file.
1 // Tree_LRP.h (c) 2009 walter_wabe@yahoo.com
2 
3 #ifdef English_dox
4 /// \file Tree_LRP.h
5 /// \brief Left-Right-Process iterator.
6 /// \author Walter Wabe Acuña <walter_wabe@yahoo.com>
7 /// \author Adolfo Di Mare <adolfo@di-mare.com>
8 /// \date 2009
9 ///
10 #endif
11 #ifdef Spanish_dox
12 /// \file Tree_LRP.h
13 /// \brief Iterador Izquierda-Derecha-Proceso.
14 /// \author Walter Wabe Acuña <walter_wabe@yahoo.com>
15 /// \author Adolfo Di Mare <adolfo@di-mare.com>
16 /// \date 2009
17 ///
18 #endif
19 
20 #ifndef Tree_LRP_h
21 #define Tree_LRP_h
22 
23 #ifdef English_dox
24  /// Doxygen English documentation.
25  #define English_dox "Doxygen English documentation"
26  /// \def English_dox ///< Marks English documentation blocks.
27  /// \def Tree_LRP_h ///< Avoids multiple inclusion.
28 #endif
29 #ifdef Spanish_dox
30  /// Documentaci¢n en espa¤ol.
31  #define Spanish_dox "Documentaci¢n Doxygen en espa¤ol"
32  /// \def Spanish_dox ///< Macro usado para que Doxygen genere documentación.
33  /// \def Tree_LRP_h ///< Evita la inclusión múltiple.
34 #endif
35 
36 #include <list>
37 #include "Tree_L.h"
38 #include <iostream>
39 
40 #ifdef English_dox
41 /// Left-Right-Process iterator.
42 #endif
43 #ifdef Spanish_dox
44 /// Iterador Izquierda-Derecha-Proceso.
45 #endif
46 /**
47  \dontinclude test_iterJava.cpp
48  \skipline test::Tree_LRP()
49  \until }}
50  \see test_iterJava::test_Tree_LRP()
51 
52  \see make_a_o(TL::Tree<char> & T)
53  \dontinclude test_iterJava.cpp
54  \skipline T = a
55  \until +--k
56 */
57 
58 template <typename E>
59 class Tree_LRP {
60  std::list< TL::Tree<E> > m_Q; ///< std::queue<>.
61 public:
62  /// \c init().
63  Tree_LRP( const TL::Tree<E>& T = TL::Tree<E>() )
64  : m_Q() { set(T); }
65  void set( const TL::Tree<E>& T ); ///< \c Iterator::set().
66 
67  bool hasNext() const; ///< \c Iterator::hasNext().
68  const TL::Tree<E> next(); ///< \c Iterator::next().
69 };
70 
71 template <typename E>
72 void Tree_LRP<E>::set( const TL::Tree<E>& T ) {
73  m_Q.clear(); // erase whatever was left
74  if ( T.Empty() ) {
75  return;
76  }
77  TL::Tree<E> Child = T.Root();
78  while ( !Child.Leftmost().Empty() ) {
79  Child = Child.Leftmost();
80  }
81  while ( !Child.Empty() ) {
82  m_Q.push_back(Child);
83  // std::cout << Child.Data();
84  if ( !Child.Right_Sibling().Empty() ) {
85  Child = Child.Right_Sibling();
86  while ( !Child.Leftmost().Empty() ) {
87  Child = Child.Leftmost();
88  }
89  }
90  else {
91  while ( !Child.Father().Empty()
92  &&
93  ( Child==Child.Father().Right_Sibling() )
94  ) {
95  Child = Child.Father();
96  }
97  Child = Child.Father();
98  }
99  }
100 }
101 
102 /* Indicates if the iterator have a next element */
103 template <typename E>
104 bool Tree_LRP<E>::hasNext() const {
105  return ( ! m_Q.empty() );
106 }
107 
108 /* Moves the iterator to it`s next element */
109 template <typename E>
111  TL::Tree<E> first = m_Q.front();
112  m_Q.pop_front();
113  return first;
114 }
115 
116 #endif // Tree_LRP_h
117 // EOF: Tree_LRP.h
Tree Father() const
Acceso al padre.
Definition: Tree_L.h:355
const TL::Tree< E > next()
Iterator::next().
Definition: Tree_LRP.h:110
std::list< TL::Tree< E > > m_Q
std::queue&lt;&gt;.
Definition: Tree_LRP.h:60
bool hasNext() const
Iterator::hasNext().
Definition: Tree_LRP.h:104
Left-Right-Process iterator.
Definition: Tree_LRP.h:59
Tree Right_Sibling() const
Obtiene el hermano no vacío siguiente, que está hacia la derecha.
Definition: Tree_L.h:521
Tree Leftmost() const
Obtiene el hijo más izquierdo del árbol.
Definition: Tree_L.h:698
Declaraciones y definiciones para la clase Tree.
bool Empty() const
Retorna &quot;true&quot; si el sub-árbol está vacío.
Definition: Tree_L.h:91
Los métodos para trabajar con árboles regresan &quot;referencias&quot; que son sub-árboles. ...
Definition: Tree_L.h:25
void set(const TL::Tree< E > &T)
Iterator::set().
Definition: Tree_LRP.h:72
Tree Root() const
Raíz del sub-árbol.
Definition: Tree_L.h:154