Algorithms Library Toolkit
A toolkit for algorithms, especially for algorithms on formal languages
ObjectsTuple.h
Go to the documentation of this file.
1
6#pragma once
7
8#include <alib/tuple>
9#include <alib/string>
10
11#include <core/xmlApi.hpp>
12
13namespace core {
14
15template < typename ... Ts >
16struct xmlApi < ext::tuple < Ts ... > > {
18 static bool first ( const ext::deque < sax::Token >::const_iterator & input );
19 static std::string xmlTagName ( );
20 static void compose ( ext::deque < sax::Token > & output, const ext::tuple < Ts ... > & data );
21private:
22
23 template < size_t ... I >
24 static void tupleComposeHelper ( ext::deque < sax::Token > & out, const ext::tuple < Ts ... > & container, std::index_sequence < I ... > );
25};
26
27template < typename ... Ts >
28ext::tuple < Ts ... > xmlApi < ext::tuple < Ts ... > >::parse ( ext::deque < sax::Token >::iterator & input ) {
30
31 ext::tuple < Ts ... > res { core::xmlApi < Ts >::parse ( input ) ... }; // NOTE buggy in gcc < 4.9.1
32
34
35 return res;
36}
37
38template < typename ... Ts >
39bool xmlApi < ext::tuple < Ts ... > >::first ( const ext::deque < sax::Token >::const_iterator & input ) {
41}
42
43template < typename ... Ts >
44std::string xmlApi < ext::tuple < Ts ... > >::xmlTagName ( ) {
45 return "Tuple";
46}
47
48template < typename ... Ts >
49void xmlApi < ext::tuple < Ts ... > >::compose ( ext::deque < sax::Token > & output, const ext::tuple < Ts ... > & input ) {
50 output.emplace_back ( xmlTagName(), sax::Token::TokenType::START_ELEMENT );
51
52 tupleComposeHelper ( output, input, std::make_index_sequence < ext::tuple_size < ext::tuple < Ts ... > >::value > { } );
53
54 output.emplace_back ( xmlTagName(), sax::Token::TokenType::END_ELEMENT );
55}
56
57template < typename ... Ts >
58template < size_t ... I >
59void xmlApi < ext::tuple < Ts ... > >::tupleComposeHelper ( ext::deque < sax::Token > & out, const ext::tuple < Ts ... > & container, std::index_sequence < I ... > ) {
60 ( core::xmlApi < Ts >::compose ( out, std::get < I > ( container ) ), ... );
61}
62
63} /* namespace core */
64
Class extending the deque class from the standard library. Original reason is to allow printing of th...
Definition: deque.hpp:44
Class extending the tuple class from the standard library. Original reason is to allow printing of th...
Definition: tuple.hpp:42
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
return res
Definition: MinimizeByPartitioning.h:145
Definition: ContainerFromStringLexer.cpp:8
Definition: normalize.hpp:10
Definition: sigHandler.cpp:20
static bool first(const ext::deque< sax::Token >::const_iterator &input)
static void compose(ext::deque< sax::Token > &output, const ext::tuple< Ts ... > &data)
static ext::tuple< Ts ... > parse(ext::deque< sax::Token >::iterator &input)
Definition: xmlApi.hpp:27