diff --git a/alib2data/src/string/CyclicString.cpp b/alib2data/src/string/CyclicString.cpp index c40c2519dc2a9203f50c12f0740f5d608ca5ef50..447759ae47069366790aeeba1809e58925a9b5a7 100644 --- a/alib2data/src/string/CyclicString.cpp +++ b/alib2data/src/string/CyclicString.cpp @@ -23,7 +23,7 @@ namespace string { -CyclicString::CyclicString(std::set<alphabet::Symbol> alphabet, std::vector<alphabet::Symbol> data) : std::Components < CyclicString, alphabet::Symbol, std::tuple < GeneralAlphabet >, std::tuple < > > ( std::make_tuple ( std::move ( alphabet ) ), std::tuple < > ( ) ) { +CyclicString::CyclicString(std::set<alphabet::Symbol> alphabet, std::vector<alphabet::Symbol> data) : std::Components2 < CyclicString, alphabet::Symbol, std::tuple < GeneralAlphabet >, std::tuple < > > ( std::make_tuple ( std::move ( alphabet ) ), std::tuple < > ( ) ) { setContent(std::move(data)); } @@ -111,25 +111,6 @@ void CyclicString::compose(std::deque<sax::Token>& out) const { } /* namespace string */ -namespace std { - -template < > -bool ::string::CyclicString::Component < ::string::CyclicString, alphabet::Symbol, ::string::GeneralAlphabet >::used ( const alphabet::Symbol & symbol ) const { - const std::vector<alphabet::Symbol>& content = static_cast < const ::string::CyclicString * > ( this )->getContent ( ); - return std::find(content.begin(), content.end(), symbol) != content.end(); -} - -template < > -bool ::string::CyclicString::Component < ::string::CyclicString, alphabet::Symbol, ::string::GeneralAlphabet >::available ( const alphabet::Symbol & ) const { - return true; -} - -template < > -void ::string::CyclicString::Component < ::string::CyclicString, alphabet::Symbol, ::string::GeneralAlphabet >::valid ( const alphabet::Symbol & ) const { -} - -} /* namespace std */ - namespace alib { auto cyclicStringParserRegister = xmlApi<string::String>::ParserRegister<string::CyclicString>(); diff --git a/alib2data/src/string/CyclicString.h b/alib2data/src/string/CyclicString.h index 2dc7b101b2b327f48aa426a73a226ca1ea5f9c34..907e97ca8c98a607140b5800c0a23d0de7ee91e4 100644 --- a/alib2data/src/string/CyclicString.h +++ b/alib2data/src/string/CyclicString.h @@ -13,7 +13,7 @@ #include <vector> #include "../alphabet/Symbol.h" -#include <core/components.hpp> +#include <core/components2.hpp> namespace string { @@ -24,7 +24,7 @@ class GeneralAlphabet; * Represents regular expression parsed from the XML. Regular expression is stored * as a tree of CyclicStringElement. */ -class CyclicString : public StringBase, public std::Components < CyclicString, alphabet::Symbol, std::tuple < GeneralAlphabet >, std::tuple < > > { +class CyclicString : public StringBase, public std::Components2 < CyclicString, alphabet::Symbol, std::tuple < GeneralAlphabet >, std::tuple < > > { std::vector < alphabet::Symbol > m_Data; public: @@ -83,4 +83,24 @@ public: } /* namespace string */ +namespace std { + +template < > +class ComponentConstraint2< ::string::CyclicString, alphabet::Symbol, ::string::GeneralAlphabet > { +public: + static bool used ( const ::string::CyclicString & string, const alphabet::Symbol & symbol ) { + const std::vector<alphabet::Symbol>& content = string.getContent ( ); + return std::find(content.begin(), content.end(), symbol) != content.end(); + } + + static bool available ( const ::string::CyclicString &, const alphabet::Symbol & ) { + return true; + } + + static void valid ( const ::string::CyclicString &, const alphabet::Symbol & ) { + } +}; + +} /* namespace std */ + #endif /* CYCLIC_STRING_H_ */ diff --git a/alib2data/src/string/Epsilon.cpp b/alib2data/src/string/Epsilon.cpp index 6c88ae18026594e7c351e4165f04a22d55b74131..c7022f7fa7ef21830a23a4ea6bde992034b35406 100644 --- a/alib2data/src/string/Epsilon.cpp +++ b/alib2data/src/string/Epsilon.cpp @@ -16,7 +16,7 @@ namespace string { -Epsilon::Epsilon(std::set<alphabet::Symbol> alphabet) : std::Components < Epsilon, alphabet::Symbol, std::tuple < GeneralAlphabet >, std::tuple < > > ( std::make_tuple ( std::move ( alphabet ) ), std::tuple < > ( ) ) { +Epsilon::Epsilon(std::set<alphabet::Symbol> alphabet) : std::Components2 < Epsilon, alphabet::Symbol, std::tuple < GeneralAlphabet >, std::tuple < > > ( std::make_tuple ( std::move ( alphabet ) ), std::tuple < > ( ) ) { } Epsilon::Epsilon() : Epsilon ( std::set< alphabet::Symbol > ( ) ) { @@ -70,24 +70,6 @@ void Epsilon::compose(std::deque<sax::Token>& out) const { } /* namespace string */ -namespace std { - -template < > -bool ::string::Epsilon::Component < ::string::Epsilon, alphabet::Symbol, ::string::GeneralAlphabet >::used ( const alphabet::Symbol & ) const { - return false; -} - -template < > -bool ::string::Epsilon::Component < ::string::Epsilon, alphabet::Symbol, ::string::GeneralAlphabet >::available ( const alphabet::Symbol & ) const { - return true; -} - -template < > -void ::string::Epsilon::Component < ::string::Epsilon, alphabet::Symbol, ::string::GeneralAlphabet >::valid ( const alphabet::Symbol & ) const { -} - -} /* namespace std */ - namespace alib { auto epsilonParserRegister = xmlApi<string::String>::ParserRegister<string::Epsilon>(); diff --git a/alib2data/src/string/Epsilon.h b/alib2data/src/string/Epsilon.h index b173a22a01ab496719ff42600722d07c4e6cb9af..ede29924e84d0efe3a9bf2fbb839bf1a349d9814 100644 --- a/alib2data/src/string/Epsilon.h +++ b/alib2data/src/string/Epsilon.h @@ -13,7 +13,7 @@ #include <vector> #include "../alphabet/Symbol.h" -#include <core/components.hpp> +#include <core/components2.hpp> namespace string { @@ -23,7 +23,7 @@ class GeneralAlphabet; * Represents epsilon. Regular expression is stored * as a tree of EpsilonElement. */ -class Epsilon : public StringBase, public std::Components < Epsilon, alphabet::Symbol, std::tuple < GeneralAlphabet >, std::tuple < > > { +class Epsilon : public StringBase, public std::Components2 < Epsilon, alphabet::Symbol, std::tuple < GeneralAlphabet >, std::tuple < > > { public: Epsilon ( ); @@ -79,4 +79,23 @@ public: } /* namespace string */ +namespace std { + +template < > +class ComponentConstraint2< ::string::Epsilon, alphabet::Symbol, ::string::GeneralAlphabet > { +public: + static bool used ( const ::string::Epsilon &, const alphabet::Symbol & ) { + return false; + } + + static bool available ( const ::string::Epsilon &, const alphabet::Symbol & ) { + return true; + } + + static void valid ( const ::string::Epsilon &, const alphabet::Symbol & ) { + } +}; + +} /* namespace std */ + #endif /* EPSILON_H_ */ diff --git a/alib2data/src/string/LinearString.cpp b/alib2data/src/string/LinearString.cpp index 5b5fbc2e5d292252f65d05a1c502d1ddeac06e30..3f87b65df46b356da9a9e4e820f783a5c415b935 100644 --- a/alib2data/src/string/LinearString.cpp +++ b/alib2data/src/string/LinearString.cpp @@ -31,7 +31,7 @@ namespace string { -LinearString::LinearString(std::set<alphabet::Symbol> alphabet, std::vector<alphabet::Symbol> data) : std::Components < LinearString, alphabet::Symbol, std::tuple < GeneralAlphabet >, std::tuple < > > ( std::make_tuple ( std::move ( alphabet ) ), std::tuple < > ( ) ) { +LinearString::LinearString(std::set<alphabet::Symbol> alphabet, std::vector<alphabet::Symbol> data) : std::Components2 < LinearString, alphabet::Symbol, std::tuple < GeneralAlphabet >, std::tuple < > > ( std::make_tuple ( std::move ( alphabet ) ), std::tuple < > ( ) ) { setContent(std::move(data)); } @@ -152,25 +152,6 @@ void LinearString::compose ( std::deque < sax::Token > & out ) const { } /* namespace string */ -namespace std { - -template < > -bool ::string::LinearString::Component < ::string::LinearString, alphabet::Symbol, ::string::GeneralAlphabet >::used ( const alphabet::Symbol & symbol ) const { - const std::vector<alphabet::Symbol>& content = static_cast < const ::string::LinearString * > ( this )->getContent ( ); - return std::find(content.begin(), content.end(), symbol) != content.end(); -} - -template < > -bool ::string::LinearString::Component < ::string::LinearString, alphabet::Symbol, ::string::GeneralAlphabet >::available ( const alphabet::Symbol & ) const { - return true; -} - -template < > -void ::string::LinearString::Component < ::string::LinearString, alphabet::Symbol, ::string::GeneralAlphabet >::valid ( const alphabet::Symbol & ) const { -} - -} /* namespace std */ - namespace alib { auto linearStringParserRegister = xmlApi < string::String >::ParserRegister < string::LinearString > (); diff --git a/alib2data/src/string/LinearString.h b/alib2data/src/string/LinearString.h index 13bd6c5d09a26c2c929453f710e14e9cfb932f74..f38569014f1cd9b6636dd42368d978a6fc38a2a8 100644 --- a/alib2data/src/string/LinearString.h +++ b/alib2data/src/string/LinearString.h @@ -13,7 +13,7 @@ #include <vector> #include "../alphabet/Symbol.h" -#include <core/components.hpp> +#include <core/components2.hpp> namespace tree { @@ -36,7 +36,7 @@ class GeneralAlphabet; * Represents regular expression parsed from the XML. Regular expression is stored * as a tree of LinearStringElement. */ -class LinearString : public StringBase, public std::Components < LinearString, alphabet::Symbol, std::tuple < GeneralAlphabet >, std::tuple < > > { +class LinearString : public StringBase, public std::Components2 < LinearString, alphabet::Symbol, std::tuple < GeneralAlphabet >, std::tuple < > > { std::vector < alphabet::Symbol > m_Data; public: @@ -107,4 +107,24 @@ public: } /* namespace string */ +namespace std { + +template < > +class ComponentConstraint2< ::string::LinearString, alphabet::Symbol, ::string::GeneralAlphabet > { +public: + static bool used ( const ::string::LinearString & string, const alphabet::Symbol & symbol ) { + const std::vector<alphabet::Symbol>& content = string.getContent ( ); + return std::find(content.begin(), content.end(), symbol) != content.end(); + } + + static bool available ( const ::string::LinearString &, const alphabet::Symbol & ) { + return true; + } + + static void valid ( const ::string::LinearString &, const alphabet::Symbol & ) { + } +}; + +} /* namespace std */ + #endif /* LINEAR_STRING_H_ */ diff --git a/alib2data/src/string/LinearStringTerminatingSymbol.cpp b/alib2data/src/string/LinearStringTerminatingSymbol.cpp index 498803f88a35293814a50cadf22cd030b70a37f7..598b75188aaee9bb3830d8f9c4414b5ed2c5abe8 100644 --- a/alib2data/src/string/LinearStringTerminatingSymbol.cpp +++ b/alib2data/src/string/LinearStringTerminatingSymbol.cpp @@ -22,7 +22,7 @@ namespace string { -LinearStringTerminatingSymbol::LinearStringTerminatingSymbol ( std::set < alphabet::Symbol > alphabet, alphabet::Symbol terminatingSymbol, std::vector < alphabet::Symbol > data ) : std::Components < LinearStringTerminatingSymbol, alphabet::Symbol, std::tuple < GeneralAlphabet >, std::tuple < TerminatingSymbol > > ( std::make_tuple ( std::move ( alphabet ) ), std::make_tuple ( std::move ( terminatingSymbol ) ) ) { +LinearStringTerminatingSymbol::LinearStringTerminatingSymbol ( std::set < alphabet::Symbol > alphabet, alphabet::Symbol terminatingSymbol, std::vector < alphabet::Symbol > data ) : std::Components2 < LinearStringTerminatingSymbol, alphabet::Symbol, std::tuple < GeneralAlphabet >, std::tuple < TerminatingSymbol > > ( std::make_tuple ( std::move ( alphabet ) ), std::make_tuple ( std::move ( terminatingSymbol ) ) ) { setContent ( std::move ( data ) ); } @@ -118,34 +118,6 @@ void LinearStringTerminatingSymbol::compose ( std::deque < sax::Token > & out ) } /* namespace string */ -namespace std { - -template < > -bool ::string::LinearStringTerminatingSymbol::Component < ::string::LinearStringTerminatingSymbol, alphabet::Symbol, ::string::GeneralAlphabet >::used ( const alphabet::Symbol & symbol ) const { - const std::vector<alphabet::Symbol>& content = static_cast < const ::string::LinearStringTerminatingSymbol * > ( this )->getContent ( ); - return std::find(content.begin(), content.end(), symbol) != content.end(); -} - -template < > -bool ::string::LinearStringTerminatingSymbol::Component < ::string::LinearStringTerminatingSymbol, alphabet::Symbol, ::string::GeneralAlphabet >::available ( const alphabet::Symbol & ) const { - return true; -} - -template < > -void ::string::LinearStringTerminatingSymbol::Component < ::string::LinearStringTerminatingSymbol, alphabet::Symbol, ::string::GeneralAlphabet >::valid ( const alphabet::Symbol & ) const { -} - -template < > -bool ::string::LinearStringTerminatingSymbol::Element < ::string::LinearStringTerminatingSymbol, alphabet::Symbol, ::string::TerminatingSymbol >::available ( const alphabet::Symbol & symbol ) const { - return static_cast < const ::string::LinearStringTerminatingSymbol * > ( this )->getAlphabet ( ).count ( symbol ); -} - -template < > -void ::string::LinearStringTerminatingSymbol::Element < ::string::LinearStringTerminatingSymbol, alphabet::Symbol, ::string::TerminatingSymbol >::valid ( const alphabet::Symbol & ) const { -} - -} /* namespace std */ - namespace alib { auto linearStringTerminatingSymbolParserRegister = xmlApi < string::String >::ParserRegister < string::LinearStringTerminatingSymbol > (); diff --git a/alib2data/src/string/LinearStringTerminatingSymbol.h b/alib2data/src/string/LinearStringTerminatingSymbol.h index b7d087f251b911dd657d5286fc8a72fa198b1c9f..e2f9ef56bae5ecd6f65944cb0db2453fb8134e7e 100644 --- a/alib2data/src/string/LinearStringTerminatingSymbol.h +++ b/alib2data/src/string/LinearStringTerminatingSymbol.h @@ -14,7 +14,7 @@ #include <vector> #include "../alphabet/Symbol.h" -#include <core/components.hpp> +#include <core/components2.hpp> namespace string { @@ -26,7 +26,7 @@ class TerminatingSymbol; * Represents regular expression parsed from the XML. Regular expression is stored * as a tree of LinearStringElement. */ -class LinearStringTerminatingSymbol : public StringBase, public std::Components < LinearStringTerminatingSymbol, alphabet::Symbol, std::tuple < GeneralAlphabet >, std::tuple < TerminatingSymbol > > { +class LinearStringTerminatingSymbol : public StringBase, public std::Components2 < LinearStringTerminatingSymbol, alphabet::Symbol, std::tuple < GeneralAlphabet >, std::tuple < TerminatingSymbol > > { std::vector < alphabet::Symbol > m_Data; public: @@ -92,4 +92,35 @@ public: } /* namespace string */ +namespace std { + +template < > +class ComponentConstraint2< ::string::LinearStringTerminatingSymbol, alphabet::Symbol, ::string::GeneralAlphabet > { +public: + static bool used ( const ::string::LinearStringTerminatingSymbol & string, const alphabet::Symbol & symbol ) { + const std::vector<alphabet::Symbol>& content = string.getContent ( ); + return std::find(content.begin(), content.end(), symbol) != content.end(); + } + + static bool available ( const ::string::LinearStringTerminatingSymbol &, const alphabet::Symbol & ) { + return true; + } + + static void valid ( const ::string::LinearStringTerminatingSymbol &, const alphabet::Symbol & ) { + } +}; + +template < > +class ElementConstraint2< ::string::LinearStringTerminatingSymbol, alphabet::Symbol, ::string::TerminatingSymbol > { +public: + static bool available ( const ::string::LinearStringTerminatingSymbol & string, const alphabet::Symbol & symbol ) { + return string.getAlphabet ( ).count ( symbol ); + } + + static void valid ( const ::string::LinearStringTerminatingSymbol &, const alphabet::Symbol & ) { + } +}; + +} /* namespace std */ + #endif /* LINEAR_STRING_TERMINATING_SYMBOL_H_ */