Algorithms Library Toolkit
A toolkit for algorithms, especially for algorithms on formal languages
ObjectsTree.h
Go to the documentation of this file.
1
6#pragma once
7
8#include <alib/tree>
9#include <core/xmlApi.hpp>
10
11namespace core {
12
13template < typename T >
14struct xmlApi < ext::tree < T > > {
16 static bool first ( const ext::deque < sax::Token >::const_iterator & input );
17 static std::string xmlTagName ( );
18 static void compose ( ext::deque < sax::Token > & output, const ext::tree < T > & input );
19};
20
21template < typename T >
25
27
28 ext::tree < T > * under = & tree;
29
30 unsigned level = 0;
31
35
36 if ( level > 0 )
37 under = & * std::prev ( under->end ( ) );
38
39 ++level;
40 }
41
42 under->push_back ( core::xmlApi < T >::parse ( input ) );
43
46
47 under = under->getParent ( );
48 --level;
49 }
50 }
51
54 return tree;
55}
56
57template < typename T >
60}
61
62template < typename T >
63std::string xmlApi < ext::tree < T > >::xmlTagName ( ) {
64 return "Tree";
65}
66
67template < typename T >
68void xmlApi < ext::tree < T > >::compose ( ext::deque < sax::Token > & output, const ext::tree < T > & input ) {
69 output.emplace_back ( xmlTagName ( ), sax::Token::TokenType::START_ELEMENT );
70 output.emplace_back ( "Root", sax::Token::TokenType::START_ELEMENT );
71
72 unsigned level = 0;
73
74 for ( typename ext::tree < T >::const_prefix_iterator iter = input.prefix_begin ( ); iter != input.prefix_end ( ); ) {
75 while ( iter.getLevel ( ) > level ) {
76 output.emplace_back ( "Children", sax::Token::TokenType::START_ELEMENT );
77 ++level;
78 }
79
80 core::xmlApi < T >::compose ( output, * iter );
81 ++iter;
82
83 while ( iter.getLevel ( ) < level ) {
84 output.emplace_back ( "Children", sax::Token::TokenType::END_ELEMENT );
85 --level;
86 }
87 }
88
89 output.emplace_back ( "Root", sax::Token::TokenType::END_ELEMENT );
90 output.emplace_back ( xmlTagName ( ), sax::Token::TokenType::END_ELEMENT );
91}
92
93} /* namespace core */
94
Class extending the deque class from the standard library. Original reason is to allow printing of th...
Definition: deque.hpp:44
The iterator type over structure of the tree following preorder traversal.
Definition: tree.hpp:363
Class introducing a tree with interface trying to be close to the interface of standard library conta...
Definition: tree.hpp:52
const_children_iterator end() const
Getter of a children iterator one after the last child.
Definition: tree.hpp:882
tree * getParent()
Getter of the parent node. Null if the node is root.
Definition: tree.hpp:80
const_prefix_iterator prefix_begin() const
Getter of the prefix iterator to the root node.
Definition: tree.hpp:904
void push_back(ext::tree< T > &&value)
Pushbacks a subtree after last child of a tree.
Definition: tree.hpp:983
const_prefix_iterator prefix_end() const
Getter of the prefix iterator one after the last node in the prefix traversal.
Definition: tree.hpp:914
static void popToken(ext::deque< Token >::iterator &input, Token::TokenType type, const std::string &data)
Definition: FromXMLParserHelper.cpp:39
static bool isToken(ext::deque< Token >::const_iterator input, Token::TokenType type, const std::string &data)
Definition: FromXMLParserHelper.cpp:29
static bool isTokenType(ext::deque< Token >::const_iterator input, Token::TokenType type)
Definition: FromXMLParserHelper.cpp:34
Definition: normalize.hpp:10
Definition: sigHandler.cpp:20
Definition: BackwardOccurrenceTest.h:17
Definition: xmlApi.hpp:27