Algorithms Library Toolkit
A toolkit for algorithms, especially for algorithms on formal languages
TreeToXMLComposer.h
Go to the documentation of this file.
1
6#pragma once
7
8#include <alib/deque>
9#include <alib/set>
10#include <alib/vector>
11#include <alib/tree>
12#include <sax/Token.h>
13#include <core/xmlApi.hpp>
14
15namespace tree {
16
21public:
22 template < class SymbolType >
23 static void composeAlphabet ( ext::deque < sax::Token > & out, const ext::set < SymbolType > & symbols );
24
25 template < class SymbolType >
26 static void composeBar ( ext::deque < sax::Token > & out, const SymbolType & symbol );
27 template < class SymbolType >
28 static void composeBars ( ext::deque < sax::Token > & out, const ext::set < SymbolType > & symbols );
29 template < class SymbolType >
30 static void composeVariablesBar ( ext::deque < sax::Token > & out, const SymbolType & symbol );
31
32 template < class SymbolType >
33 static void composeSubtreeWildcard ( ext::deque < sax::Token > & out, const SymbolType & symbol );
34
35 template < class SymbolType >
36 static void composeSubtreeGap ( ext::deque < sax::Token > & out, const SymbolType & symbol );
37
38 template < class SymbolType >
39 static void composeContent ( ext::deque < sax::Token > & out, const ext::vector < SymbolType > & content );
40 template < class SymbolType >
41 static void composeContent ( ext::deque < sax::Token > & out, const ext::tree < SymbolType > & content );
42
43 template < class SymbolType >
45};
46
47template < class SymbolType >
49 out.emplace_back ( sax::Token ( "bar", sax::Token::TokenType::START_ELEMENT ) );
51 out.emplace_back ( sax::Token ( "bar", sax::Token::TokenType::END_ELEMENT ) );
52}
53
54template < class SymbolType >
56 out.emplace_back ( sax::Token ( "bars", sax::Token::TokenType::START_ELEMENT ) );
57
58 for ( const auto & symbol : symbols )
60
61 out.emplace_back ( sax::Token ( "bars", sax::Token::TokenType::END_ELEMENT ) );
62}
63
64template < class SymbolType >
66 out.emplace_back ( sax::Token ( "variablesBar", sax::Token::TokenType::START_ELEMENT ) );
68 out.emplace_back ( sax::Token ( "variablesBar", sax::Token::TokenType::END_ELEMENT ) );
69}
70
71template < class SymbolType >
73 out.emplace_back ( sax::Token ( "subtreeWildcard", sax::Token::TokenType::START_ELEMENT ) );
75 out.emplace_back ( sax::Token ( "subtreeWildcard", sax::Token::TokenType::END_ELEMENT ) );
76}
77
78template < class SymbolType >
80 out.emplace_back ( sax::Token ( "subtreeGap", sax::Token::TokenType::START_ELEMENT ) );
82 out.emplace_back ( sax::Token ( "subtreeGap", sax::Token::TokenType::END_ELEMENT ) );
83}
84
85template < class SymbolType >
87 out.emplace_back ( sax::Token ( "alphabet", sax::Token::TokenType::START_ELEMENT ) );
88
89 for ( const auto & symbol : symbols )
91
92 out.emplace_back ( sax::Token ( "alphabet", sax::Token::TokenType::END_ELEMENT ) );
93}
94
95template < class SymbolType >
97 out.emplace_back ( "content", sax::Token::TokenType::START_ELEMENT );
98
99 for ( const auto & symbol : content )
101
102 out.emplace_back ( "content", sax::Token::TokenType::END_ELEMENT );
103}
104
105template < class SymbolType >
107 out.emplace_back ( "content", sax::Token::TokenType::START_ELEMENT );
108
109 unsigned level = 0;
110
111 for ( typename ext::tree < SymbolType >::const_prefix_iterator iter = content.prefix_begin ( ); iter != content.prefix_end ( ); ) {
112 while ( iter.getLevel ( ) > level ) {
113 out.emplace_back ( "Children", sax::Token::TokenType::START_ELEMENT );
114 ++level;
115 }
116
118 ++iter;
119
120 while ( iter.getLevel ( ) < level ) {
121 out.emplace_back ( "Children", sax::Token::TokenType::END_ELEMENT );
122 --level;
123 }
124 }
125
126 out.emplace_back ( "content", sax::Token::TokenType::END_ELEMENT );
127}
128
129template < class SymbolType >
131 out.emplace_back ( sax::Token ( "nonlinearVariables", sax::Token::TokenType::START_ELEMENT ) );
132
133 for ( const auto & symbol : symbols )
135
136 out.emplace_back ( sax::Token ( "nonlinearVariables", sax::Token::TokenType::END_ELEMENT ) );
137}
138
139} /* namespace tree */
140
Definition: set.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_prefix_iterator prefix_begin() const
Getter of the prefix iterator to the root node.
Definition: tree.hpp:904
const_prefix_iterator prefix_end() const
Getter of the prefix iterator one after the last node in the prefix traversal.
Definition: tree.hpp:914
Class extending the vector class from the standard library. Original reason is to allow printing of t...
Definition: vector.hpp:45
Definition: Token.h:17
Definition: TreeToXMLComposer.h:20
static void composeAlphabet(ext::deque< sax::Token > &out, const ext::set< SymbolType > &symbols)
Definition: TreeToXMLComposer.h:86
static void composeSubtreeGap(ext::deque< sax::Token > &out, const SymbolType &symbol)
Definition: TreeToXMLComposer.h:79
static void composeBar(ext::deque< sax::Token > &out, const SymbolType &symbol)
Definition: TreeToXMLComposer.h:48
static void composeContent(ext::deque< sax::Token > &out, const ext::vector< SymbolType > &content)
Definition: TreeToXMLComposer.h:96
static void composeNonlinearVariables(ext::deque< sax::Token > &out, const ext::set< SymbolType > &symbols)
Definition: TreeToXMLComposer.h:130
static void composeBars(ext::deque< sax::Token > &out, const ext::set< SymbolType > &symbols)
Definition: TreeToXMLComposer.h:55
static void composeVariablesBar(ext::deque< sax::Token > &out, const SymbolType &symbol)
Definition: TreeToXMLComposer.h:65
static void composeSubtreeWildcard(ext::deque< sax::Token > &out, const SymbolType &symbol)
Definition: TreeToXMLComposer.h:72
typename T::SymbolType SymbolType
Definition: ReachableStates.h:176
Definition: BackwardOccurrenceTest.h:17
Definition: xmlApi.hpp:27