From 9103d09365114c776dbcd4c67f3271f8ee7194c6 Mon Sep 17 00:00:00 2001 From: Jan Travnicek <Jan.Travnicek@fit.cvut.cz> Date: Tue, 2 Aug 2016 08:11:54 +0200 Subject: [PATCH] update strings to components2 --- alib2data/src/string/CyclicString.cpp | 21 +---------- alib2data/src/string/CyclicString.h | 24 +++++++++++-- alib2data/src/string/Epsilon.cpp | 20 +---------- alib2data/src/string/Epsilon.h | 23 ++++++++++-- alib2data/src/string/LinearString.cpp | 21 +---------- alib2data/src/string/LinearString.h | 24 +++++++++++-- .../string/LinearStringTerminatingSymbol.cpp | 30 +--------------- .../string/LinearStringTerminatingSymbol.h | 35 +++++++++++++++++-- 8 files changed, 102 insertions(+), 96 deletions(-) diff --git a/alib2data/src/string/CyclicString.cpp b/alib2data/src/string/CyclicString.cpp index c40c2519dc..447759ae47 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 2dc7b101b2..907e97ca8c 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 6c88ae1802..c7022f7fa7 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 b173a22a01..ede29924e8 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 5b5fbc2e5d..3f87b65df4 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 13bd6c5d09..f38569014f 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 498803f88a..598b75188a 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 b7d087f251..e2f9ef56ba 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_ */ -- GitLab