Algorithms Library Toolkit
A toolkit for algorithms, especially for algorithms on formal languages
StringRegistration.hpp
Go to the documentation of this file.
1
6#pragma once
7
10
12
13namespace string {
14
15template < class Group >
16class Parse {
17public:
18 static std::shared_ptr < abstraction::OperationAbstraction > abstractionFromString ( std::string && data ) {
19 return abstraction::StringReaderRegistry::getAbstraction ( ext::to_string < Group > ( ), data );
20 }
21
22};
23
24class Compose {
25public:
26 template < class Type >
27 static std::shared_ptr < abstraction::OperationAbstraction > abstractionFromType ( const Type & ) {
28 return abstraction::StringWriterRegistry::getAbstraction ( ext::to_string < Type > ( ) );
29 }
30
31};
32
33} /* namespace string */
34
35namespace registration {
36
37template < class Group, class Type >
39 ext::list < std::pair < std::function < bool ( ext::istream & ) >, std::unique_ptr < abstraction::StringReaderRegistry::Entry > > >::const_iterator iter;
40
41public:
43 iter = abstraction::StringReaderRegistry::registerStringReader < Group, Type > ( );
44 }
45
47 abstraction::StringReaderRegistry::unregisterStringReader < Group > ( iter );
48 }
49};
50
51template < class Group >
53public:
55 abstraction::AlgorithmRegistry::registerWrapper < string::Parse < Group >, abstraction::UnspecifiedType, std::string && > ( string::Parse < Group >::abstractionFromString, std::array < std::string, 1 > { { "arg0" } } );
56 abstraction::AlgorithmRegistry::setDocumentationOfWrapper < string::Parse < Group >, std::string && > (
57"String parsing of datatype in " + ext::to_string < Group > ( ) + " category.\n\
58\n\
59@param arg0 the parsed string\n\
60@return value parsed from @p arg0" );
61 }
62
64 abstraction::AlgorithmRegistry::unregisterWrapper < string::Parse < Group >, std::string && > ( );
65 }
66};
67
68template < class Type >
70public:
72 abstraction::StringWriterRegistry::registerStringWriter < Type > ( );
73 abstraction::AlgorithmRegistry::registerWrapper < string::Compose, std::string, const Type & > ( string::Compose::abstractionFromType, std::array < std::string, 1 > { { "arg0" } } );
74 abstraction::AlgorithmRegistry::setDocumentationOfWrapper < string::Compose, const Type & > (
75"String composing algorithm.\n\
76\n\
77@param arg0 the composed value\n\
78@return the @p arg0 in string representation" );
79 }
80
82 abstraction::StringWriterRegistry::unregisterStringWriter < Type > ( );
83 abstraction::AlgorithmRegistry::unregisterWrapper < string::Compose, const Type & > ( );
84 }
85};
86
87template < class Group, class Type >
89 typename ext::list < std::pair < std::function < bool ( ext::istream & ) >, std::unique_ptr < typename core::stringApi < Group >::GroupReader > > >::const_iterator iter;
90
91public:
93 iter = core::stringApi < Group >::template registerStringReader < Type > ( );
94 }
95
98 }
99};
100
101template < class Group, class Type >
103public:
105 core::stringApi < Group >::template registerStringWriter < Type > ( );
106 }
107
109 core::stringApi < Group >::template unregisterStringWriter < Type > ( );
110 }
111};
112
113} /* namespace registration */
114
static std::shared_ptr< abstraction::OperationAbstraction > getAbstraction(const std::string &group, const std::string &str)
Definition: StringReaderRegistry.cpp:31
static std::shared_ptr< abstraction::OperationAbstraction > getAbstraction(const std::string &param)
Definition: StringWriterRegistry.cpp:27
Definition: WrapperAbstraction.hpp:17
Definition: istream.h:32
Class extending the list class from the standard library. Original reason is to allow printing of the...
Definition: list.hpp:44
Definition: StringRegistration.hpp:52
~StringReaderGroupRegister()
Definition: StringRegistration.hpp:63
StringReaderGroupRegister()
Definition: StringRegistration.hpp:54
Definition: StringRegistration.hpp:88
StringReaderRegisterTypeInGroup()
Definition: StringRegistration.hpp:92
~StringReaderRegisterTypeInGroup()
Definition: StringRegistration.hpp:96
Definition: StringRegistration.hpp:38
~StringReaderRegister()
Definition: StringRegistration.hpp:46
StringReaderRegister()
Definition: StringRegistration.hpp:42
Definition: StringRegistration.hpp:102
StringWriterRegisterTypeInGroup()
Definition: StringRegistration.hpp:104
~StringWriterRegisterTypeInGroup()
Definition: StringRegistration.hpp:108
Definition: StringRegistration.hpp:69
~StringWriterRegister()
Definition: StringRegistration.hpp:81
StringWriterRegister()
Definition: StringRegistration.hpp:71
Definition: StringRegistration.hpp:24
static std::shared_ptr< abstraction::OperationAbstraction > abstractionFromType(const Type &)
Definition: StringRegistration.hpp:27
Definition: StringRegistration.hpp:16
static std::shared_ptr< abstraction::OperationAbstraction > abstractionFromString(std::string &&data)
Definition: StringRegistration.hpp:18
Type
Definition: MeasurementTypes.hpp:20
Definition: AlgoRegistration.hpp:14
Definition: RandomStringFactory.cpp:12
Definition: stringApi.hpp:26