diff --git a/alib2data/src/tree/RankedTreeBase.h b/alib2data/src/tree/RankedTreeBase.h index a0472bf939465681d51367114a42f5b1a9be0acd..a3a12129929c40c555765e5a338f2d8b9276ccdd 100644 --- a/alib2data/src/tree/RankedTreeBase.h +++ b/alib2data/src/tree/RankedTreeBase.h @@ -17,7 +17,7 @@ namespace tree { /** * Represents symbol in an alphabet. */ -class RankedTreeBase : public tree::TreeBase { +class RankedTreeBase : public TreeBase { public: virtual RankedTreeBase * clone ( ) const = 0; virtual RankedTreeBase * plunder ( ) && = 0; diff --git a/alib2data/src/tree/RankedTreeWrapper.cpp b/alib2data/src/tree/RankedTreeWrapper.cpp index e64fb3dfca9073c3ef6b51417e3c5c0617e5b2fb..1f6be4e6d253530c7ce51ce79b9b9a5667e350e6 100644 --- a/alib2data/src/tree/RankedTreeWrapper.cpp +++ b/alib2data/src/tree/RankedTreeWrapper.cpp @@ -22,6 +22,6 @@ void RankedTreeWrapper::extendAlphabet ( const std::set < alphabet::RankedSymbol namespace alib { -auto RankedTreeWrapperDeleter = xmlApi < tree::RankedTreeWrapper >::InputContextDeleter ( ); +auto RankedTreeWrapperDeleter = xmlApi < ::tree::RankedTreeWrapper >::InputContextDeleter ( ); } diff --git a/alib2data/src/tree/Tree.cpp b/alib2data/src/tree/Tree.cpp index c04c11839de86366d9627d4365102a3cdc0f7cdf..87cea9086cf4e4c7d5615fe7829461fd08ab61f6 100644 --- a/alib2data/src/tree/Tree.cpp +++ b/alib2data/src/tree/Tree.cpp @@ -10,6 +10,6 @@ namespace alib { -auto TreeDeleter = xmlApi < tree::Tree >::InputContextDeleter ( ); +auto TreeDeleter = xmlApi < ::tree::Tree >::InputContextDeleter ( ); } diff --git a/alib2data/src/tree/UnrankedTreeWrapper.cpp b/alib2data/src/tree/UnrankedTreeWrapper.cpp index 1e343f0f1267e81e1df45fa6be4d366b9232df48..1ec21ad52902b88f01248d3a54900465d2539112 100644 --- a/alib2data/src/tree/UnrankedTreeWrapper.cpp +++ b/alib2data/src/tree/UnrankedTreeWrapper.cpp @@ -22,6 +22,6 @@ void UnrankedTreeWrapper::extendAlphabet ( const std::set < alphabet::Symbol > & namespace alib { -auto UnrankedTreeWrapperDeleter = xmlApi < tree::UnrankedTreeWrapper >::InputContextDeleter ( ); +auto UnrankedTreeWrapperDeleter = xmlApi < ::tree::UnrankedTreeWrapper >::InputContextDeleter ( ); } diff --git a/alib2data/src/tree/ranked/PrefixRankedBarNonlinearPattern.cpp b/alib2data/src/tree/ranked/PrefixRankedBarNonlinearPattern.cpp index 25c8bb2ccb306573d3e174ec9973bd34f01d9ea1..ee9fd4085268a70c14b4edd82e6339990c13489e 100644 --- a/alib2data/src/tree/ranked/PrefixRankedBarNonlinearPattern.cpp +++ b/alib2data/src/tree/ranked/PrefixRankedBarNonlinearPattern.cpp @@ -196,15 +196,15 @@ void PrefixRankedBarNonlinearPattern::compose ( std::deque < sax::Token > & out namespace alib { -auto prefixRankedBarNonlinearPatternParserRegister = xmlApi < tree::Tree >::ParserRegister < tree::PrefixRankedBarNonlinearPattern > ( ); -auto prefixRankedBarNonlinearPatternParserRegister2 = xmlApi < tree::RankedTreeWrapper >::ParserRegister < tree::PrefixRankedBarNonlinearPattern > ( ); -auto prefixRankedBarNonlinearPatternParserRegister3 = xmlApi < alib::Object >::ParserRegister < tree::PrefixRankedBarNonlinearPattern > ( ); - -auto PrefixRankedBarNonlinearPatternFromRankedTree = castApi::CastRegister < tree::PrefixRankedBarNonlinearPattern, tree::RankedTree > ( ); -auto PrefixRankedBarNonlinearPatternFromRankedPattern = castApi::CastRegister < tree::PrefixRankedBarNonlinearPattern, tree::RankedPattern > ( ); -auto PrefixRankedBarNonlinearPatternFromRankedNonlinearPattern = castApi::CastRegister < tree::PrefixRankedBarNonlinearPattern, tree::RankedNonlinearPattern > ( ); -auto PrefixRankedBarNonlinearPatternFromPrefixRankedBarTree = castApi::CastRegister < tree::PrefixRankedBarNonlinearPattern, tree::PrefixRankedBarTree > ( ); -auto PrefixRankedBarNonlinearPatternFromPrefixRankedBarPattern = castApi::CastRegister < tree::PrefixRankedBarNonlinearPattern, tree::PrefixRankedBarPattern > ( ); -auto PrefixRankedBarNonlinearPatternCastBinder = castApi::CastPoolStringBinder < tree::PrefixRankedBarNonlinearPattern > ( tree::PrefixRankedBarNonlinearPattern::getXmlTagName ( ) ); +auto prefixRankedBarNonlinearPatternParserRegister = xmlApi < ::tree::Tree >::ParserRegister < ::tree::PrefixRankedBarNonlinearPattern > ( ); +auto prefixRankedBarNonlinearPatternParserRegister2 = xmlApi < ::tree::RankedTreeWrapper >::ParserRegister < ::tree::PrefixRankedBarNonlinearPattern > ( ); +auto prefixRankedBarNonlinearPatternParserRegister3 = xmlApi < alib::Object >::ParserRegister < ::tree::PrefixRankedBarNonlinearPattern > ( ); + +auto PrefixRankedBarNonlinearPatternFromRankedTree = castApi::CastRegister < ::tree::PrefixRankedBarNonlinearPattern, ::tree::RankedTree > ( ); +auto PrefixRankedBarNonlinearPatternFromRankedPattern = castApi::CastRegister < ::tree::PrefixRankedBarNonlinearPattern, ::tree::RankedPattern > ( ); +auto PrefixRankedBarNonlinearPatternFromRankedNonlinearPattern = castApi::CastRegister < ::tree::PrefixRankedBarNonlinearPattern, ::tree::RankedNonlinearPattern > ( ); +auto PrefixRankedBarNonlinearPatternFromPrefixRankedBarTree = castApi::CastRegister < ::tree::PrefixRankedBarNonlinearPattern, ::tree::PrefixRankedBarTree > ( ); +auto PrefixRankedBarNonlinearPatternFromPrefixRankedBarPattern = castApi::CastRegister < ::tree::PrefixRankedBarNonlinearPattern, ::tree::PrefixRankedBarPattern > ( ); +auto PrefixRankedBarNonlinearPatternCastBinder = castApi::CastPoolStringBinder < ::tree::PrefixRankedBarNonlinearPattern > ( ::tree::PrefixRankedBarNonlinearPattern::getXmlTagName ( ) ); } /* namespace alib */ diff --git a/alib2data/src/tree/ranked/PrefixRankedBarNonlinearPattern.h b/alib2data/src/tree/ranked/PrefixRankedBarNonlinearPattern.h index 2b414c0ba73e1a11f7b96fdf086ff79e6d887a20..e94dc505d2a92354e5ee495d67eb53fe365a4f16 100644 --- a/alib2data/src/tree/ranked/PrefixRankedBarNonlinearPattern.h +++ b/alib2data/src/tree/ranked/PrefixRankedBarNonlinearPattern.h @@ -122,85 +122,85 @@ public: namespace std { template < > -class ComponentConstraint< tree::PrefixRankedBarNonlinearPattern, alphabet::RankedSymbol, tree::GeneralAlphabet > { +class ComponentConstraint< ::tree::PrefixRankedBarNonlinearPattern, alphabet::RankedSymbol, ::tree::GeneralAlphabet > { public: - static bool used ( const tree::PrefixRankedBarNonlinearPattern & pattern, const alphabet::RankedSymbol & symbol ) { + static bool used ( const ::tree::PrefixRankedBarNonlinearPattern & pattern, const alphabet::RankedSymbol & symbol ) { const std::vector < alphabet::RankedSymbol > & content = pattern.getContent ( ); - return std::find ( content.begin ( ), content.end ( ), symbol ) != content.end ( ) || pattern.accessElement < tree::VariablesBarSymbol > ( ).get ( ) == symbol || pattern.accessComponent < tree::BarSymbols > ( ).get ( ).count ( symbol ) || pattern.accessElement < tree::SubtreeWildcard > ( ).get ( ) == symbol; + return std::find ( content.begin ( ), content.end ( ), symbol ) != content.end ( ) || pattern.accessElement < ::tree::VariablesBarSymbol > ( ).get ( ) == symbol || pattern.accessComponent < ::tree::BarSymbols > ( ).get ( ).count ( symbol ) || pattern.accessElement < ::tree::SubtreeWildcard > ( ).get ( ) == symbol; } - static bool available ( const tree::PrefixRankedBarNonlinearPattern &, const alphabet::RankedSymbol & ) { + static bool available ( const ::tree::PrefixRankedBarNonlinearPattern &, const alphabet::RankedSymbol & ) { return true; } - static void valid ( const tree::PrefixRankedBarNonlinearPattern &, const alphabet::RankedSymbol & ) { + static void valid ( const ::tree::PrefixRankedBarNonlinearPattern &, const alphabet::RankedSymbol & ) { } }; template < > -class ComponentConstraint< tree::PrefixRankedBarNonlinearPattern, alphabet::RankedSymbol, tree::BarSymbols > { +class ComponentConstraint< ::tree::PrefixRankedBarNonlinearPattern, alphabet::RankedSymbol, ::tree::BarSymbols > { public: - static bool used ( const tree::PrefixRankedBarNonlinearPattern & pattern, const alphabet::RankedSymbol & symbol ) { + static bool used ( const ::tree::PrefixRankedBarNonlinearPattern & pattern, const alphabet::RankedSymbol & symbol ) { const std::vector < alphabet::RankedSymbol > & content = pattern.getContent ( ); - return std::find ( content.begin ( ), content.end ( ), symbol ) != content.end ( ) || pattern.accessElement < tree::VariablesBarSymbol > ( ).get ( ) == symbol; + return std::find ( content.begin ( ), content.end ( ), symbol ) != content.end ( ) || pattern.accessElement < ::tree::VariablesBarSymbol > ( ).get ( ) == symbol; } - static bool available ( const tree::PrefixRankedBarNonlinearPattern & pattern, const alphabet::RankedSymbol & symbol ) { - return pattern.accessComponent < tree::GeneralAlphabet > ( ).get ( ).count ( symbol ); + static bool available ( const ::tree::PrefixRankedBarNonlinearPattern & pattern, const alphabet::RankedSymbol & symbol ) { + return pattern.accessComponent < ::tree::GeneralAlphabet > ( ).get ( ).count ( symbol ); } - static void valid ( const tree::PrefixRankedBarNonlinearPattern &, const alphabet::RankedSymbol & ) { + static void valid ( const ::tree::PrefixRankedBarNonlinearPattern &, const alphabet::RankedSymbol & ) { } }; template < > -class ComponentConstraint< tree::PrefixRankedBarNonlinearPattern, alphabet::RankedSymbol, tree::NonlinearAlphabet > { +class ComponentConstraint< ::tree::PrefixRankedBarNonlinearPattern, alphabet::RankedSymbol, ::tree::NonlinearAlphabet > { public: - static bool used ( const tree::PrefixRankedBarNonlinearPattern &, const alphabet::RankedSymbol & ) { + static bool used ( const ::tree::PrefixRankedBarNonlinearPattern &, const alphabet::RankedSymbol & ) { return false; } - static bool available ( const tree::PrefixRankedBarNonlinearPattern & pattern, const alphabet::RankedSymbol & symbol ) { - return pattern.accessComponent < tree::GeneralAlphabet > ( ).get ( ).count ( symbol ); + static bool available ( const ::tree::PrefixRankedBarNonlinearPattern & pattern, const alphabet::RankedSymbol & symbol ) { + return pattern.accessComponent < ::tree::GeneralAlphabet > ( ).get ( ).count ( symbol ); } - static void valid ( const tree::PrefixRankedBarNonlinearPattern & pattern, const alphabet::RankedSymbol & symbol) { + static void valid ( const ::tree::PrefixRankedBarNonlinearPattern & pattern, const alphabet::RankedSymbol & symbol) { if ( symbol.getRank ( ).getData ( ) != 0 ) - throw tree::TreeException ( "SubtreeWildcard symbol has nonzero arity" ); + throw ::tree::TreeException ( "SubtreeWildcard symbol has nonzero arity" ); - if ( pattern.accessElement < tree::SubtreeWildcard > ( ).get ( ) == symbol ) - throw tree::TreeException ( "Symbol " + std::to_string ( symbol ) + "cannot be set as nonlinear variable since it is already subtree wildcard" ); + if ( pattern.accessElement < ::tree::SubtreeWildcard > ( ).get ( ) == symbol ) + throw ::tree::TreeException ( "Symbol " + std::to_string ( symbol ) + "cannot be set as nonlinear variable since it is already subtree wildcard" ); } }; template < > -class ElementConstraint< tree::PrefixRankedBarNonlinearPattern, alphabet::RankedSymbol, tree::SubtreeWildcard > { +class ElementConstraint< ::tree::PrefixRankedBarNonlinearPattern, alphabet::RankedSymbol, ::tree::SubtreeWildcard > { public: - static bool available ( const tree::PrefixRankedBarNonlinearPattern & pattern, const alphabet::RankedSymbol & symbol ) { - return pattern.accessComponent < tree::GeneralAlphabet > ( ).get ( ).count ( symbol ); + static bool available ( const ::tree::PrefixRankedBarNonlinearPattern & pattern, const alphabet::RankedSymbol & symbol ) { + return pattern.accessComponent < ::tree::GeneralAlphabet > ( ).get ( ).count ( symbol ); } - static void valid ( const tree::PrefixRankedBarNonlinearPattern & pattern, const alphabet::RankedSymbol & symbol) { + static void valid ( const ::tree::PrefixRankedBarNonlinearPattern & pattern, const alphabet::RankedSymbol & symbol) { if ( symbol.getRank ( ).getData ( ) != 0 ) - throw tree::TreeException ( "SubtreeWildcard symbol has nonzero arity" ); + throw ::tree::TreeException ( "SubtreeWildcard symbol has nonzero arity" ); - if ( pattern.accessComponent < tree::NonlinearAlphabet > ( ).get ( ).count ( symbol ) ) - throw tree::TreeException ( "Symbol " + std::to_string ( symbol ) + "cannot be set as subtree wildcard since it is already nonlinear variable" ); + if ( pattern.accessComponent < ::tree::NonlinearAlphabet > ( ).get ( ).count ( symbol ) ) + throw ::tree::TreeException ( "Symbol " + std::to_string ( symbol ) + "cannot be set as subtree wildcard since it is already nonlinear variable" ); } }; template < > -class ElementConstraint< tree::PrefixRankedBarNonlinearPattern, alphabet::RankedSymbol, tree::VariablesBarSymbol > { +class ElementConstraint< ::tree::PrefixRankedBarNonlinearPattern, alphabet::RankedSymbol, ::tree::VariablesBarSymbol > { public: - static bool available ( const tree::PrefixRankedBarNonlinearPattern & pattern, const alphabet::RankedSymbol & symbol ) { - return pattern.accessComponent < tree::BarSymbols > ( ).get ( ).count ( symbol ); + static bool available ( const ::tree::PrefixRankedBarNonlinearPattern & pattern, const alphabet::RankedSymbol & symbol ) { + return pattern.accessComponent < ::tree::BarSymbols > ( ).get ( ).count ( symbol ); } - static void valid ( const tree::PrefixRankedBarNonlinearPattern &, const alphabet::RankedSymbol & symbol) { + static void valid ( const ::tree::PrefixRankedBarNonlinearPattern &, const alphabet::RankedSymbol & symbol) { if ( symbol.getRank ( ).getData ( ) != 0 ) - throw tree::TreeException ( "VariablesBarSymbol has nonzero arity" ); + throw ::tree::TreeException ( "VariablesBarSymbol has nonzero arity" ); } }; diff --git a/alib2data/src/tree/ranked/PrefixRankedBarPattern.cpp b/alib2data/src/tree/ranked/PrefixRankedBarPattern.cpp index 24ea1e0829f5b120afa7455ea4a41095e9a0429f..709f834cb79d9c290d842ab142305dab53d9046d 100644 --- a/alib2data/src/tree/ranked/PrefixRankedBarPattern.cpp +++ b/alib2data/src/tree/ranked/PrefixRankedBarPattern.cpp @@ -175,12 +175,12 @@ void PrefixRankedBarPattern::compose ( std::deque < sax::Token > & out ) const { namespace alib { -auto prefixRankedBarPatternParserRegister = xmlApi < tree::Tree >::ParserRegister < tree::PrefixRankedBarPattern > (); -auto prefixRankedBarPatternParserRegister2 = xmlApi < tree::RankedTreeWrapper >::ParserRegister < tree::PrefixRankedBarPattern > (); -auto prefixRankedBarPatternParserRegister3 = xmlApi < alib::Object >::ParserRegister < tree::PrefixRankedBarPattern > (); +auto prefixRankedBarPatternParserRegister = xmlApi < ::tree::Tree >::ParserRegister < ::tree::PrefixRankedBarPattern > (); +auto prefixRankedBarPatternParserRegister2 = xmlApi < ::tree::RankedTreeWrapper >::ParserRegister < ::tree::PrefixRankedBarPattern > (); +auto prefixRankedBarPatternParserRegister3 = xmlApi < alib::Object >::ParserRegister < ::tree::PrefixRankedBarPattern > (); -auto PrefixRankedBarPatternFromRankedPattern = castApi::CastRegister < tree::PrefixRankedBarPattern, tree::RankedPattern > ( ); -auto PrefixRankedBarPatternFromPrefixRankedBarTree = castApi::CastRegister < tree::PrefixRankedBarPattern, tree::PrefixRankedBarTree > ( ); -auto PrefixRankedBarPatternCastBinder = castApi::CastPoolStringBinder < tree::PrefixRankedBarPattern > ( tree::PrefixRankedBarPattern::getXmlTagName() ); +auto PrefixRankedBarPatternFromRankedPattern = castApi::CastRegister < ::tree::PrefixRankedBarPattern, ::tree::RankedPattern > ( ); +auto PrefixRankedBarPatternFromPrefixRankedBarTree = castApi::CastRegister < ::tree::PrefixRankedBarPattern, ::tree::PrefixRankedBarTree > ( ); +auto PrefixRankedBarPatternCastBinder = castApi::CastPoolStringBinder < ::tree::PrefixRankedBarPattern > ( ::tree::PrefixRankedBarPattern::getXmlTagName() ); } /* namespace alib */ diff --git a/alib2data/src/tree/ranked/PrefixRankedBarPattern.h b/alib2data/src/tree/ranked/PrefixRankedBarPattern.h index 227dccd27cf6e130f13944c924a9aa3ce6e8169f..c04a0e02d6d11b751c0f67b0e7bc76b724c0ddbe 100644 --- a/alib2data/src/tree/ranked/PrefixRankedBarPattern.h +++ b/alib2data/src/tree/ranked/PrefixRankedBarPattern.h @@ -108,62 +108,62 @@ public: namespace std { template < > -class ComponentConstraint< tree::PrefixRankedBarPattern, alphabet::RankedSymbol, tree::GeneralAlphabet > { +class ComponentConstraint< ::tree::PrefixRankedBarPattern, alphabet::RankedSymbol, ::tree::GeneralAlphabet > { public: - static bool used ( const tree::PrefixRankedBarPattern & pattern, const alphabet::RankedSymbol & symbol ) { + static bool used ( const ::tree::PrefixRankedBarPattern & pattern, const alphabet::RankedSymbol & symbol ) { const std::vector < alphabet::RankedSymbol > & content = pattern.getContent ( ); - return std::find ( content.begin ( ), content.end ( ), symbol ) != content.end ( ) || pattern.accessElement < tree::VariablesBarSymbol > ( ).get ( ) == symbol || pattern.accessComponent < tree::BarSymbols > ( ).get ( ).count ( symbol ) || pattern.accessElement < tree::SubtreeWildcard > ( ).get ( ) == symbol; + return std::find ( content.begin ( ), content.end ( ), symbol ) != content.end ( ) || pattern.accessElement < ::tree::VariablesBarSymbol > ( ).get ( ) == symbol || pattern.accessComponent < ::tree::BarSymbols > ( ).get ( ).count ( symbol ) || pattern.accessElement < ::tree::SubtreeWildcard > ( ).get ( ) == symbol; } - static bool available ( const tree::PrefixRankedBarPattern &, const alphabet::RankedSymbol & ) { + static bool available ( const ::tree::PrefixRankedBarPattern &, const alphabet::RankedSymbol & ) { return true; } - static void valid ( const tree::PrefixRankedBarPattern &, const alphabet::RankedSymbol & ) { + static void valid ( const ::tree::PrefixRankedBarPattern &, const alphabet::RankedSymbol & ) { } }; template < > -class ComponentConstraint< tree::PrefixRankedBarPattern, alphabet::RankedSymbol, tree::BarSymbols > { +class ComponentConstraint< ::tree::PrefixRankedBarPattern, alphabet::RankedSymbol, ::tree::BarSymbols > { public: - static bool used ( const tree::PrefixRankedBarPattern & pattern, const alphabet::RankedSymbol & symbol ) { + static bool used ( const ::tree::PrefixRankedBarPattern & pattern, const alphabet::RankedSymbol & symbol ) { const std::vector < alphabet::RankedSymbol > & content = pattern.getContent ( ); - return std::find ( content.begin ( ), content.end ( ), symbol ) != content.end ( ) || pattern.accessElement < tree::VariablesBarSymbol > ( ).get ( ) == symbol; + return std::find ( content.begin ( ), content.end ( ), symbol ) != content.end ( ) || pattern.accessElement < ::tree::VariablesBarSymbol > ( ).get ( ) == symbol; } - static bool available ( const tree::PrefixRankedBarPattern & pattern, const alphabet::RankedSymbol & symbol ) { - return pattern.accessComponent < tree::GeneralAlphabet > ( ).get ( ).count ( symbol ); + static bool available ( const ::tree::PrefixRankedBarPattern & pattern, const alphabet::RankedSymbol & symbol ) { + return pattern.accessComponent < ::tree::GeneralAlphabet > ( ).get ( ).count ( symbol ); } - static void valid ( const tree::PrefixRankedBarPattern &, const alphabet::RankedSymbol & ) { + static void valid ( const ::tree::PrefixRankedBarPattern &, const alphabet::RankedSymbol & ) { } }; template < > -class ElementConstraint< tree::PrefixRankedBarPattern, alphabet::RankedSymbol, tree::SubtreeWildcard > { +class ElementConstraint< ::tree::PrefixRankedBarPattern, alphabet::RankedSymbol, ::tree::SubtreeWildcard > { public: - static bool available ( const tree::PrefixRankedBarPattern & pattern, const alphabet::RankedSymbol & symbol ) { - return pattern.accessComponent < tree::GeneralAlphabet > ( ).get ( ).count ( symbol ); + static bool available ( const ::tree::PrefixRankedBarPattern & pattern, const alphabet::RankedSymbol & symbol ) { + return pattern.accessComponent < ::tree::GeneralAlphabet > ( ).get ( ).count ( symbol ); } - static void valid ( const tree::PrefixRankedBarPattern &, const alphabet::RankedSymbol & symbol) { + static void valid ( const ::tree::PrefixRankedBarPattern &, const alphabet::RankedSymbol & symbol) { if( symbol.getRank().getData() != 0 ) - throw tree::TreeException ( "SubtreeWildcard symbol has nonzero arity" ); + throw ::tree::TreeException ( "SubtreeWildcard symbol has nonzero arity" ); } }; template < > -class ElementConstraint< tree::PrefixRankedBarPattern, alphabet::RankedSymbol, tree::VariablesBarSymbol > { +class ElementConstraint< ::tree::PrefixRankedBarPattern, alphabet::RankedSymbol, ::tree::VariablesBarSymbol > { public: - static bool available ( const tree::PrefixRankedBarPattern & pattern, const alphabet::RankedSymbol & symbol ) { - return pattern.accessComponent < tree::BarSymbols > ( ).get ( ).count ( symbol ); + static bool available ( const ::tree::PrefixRankedBarPattern & pattern, const alphabet::RankedSymbol & symbol ) { + return pattern.accessComponent < ::tree::BarSymbols > ( ).get ( ).count ( symbol ); } - static void valid ( const tree::PrefixRankedBarPattern &, const alphabet::RankedSymbol & symbol) { + static void valid ( const ::tree::PrefixRankedBarPattern &, const alphabet::RankedSymbol & symbol) { if( symbol.getRank().getData() != 0 ) - throw tree::TreeException ( "VariablesBarSymbol has nonzero arity" ); + throw ::tree::TreeException ( "VariablesBarSymbol has nonzero arity" ); } }; diff --git a/alib2data/src/tree/ranked/PrefixRankedBarTree.cpp b/alib2data/src/tree/ranked/PrefixRankedBarTree.cpp index e9b7bc2faba7f29003ccfed2c84582f9bc71f29e..47c8af409ab9475e3873ee08ce3c3b1e2e660ad2 100644 --- a/alib2data/src/tree/ranked/PrefixRankedBarTree.cpp +++ b/alib2data/src/tree/ranked/PrefixRankedBarTree.cpp @@ -155,11 +155,11 @@ void PrefixRankedBarTree::compose ( std::deque < sax::Token > & out ) const { namespace alib { -auto prefixRankedBarTreeParserRegister = xmlApi < tree::Tree >::ParserRegister < tree::PrefixRankedBarTree > (); -auto prefixRankedBarTreeParserRegister2 = xmlApi < tree::RankedTreeWrapper >::ParserRegister < tree::PrefixRankedBarTree > (); -auto prefixRankedBarTreeParserRegister3 = xmlApi < alib::Object >::ParserRegister < tree::PrefixRankedBarTree > (); +auto prefixRankedBarTreeParserRegister = xmlApi < ::tree::Tree >::ParserRegister < ::tree::PrefixRankedBarTree > (); +auto prefixRankedBarTreeParserRegister2 = xmlApi < ::tree::RankedTreeWrapper >::ParserRegister < ::tree::PrefixRankedBarTree > (); +auto prefixRankedBarTreeParserRegister3 = xmlApi < alib::Object >::ParserRegister < ::tree::PrefixRankedBarTree > (); -auto PrefixRankedBarTreeFromRankedTree = castApi::CastRegister < tree::PrefixRankedBarTree, tree::RankedTree > ( ); -auto PrefixRankedBarTreeCastBinder = castApi::CastPoolStringBinder < tree::PrefixRankedBarTree > ( tree::PrefixRankedBarTree::getXmlTagName() ); +auto PrefixRankedBarTreeFromRankedTree = castApi::CastRegister < ::tree::PrefixRankedBarTree, ::tree::RankedTree > ( ); +auto PrefixRankedBarTreeCastBinder = castApi::CastPoolStringBinder < ::tree::PrefixRankedBarTree > ( ::tree::PrefixRankedBarTree::getXmlTagName() ); } /* namespace alib */ diff --git a/alib2data/src/tree/ranked/PrefixRankedBarTree.h b/alib2data/src/tree/ranked/PrefixRankedBarTree.h index a204602cb42f3ba86c33d3d7ad21dfb29c39915b..ee28dddb8a8de30bd51c1436c6f84309abe209ff 100644 --- a/alib2data/src/tree/ranked/PrefixRankedBarTree.h +++ b/alib2data/src/tree/ranked/PrefixRankedBarTree.h @@ -96,36 +96,36 @@ public: namespace std { template < > -class ComponentConstraint< tree::PrefixRankedBarTree, alphabet::RankedSymbol, tree::GeneralAlphabet > { +class ComponentConstraint< ::tree::PrefixRankedBarTree, alphabet::RankedSymbol, ::tree::GeneralAlphabet > { public: - static bool used ( const tree::PrefixRankedBarTree & tree, const alphabet::RankedSymbol & symbol ) { + static bool used ( const ::tree::PrefixRankedBarTree & tree, const alphabet::RankedSymbol & symbol ) { const std::vector < alphabet::RankedSymbol > & content = tree.getContent ( ); return std::find ( content.begin ( ), content.end ( ), symbol ) != content.end ( ); } - static bool available ( const tree::PrefixRankedBarTree &, const alphabet::RankedSymbol & ) { + static bool available ( const ::tree::PrefixRankedBarTree &, const alphabet::RankedSymbol & ) { return true; } - static void valid ( const tree::PrefixRankedBarTree &, const alphabet::RankedSymbol & ) { + static void valid ( const ::tree::PrefixRankedBarTree &, const alphabet::RankedSymbol & ) { } }; template < > -class ComponentConstraint< tree::PrefixRankedBarTree, alphabet::RankedSymbol, tree::BarSymbols > { +class ComponentConstraint< ::tree::PrefixRankedBarTree, alphabet::RankedSymbol, ::tree::BarSymbols > { public: - static bool used ( const tree::PrefixRankedBarTree & tree, const alphabet::RankedSymbol & symbol ) { + static bool used ( const ::tree::PrefixRankedBarTree & tree, const alphabet::RankedSymbol & symbol ) { const std::vector < alphabet::RankedSymbol > & content = tree.getContent ( ); return std::find ( content.begin ( ), content.end ( ), symbol ) != content.end ( ); } - static bool available ( const tree::PrefixRankedBarTree & tree, const alphabet::RankedSymbol & symbol ) { - return tree.accessComponent < tree::GeneralAlphabet > ( ).get ( ).count ( symbol ); + static bool available ( const ::tree::PrefixRankedBarTree & tree, const alphabet::RankedSymbol & symbol ) { + return tree.accessComponent < ::tree::GeneralAlphabet > ( ).get ( ).count ( symbol ); } - static void valid ( const tree::PrefixRankedBarTree &, const alphabet::RankedSymbol & ) { + static void valid ( const ::tree::PrefixRankedBarTree &, const alphabet::RankedSymbol & ) { } }; diff --git a/alib2data/src/tree/ranked/PrefixRankedNonlinearPattern.cpp b/alib2data/src/tree/ranked/PrefixRankedNonlinearPattern.cpp index 5b638838a17d94fb365c32bc72c09bd3813d9b4c..3cf25ebf209fc7e715179a36fa6d9e11f46be2a8 100644 --- a/alib2data/src/tree/ranked/PrefixRankedNonlinearPattern.cpp +++ b/alib2data/src/tree/ranked/PrefixRankedNonlinearPattern.cpp @@ -170,15 +170,15 @@ void PrefixRankedNonlinearPattern::compose ( std::deque < sax::Token > & out ) c namespace alib { -auto prefixRankedNonlinearPatternParserRegister = xmlApi < tree::Tree >::ParserRegister < tree::PrefixRankedNonlinearPattern > ( ); -auto prefixRankedNonlinearPatternParserRegister2 = xmlApi < tree::RankedTreeWrapper >::ParserRegister < tree::PrefixRankedNonlinearPattern > ( ); -auto prefixRankedNonlinearPatternParserRegister3 = xmlApi < alib::Object >::ParserRegister < tree::PrefixRankedNonlinearPattern > ( ); - -auto PrefixRankedNonlinearPatternFromRankedTree = castApi::CastRegister < tree::PrefixRankedNonlinearPattern, tree::RankedTree > ( ); -auto PrefixRankedNonlinearPatternFromRankedPattern = castApi::CastRegister < tree::PrefixRankedNonlinearPattern, tree::RankedPattern > ( ); -auto PrefixRankedNonlinearPatternFromRankedNonlinearPattern = castApi::CastRegister < tree::PrefixRankedNonlinearPattern, tree::RankedNonlinearPattern > ( ); -auto PrefixRankedNonlinearPatternFromPrefixRankedTree = castApi::CastRegister < tree::PrefixRankedNonlinearPattern, tree::PrefixRankedTree > ( ); -auto PrefixRankedNonlinearPatternFromPrefixRankedPattern = castApi::CastRegister < tree::PrefixRankedNonlinearPattern, tree::PrefixRankedPattern > ( ); -auto PrefixRankedNonlinearPatternCastBinder = castApi::CastPoolStringBinder < tree::PrefixRankedNonlinearPattern > ( tree::PrefixRankedNonlinearPattern::getXmlTagName ( ) ); +auto prefixRankedNonlinearPatternParserRegister = xmlApi < ::tree::Tree >::ParserRegister < ::tree::PrefixRankedNonlinearPattern > ( ); +auto prefixRankedNonlinearPatternParserRegister2 = xmlApi < ::tree::RankedTreeWrapper >::ParserRegister < ::tree::PrefixRankedNonlinearPattern > ( ); +auto prefixRankedNonlinearPatternParserRegister3 = xmlApi < alib::Object >::ParserRegister < ::tree::PrefixRankedNonlinearPattern > ( ); + +auto PrefixRankedNonlinearPatternFromRankedTree = castApi::CastRegister < ::tree::PrefixRankedNonlinearPattern, ::tree::RankedTree > ( ); +auto PrefixRankedNonlinearPatternFromRankedPattern = castApi::CastRegister < ::tree::PrefixRankedNonlinearPattern, ::tree::RankedPattern > ( ); +auto PrefixRankedNonlinearPatternFromRankedNonlinearPattern = castApi::CastRegister < ::tree::PrefixRankedNonlinearPattern, ::tree::RankedNonlinearPattern > ( ); +auto PrefixRankedNonlinearPatternFromPrefixRankedTree = castApi::CastRegister < ::tree::PrefixRankedNonlinearPattern, ::tree::PrefixRankedTree > ( ); +auto PrefixRankedNonlinearPatternFromPrefixRankedPattern = castApi::CastRegister < ::tree::PrefixRankedNonlinearPattern, ::tree::PrefixRankedPattern > ( ); +auto PrefixRankedNonlinearPatternCastBinder = castApi::CastPoolStringBinder < ::tree::PrefixRankedNonlinearPattern > ( ::tree::PrefixRankedNonlinearPattern::getXmlTagName ( ) ); } /* namespace alib */ diff --git a/alib2data/src/tree/ranked/PrefixRankedNonlinearPattern.h b/alib2data/src/tree/ranked/PrefixRankedNonlinearPattern.h index 10d366c47f000e6dc3e1a5f27826d167a67d3bf5..d98759cf3c93735d5bbe5163fac5e8685dce1d9c 100644 --- a/alib2data/src/tree/ranked/PrefixRankedNonlinearPattern.h +++ b/alib2data/src/tree/ranked/PrefixRankedNonlinearPattern.h @@ -110,55 +110,55 @@ public: namespace std { template < > -class ComponentConstraint< tree::PrefixRankedNonlinearPattern, alphabet::RankedSymbol, tree::GeneralAlphabet > { +class ComponentConstraint< ::tree::PrefixRankedNonlinearPattern, alphabet::RankedSymbol, ::tree::GeneralAlphabet > { public: - static bool used ( const tree::PrefixRankedNonlinearPattern & pattern, const alphabet::RankedSymbol & symbol ) { + static bool used ( const ::tree::PrefixRankedNonlinearPattern & pattern, const alphabet::RankedSymbol & symbol ) { const std::vector < alphabet::RankedSymbol > & content = pattern.getContent ( ); - return std::find ( content.begin ( ), content.end ( ), symbol ) != content.end ( ) || pattern.accessElement < tree::SubtreeWildcard > ( ).get ( ) == symbol; + return std::find ( content.begin ( ), content.end ( ), symbol ) != content.end ( ) || pattern.accessElement < ::tree::SubtreeWildcard > ( ).get ( ) == symbol; } - static bool available ( const tree::PrefixRankedNonlinearPattern &, const alphabet::RankedSymbol & ) { + static bool available ( const ::tree::PrefixRankedNonlinearPattern &, const alphabet::RankedSymbol & ) { return true; } - static void valid ( const tree::PrefixRankedNonlinearPattern &, const alphabet::RankedSymbol & ) { + static void valid ( const ::tree::PrefixRankedNonlinearPattern &, const alphabet::RankedSymbol & ) { } }; template < > -class ComponentConstraint< tree::PrefixRankedNonlinearPattern, alphabet::RankedSymbol, tree::NonlinearAlphabet > { +class ComponentConstraint< ::tree::PrefixRankedNonlinearPattern, alphabet::RankedSymbol, ::tree::NonlinearAlphabet > { public: - static bool used ( const tree::PrefixRankedNonlinearPattern &, const alphabet::RankedSymbol & ) { + static bool used ( const ::tree::PrefixRankedNonlinearPattern &, const alphabet::RankedSymbol & ) { return false; } - static bool available ( const tree::PrefixRankedNonlinearPattern & pattern, const alphabet::RankedSymbol & symbol ) { - return pattern.accessComponent < tree::GeneralAlphabet > ( ).get ( ).count ( symbol ); + static bool available ( const ::tree::PrefixRankedNonlinearPattern & pattern, const alphabet::RankedSymbol & symbol ) { + return pattern.accessComponent < ::tree::GeneralAlphabet > ( ).get ( ).count ( symbol ); } - static void valid ( const tree::PrefixRankedNonlinearPattern & pattern, const alphabet::RankedSymbol & symbol) { + static void valid ( const ::tree::PrefixRankedNonlinearPattern & pattern, const alphabet::RankedSymbol & symbol) { if ( symbol.getRank ( ).getData ( ) != 0 ) - throw tree::TreeException ( "SubtreeWildcard symbol has nonzero arity" ); + throw ::tree::TreeException ( "SubtreeWildcard symbol has nonzero arity" ); - if ( pattern.accessElement < tree::SubtreeWildcard > ( ).get ( ) == symbol ) - throw tree::TreeException ( "Symbol " + std::to_string ( symbol ) + "cannot be set as nonlinear variable since it is already subtree wildcard" ); + if ( pattern.accessElement < ::tree::SubtreeWildcard > ( ).get ( ) == symbol ) + throw ::tree::TreeException ( "Symbol " + std::to_string ( symbol ) + "cannot be set as nonlinear variable since it is already subtree wildcard" ); } }; template < > -class ElementConstraint< tree::PrefixRankedNonlinearPattern, alphabet::RankedSymbol, tree::SubtreeWildcard > { +class ElementConstraint< ::tree::PrefixRankedNonlinearPattern, alphabet::RankedSymbol, ::tree::SubtreeWildcard > { public: - static bool available ( const tree::PrefixRankedNonlinearPattern & pattern, const alphabet::RankedSymbol & symbol ) { - return pattern.accessComponent < tree::GeneralAlphabet > ( ).get ( ).count ( symbol ); + static bool available ( const ::tree::PrefixRankedNonlinearPattern & pattern, const alphabet::RankedSymbol & symbol ) { + return pattern.accessComponent < ::tree::GeneralAlphabet > ( ).get ( ).count ( symbol ); } - static void valid ( const tree::PrefixRankedNonlinearPattern & pattern, const alphabet::RankedSymbol & symbol) { + static void valid ( const ::tree::PrefixRankedNonlinearPattern & pattern, const alphabet::RankedSymbol & symbol) { if ( symbol.getRank ( ).getData ( ) != 0 ) - throw tree::TreeException ( "SubtreeWildcard symbol has nonzero arity" ); + throw ::tree::TreeException ( "SubtreeWildcard symbol has nonzero arity" ); - if ( pattern.accessComponent < tree::NonlinearAlphabet > ( ).get ( ).count ( symbol ) ) - throw tree::TreeException ( "Symbol " + std::to_string ( symbol ) + "cannot be set as subtree wildcard since it is already nonlinear variable" ); + if ( pattern.accessComponent < ::tree::NonlinearAlphabet > ( ).get ( ).count ( symbol ) ) + throw ::tree::TreeException ( "Symbol " + std::to_string ( symbol ) + "cannot be set as subtree wildcard since it is already nonlinear variable" ); } }; diff --git a/alib2data/src/tree/ranked/PrefixRankedPattern.cpp b/alib2data/src/tree/ranked/PrefixRankedPattern.cpp index 0bf3ed930e096c991d857eaba9c66e954b5275ec..d47030c719bc9b8dc0ff77c93539c2f9fce51394 100644 --- a/alib2data/src/tree/ranked/PrefixRankedPattern.cpp +++ b/alib2data/src/tree/ranked/PrefixRankedPattern.cpp @@ -148,11 +148,11 @@ void PrefixRankedPattern::compose ( std::deque < sax::Token > & out ) const { namespace alib { -auto prefixRankedPatternParserRegister = xmlApi < tree::Tree >::ParserRegister < tree::PrefixRankedPattern > (); -auto prefixRankedPatternParserRegister2 = xmlApi < tree::RankedTreeWrapper >::ParserRegister < tree::PrefixRankedPattern > (); -auto prefixRankedPatternParserRegister3 = xmlApi < alib::Object >::ParserRegister < tree::PrefixRankedPattern > (); +auto prefixRankedPatternParserRegister = xmlApi < ::tree::Tree >::ParserRegister < ::tree::PrefixRankedPattern > (); +auto prefixRankedPatternParserRegister2 = xmlApi < ::tree::RankedTreeWrapper >::ParserRegister < ::tree::PrefixRankedPattern > (); +auto prefixRankedPatternParserRegister3 = xmlApi < alib::Object >::ParserRegister < ::tree::PrefixRankedPattern > (); -auto PrefixRankedPatternFromRankedPattern = castApi::CastRegister < tree::PrefixRankedPattern, tree::RankedPattern > ( ); -auto PrefixRankedPatternCastBinder = castApi::CastPoolStringBinder < tree::PrefixRankedPattern > ( tree::PrefixRankedPattern::getXmlTagName() ); +auto PrefixRankedPatternFromRankedPattern = castApi::CastRegister < ::tree::PrefixRankedPattern, ::tree::RankedPattern > ( ); +auto PrefixRankedPatternCastBinder = castApi::CastPoolStringBinder < ::tree::PrefixRankedPattern > ( ::tree::PrefixRankedPattern::getXmlTagName() ); } /* namespace alib */ diff --git a/alib2data/src/tree/ranked/PrefixRankedPattern.h b/alib2data/src/tree/ranked/PrefixRankedPattern.h index 00260f4a59ce025a6221542facff28074c9e407c..994ee3e7981b3adc5f700c6280b9f5e8043c4217 100644 --- a/alib2data/src/tree/ranked/PrefixRankedPattern.h +++ b/alib2data/src/tree/ranked/PrefixRankedPattern.h @@ -97,32 +97,32 @@ public: namespace std { template < > -class ComponentConstraint< tree::PrefixRankedPattern, alphabet::RankedSymbol, tree::GeneralAlphabet > { +class ComponentConstraint< ::tree::PrefixRankedPattern, alphabet::RankedSymbol, ::tree::GeneralAlphabet > { public: - static bool used ( const tree::PrefixRankedPattern & pattern, const alphabet::RankedSymbol & symbol ) { + static bool used ( const ::tree::PrefixRankedPattern & pattern, const alphabet::RankedSymbol & symbol ) { const std::vector < alphabet::RankedSymbol > & content = pattern.getContent ( ); - return std::find ( content.begin ( ), content.end ( ), symbol ) != content.end ( ) || pattern.accessElement < tree::SubtreeWildcard > ( ).get ( ) == symbol; + return std::find ( content.begin ( ), content.end ( ), symbol ) != content.end ( ) || pattern.accessElement < ::tree::SubtreeWildcard > ( ).get ( ) == symbol; } - static bool available ( const tree::PrefixRankedPattern &, const alphabet::RankedSymbol & ) { + static bool available ( const ::tree::PrefixRankedPattern &, const alphabet::RankedSymbol & ) { return true; } - static void valid ( const tree::PrefixRankedPattern &, const alphabet::RankedSymbol & ) { + static void valid ( const ::tree::PrefixRankedPattern &, const alphabet::RankedSymbol & ) { } }; template < > -class ElementConstraint< tree::PrefixRankedPattern, alphabet::RankedSymbol, tree::SubtreeWildcard > { +class ElementConstraint< ::tree::PrefixRankedPattern, alphabet::RankedSymbol, ::tree::SubtreeWildcard > { public: - static bool available ( const tree::PrefixRankedPattern & pattern, const alphabet::RankedSymbol & symbol ) { - return pattern.accessComponent < tree::GeneralAlphabet > ( ).get ( ).count ( symbol ); + static bool available ( const ::tree::PrefixRankedPattern & pattern, const alphabet::RankedSymbol & symbol ) { + return pattern.accessComponent < ::tree::GeneralAlphabet > ( ).get ( ).count ( symbol ); } - static void valid ( const tree::PrefixRankedPattern &, const alphabet::RankedSymbol & symbol) { + static void valid ( const ::tree::PrefixRankedPattern &, const alphabet::RankedSymbol & symbol) { if( symbol.getRank().getData() != 0 ) - throw tree::TreeException ( "SubtreeWildcard symbol has nonzero arity" ); + throw ::tree::TreeException ( "SubtreeWildcard symbol has nonzero arity" ); } }; diff --git a/alib2data/src/tree/ranked/PrefixRankedTree.cpp b/alib2data/src/tree/ranked/PrefixRankedTree.cpp index bd5fa0e0ab31798f5683820121071f6dc22e3fed..c2878076e49e4941800c32c66aa98be49d7507c2 100644 --- a/alib2data/src/tree/ranked/PrefixRankedTree.cpp +++ b/alib2data/src/tree/ranked/PrefixRankedTree.cpp @@ -136,11 +136,11 @@ void PrefixRankedTree::compose ( std::deque < sax::Token > & out ) const { namespace alib { -auto prefixRankedTreeParserRegister = xmlApi < tree::Tree >::ParserRegister < tree::PrefixRankedTree > (); -auto prefixRankedTreeParserRegister2 = xmlApi < tree::RankedTreeWrapper >::ParserRegister < tree::PrefixRankedTree > (); -auto prefixRankedTreeParserRegister3 = xmlApi < alib::Object >::ParserRegister < tree::PrefixRankedTree > (); +auto prefixRankedTreeParserRegister = xmlApi < ::tree::Tree >::ParserRegister < ::tree::PrefixRankedTree > (); +auto prefixRankedTreeParserRegister2 = xmlApi < ::tree::RankedTreeWrapper >::ParserRegister < ::tree::PrefixRankedTree > (); +auto prefixRankedTreeParserRegister3 = xmlApi < alib::Object >::ParserRegister < ::tree::PrefixRankedTree > (); -auto PrefixRankedTreeFromRankedTree = castApi::CastRegister < tree::PrefixRankedTree, tree::RankedTree > ( ); -auto PrefixRankedTreeCastBinder = castApi::CastPoolStringBinder < tree::PrefixRankedTree > ( tree::PrefixRankedTree::getXmlTagName() ); +auto PrefixRankedTreeFromRankedTree = castApi::CastRegister < ::tree::PrefixRankedTree, ::tree::RankedTree > ( ); +auto PrefixRankedTreeCastBinder = castApi::CastPoolStringBinder < ::tree::PrefixRankedTree > ( ::tree::PrefixRankedTree::getXmlTagName() ); } /* namespace alib */ diff --git a/alib2data/src/tree/ranked/PrefixRankedTree.h b/alib2data/src/tree/ranked/PrefixRankedTree.h index f90779d08d680fcbd2f92ad0e7535f9331e33b63..8c399aa3d6f68ff548c9cdcf1752f4f394eb196a 100644 --- a/alib2data/src/tree/ranked/PrefixRankedTree.h +++ b/alib2data/src/tree/ranked/PrefixRankedTree.h @@ -90,19 +90,19 @@ public: namespace std { template < > -class ComponentConstraint< tree::PrefixRankedTree, alphabet::RankedSymbol, tree::GeneralAlphabet > { +class ComponentConstraint< ::tree::PrefixRankedTree, alphabet::RankedSymbol, ::tree::GeneralAlphabet > { public: - static bool used ( const tree::PrefixRankedTree & tree, const alphabet::RankedSymbol & symbol ) { + static bool used ( const ::tree::PrefixRankedTree & tree, const alphabet::RankedSymbol & symbol ) { const std::vector < alphabet::RankedSymbol > & content = tree.getContent ( ); return std::find ( content.begin ( ), content.end ( ), symbol ) != content.end ( ); } - static bool available ( const tree::PrefixRankedTree &, const alphabet::RankedSymbol & ) { + static bool available ( const ::tree::PrefixRankedTree &, const alphabet::RankedSymbol & ) { return true; } - static void valid ( const tree::PrefixRankedTree &, const alphabet::RankedSymbol & ) { + static void valid ( const ::tree::PrefixRankedTree &, const alphabet::RankedSymbol & ) { } }; diff --git a/alib2data/src/tree/ranked/RankedNode.cpp b/alib2data/src/tree/ranked/RankedNode.cpp index db25406e9f8d722649406bb4dd32fb6201b348ea..352d245dab04974170696649754858508c84cf98 100644 --- a/alib2data/src/tree/ranked/RankedNode.cpp +++ b/alib2data/src/tree/ranked/RankedNode.cpp @@ -197,16 +197,16 @@ void RankedNode::nicePrint ( std::ostream & os, const std::string & prefix, cons namespace alib { -tree::RankedNode xmlApi < tree::RankedNode >::parse ( std::deque < sax::Token >::iterator & input ) { - return tree::TreeFromXMLParser::parseRankedNode ( input ); +::tree::RankedNode xmlApi < ::tree::RankedNode >::parse ( std::deque < sax::Token >::iterator & input ) { + return ::tree::TreeFromXMLParser::parseRankedNode ( input ); } -bool xmlApi < tree::RankedNode >::first ( const std::deque < sax::Token >::const_iterator & ) { - throw tree::TreeException ( "Unimplemented" ); +bool xmlApi < ::tree::RankedNode >::first ( const std::deque < sax::Token >::const_iterator & ) { + throw ::tree::TreeException ( "Unimplemented" ); } -void xmlApi < tree::RankedNode >::compose ( std::deque < sax::Token > & output, const tree::RankedNode & data ) { - tree::TreeToXMLComposer::composeNode ( output, data ); +void xmlApi < ::tree::RankedNode >::compose ( std::deque < sax::Token > & output, const ::tree::RankedNode & data ) { + ::tree::TreeToXMLComposer::composeNode ( output, data ); } } /* namespace alib */ diff --git a/alib2data/src/tree/ranked/RankedNode.h b/alib2data/src/tree/ranked/RankedNode.h index 93482c66555293960968d4a3bf25c977364c7ca9..5b41dc8474c53904f5d98c04e71c43d9335e6629 100644 --- a/alib2data/src/tree/ranked/RankedNode.h +++ b/alib2data/src/tree/ranked/RankedNode.h @@ -116,10 +116,10 @@ public: namespace alib { template < > -struct xmlApi < tree::RankedNode > { - static tree::RankedNode parse ( std::deque < sax::Token >::iterator & input ); +struct xmlApi < ::tree::RankedNode > { + static ::tree::RankedNode parse ( std::deque < sax::Token >::iterator & input ); static bool first ( const std::deque < sax::Token >::const_iterator & input ); - static void compose ( std::deque < sax::Token > & output, const tree::RankedNode & data ); + static void compose ( std::deque < sax::Token > & output, const ::tree::RankedNode & data ); }; } /* namespace alib */ @@ -127,8 +127,8 @@ struct xmlApi < tree::RankedNode > { namespace std { template < > -struct compare < tree::RankedNode > { - int operator ()( const tree::RankedNode & first, const tree::RankedNode & second ) const { +struct compare < ::tree::RankedNode > { + int operator ()( const ::tree::RankedNode & first, const ::tree::RankedNode & second ) const { return first.compare ( second ); } diff --git a/alib2data/src/tree/ranked/RankedNonlinearPattern.cpp b/alib2data/src/tree/ranked/RankedNonlinearPattern.cpp index 3574cd73bc0fed9e38224af0e4489b2e4e668327..074c73f21e08d41ad9e5e64520e6640d513163f0 100644 --- a/alib2data/src/tree/ranked/RankedNonlinearPattern.cpp +++ b/alib2data/src/tree/ranked/RankedNonlinearPattern.cpp @@ -134,8 +134,8 @@ void RankedNonlinearPattern::compose ( std::deque < sax::Token > & out ) const { namespace alib { -auto RankedNonlinearPatternParserRegister = xmlApi < tree::Tree >::ParserRegister < tree::RankedNonlinearPattern > ( ); -auto RankedNonlinearPatternParserRegister2 = xmlApi < tree::RankedTreeWrapper >::ParserRegister < tree::RankedNonlinearPattern > ( ); -auto RankedNonlinearPatternParserRegister3 = xmlApi < alib::Object >::ParserRegister < tree::RankedNonlinearPattern > ( ); +auto RankedNonlinearPatternParserRegister = xmlApi < ::tree::Tree >::ParserRegister < ::tree::RankedNonlinearPattern > ( ); +auto RankedNonlinearPatternParserRegister2 = xmlApi < ::tree::RankedTreeWrapper >::ParserRegister < ::tree::RankedNonlinearPattern > ( ); +auto RankedNonlinearPatternParserRegister3 = xmlApi < alib::Object >::ParserRegister < ::tree::RankedNonlinearPattern > ( ); } /* namespace alib */ diff --git a/alib2data/src/tree/ranked/RankedNonlinearPattern.h b/alib2data/src/tree/ranked/RankedNonlinearPattern.h index 54eacd1227d16f382efcce40d093d21f421214b3..0a47b6f9bbc64504df314c30d8b39455ce562dcd 100644 --- a/alib2data/src/tree/ranked/RankedNonlinearPattern.h +++ b/alib2data/src/tree/ranked/RankedNonlinearPattern.h @@ -123,53 +123,53 @@ public: namespace std { template < > -class ComponentConstraint< tree::RankedNonlinearPattern, alphabet::RankedSymbol, tree::GeneralAlphabet > { +class ComponentConstraint< ::tree::RankedNonlinearPattern, alphabet::RankedSymbol, ::tree::GeneralAlphabet > { public: - static bool used ( const tree::RankedNonlinearPattern & pattern, const alphabet::RankedSymbol & symbol ) { - return pattern.getRoot ( ).testSymbol ( symbol ) || pattern.accessElement < tree::SubtreeWildcard > ( ).get ( ) == symbol || pattern.accessComponent < tree::NonlinearAlphabet > ( ).get ( ).count ( symbol ); + static bool used ( const ::tree::RankedNonlinearPattern & pattern, const alphabet::RankedSymbol & symbol ) { + return pattern.getRoot ( ).testSymbol ( symbol ) || pattern.accessElement < ::tree::SubtreeWildcard > ( ).get ( ) == symbol || pattern.accessComponent < ::tree::NonlinearAlphabet > ( ).get ( ).count ( symbol ); } - static bool available ( const tree::RankedNonlinearPattern &, const alphabet::RankedSymbol & ) { + static bool available ( const ::tree::RankedNonlinearPattern &, const alphabet::RankedSymbol & ) { return true; } - static void valid ( const tree::RankedNonlinearPattern &, const alphabet::RankedSymbol & ) { + static void valid ( const ::tree::RankedNonlinearPattern &, const alphabet::RankedSymbol & ) { } }; template < > -class ComponentConstraint< tree::RankedNonlinearPattern, alphabet::RankedSymbol, tree::NonlinearAlphabet > { +class ComponentConstraint< ::tree::RankedNonlinearPattern, alphabet::RankedSymbol, ::tree::NonlinearAlphabet > { public: - static bool used ( const tree::RankedNonlinearPattern &, const alphabet::RankedSymbol & ) { + static bool used ( const ::tree::RankedNonlinearPattern &, const alphabet::RankedSymbol & ) { return false; } - static bool available ( const tree::RankedNonlinearPattern & pattern, const alphabet::RankedSymbol & symbol ) { - return pattern.accessComponent < tree::GeneralAlphabet > ( ).get ( ).count ( symbol ); + static bool available ( const ::tree::RankedNonlinearPattern & pattern, const alphabet::RankedSymbol & symbol ) { + return pattern.accessComponent < ::tree::GeneralAlphabet > ( ).get ( ).count ( symbol ); } - static void valid ( const tree::RankedNonlinearPattern & pattern, const alphabet::RankedSymbol & symbol) { + static void valid ( const ::tree::RankedNonlinearPattern & pattern, const alphabet::RankedSymbol & symbol) { if( symbol.getRank().getData() != 0 ) - throw tree::TreeException ( "SubtreeWildcard symbol has nonzero arity" ); + throw ::tree::TreeException ( "SubtreeWildcard symbol has nonzero arity" ); - if ( pattern.accessElement < tree::SubtreeWildcard > ( ).get ( ) == symbol ) - throw tree::TreeException ( "Symbol " + std::to_string ( symbol ) + "cannot be set as nonlinear variable since it is already subtree wildcard" ); + if ( pattern.accessElement < ::tree::SubtreeWildcard > ( ).get ( ) == symbol ) + throw ::tree::TreeException ( "Symbol " + std::to_string ( symbol ) + "cannot be set as nonlinear variable since it is already subtree wildcard" ); } }; template < > -class ElementConstraint< tree::RankedNonlinearPattern, alphabet::RankedSymbol, tree::SubtreeWildcard > { +class ElementConstraint< ::tree::RankedNonlinearPattern, alphabet::RankedSymbol, ::tree::SubtreeWildcard > { public: - static bool available ( const tree::RankedNonlinearPattern & pattern, const alphabet::RankedSymbol & symbol ) { - return pattern.accessComponent < tree::GeneralAlphabet > ( ).get ( ).count ( symbol ); + static bool available ( const ::tree::RankedNonlinearPattern & pattern, const alphabet::RankedSymbol & symbol ) { + return pattern.accessComponent < ::tree::GeneralAlphabet > ( ).get ( ).count ( symbol ); } - static void valid ( const tree::RankedNonlinearPattern & pattern, const alphabet::RankedSymbol & symbol) { + static void valid ( const ::tree::RankedNonlinearPattern & pattern, const alphabet::RankedSymbol & symbol) { if( symbol.getRank().getData() != 0 ) - throw tree::TreeException ( "SubtreeWildcard symbol has nonzero arity" ); + throw ::tree::TreeException ( "SubtreeWildcard symbol has nonzero arity" ); - if ( pattern.accessComponent < tree::NonlinearAlphabet > ( ).get ( ).count ( symbol ) ) - throw tree::TreeException ( "Symbol " + std::to_string ( symbol ) + "cannot be set as subtree wildcard since it is already nonlinear variable" ); + if ( pattern.accessComponent < ::tree::NonlinearAlphabet > ( ).get ( ).count ( symbol ) ) + throw ::tree::TreeException ( "Symbol " + std::to_string ( symbol ) + "cannot be set as subtree wildcard since it is already nonlinear variable" ); } }; diff --git a/alib2data/src/tree/ranked/RankedPattern.cpp b/alib2data/src/tree/ranked/RankedPattern.cpp index 56b467abb4a9a24bd5aeccaa17991912691c8537..2aeb63ece3d0453eb65634aa673e406b5fe819a5 100644 --- a/alib2data/src/tree/ranked/RankedPattern.cpp +++ b/alib2data/src/tree/ranked/RankedPattern.cpp @@ -131,11 +131,11 @@ void RankedPattern::compose ( std::deque < sax::Token > & out ) const { namespace alib { -auto rankedPatternParserRegister = xmlApi < tree::Tree >::ParserRegister < tree::RankedPattern > (); -auto rankedPatternParserRegister2 = xmlApi < tree::RankedTreeWrapper >::ParserRegister < tree::RankedPattern > (); -auto rankedPatternParserRegister3 = xmlApi < alib::Object >::ParserRegister < tree::RankedPattern > (); +auto rankedPatternParserRegister = xmlApi < ::tree::Tree >::ParserRegister < ::tree::RankedPattern > (); +auto rankedPatternParserRegister2 = xmlApi < ::tree::RankedTreeWrapper >::ParserRegister < ::tree::RankedPattern > (); +auto rankedPatternParserRegister3 = xmlApi < alib::Object >::ParserRegister < ::tree::RankedPattern > (); -auto RankedPatternFromUnrankedPattern = castApi::CastRegister < tree::RankedPattern, tree::UnrankedPattern > ( ); -auto RankedPatternCastBinder = castApi::CastPoolStringBinder < tree::RankedPattern > ( tree::RankedPattern::getXmlTagName() ); +auto RankedPatternFromUnrankedPattern = castApi::CastRegister < ::tree::RankedPattern, ::tree::UnrankedPattern > ( ); +auto RankedPatternCastBinder = castApi::CastPoolStringBinder < ::tree::RankedPattern > ( ::tree::RankedPattern::getXmlTagName() ); } /* namespace alib */ diff --git a/alib2data/src/tree/ranked/RankedPattern.h b/alib2data/src/tree/ranked/RankedPattern.h index f58f4596968ff0bd0f6f32f61fa596d6eabefde1..7dd55dfa82cb136d4de8ecaecf0655a45276f76c 100644 --- a/alib2data/src/tree/ranked/RankedPattern.h +++ b/alib2data/src/tree/ranked/RankedPattern.h @@ -118,30 +118,30 @@ public: namespace std { template < > -class ComponentConstraint< tree::RankedPattern, alphabet::RankedSymbol, tree::GeneralAlphabet > { +class ComponentConstraint< ::tree::RankedPattern, alphabet::RankedSymbol, ::tree::GeneralAlphabet > { public: - static bool used ( const tree::RankedPattern & pattern, const alphabet::RankedSymbol & symbol ) { - return pattern.getRoot ( ).testSymbol ( symbol ) || pattern.accessElement < tree::SubtreeWildcard > ( ).get ( ) == symbol; + static bool used ( const ::tree::RankedPattern & pattern, const alphabet::RankedSymbol & symbol ) { + return pattern.getRoot ( ).testSymbol ( symbol ) || pattern.accessElement < ::tree::SubtreeWildcard > ( ).get ( ) == symbol; } - static bool available ( const tree::RankedPattern &, const alphabet::RankedSymbol & ) { + static bool available ( const ::tree::RankedPattern &, const alphabet::RankedSymbol & ) { return true; } - static void valid ( const tree::RankedPattern &, const alphabet::RankedSymbol & ) { + static void valid ( const ::tree::RankedPattern &, const alphabet::RankedSymbol & ) { } }; template < > -class ElementConstraint< tree::RankedPattern, alphabet::RankedSymbol, tree::SubtreeWildcard > { +class ElementConstraint< ::tree::RankedPattern, alphabet::RankedSymbol, ::tree::SubtreeWildcard > { public: - static bool available ( const tree::RankedPattern & pattern, const alphabet::RankedSymbol & symbol ) { - return pattern.accessComponent < tree::GeneralAlphabet > ( ).get ( ).count ( symbol ); + static bool available ( const ::tree::RankedPattern & pattern, const alphabet::RankedSymbol & symbol ) { + return pattern.accessComponent < ::tree::GeneralAlphabet > ( ).get ( ).count ( symbol ); } - static void valid ( const tree::RankedPattern &, const alphabet::RankedSymbol & symbol) { + static void valid ( const ::tree::RankedPattern &, const alphabet::RankedSymbol & symbol) { if( symbol.getRank().getData() != 0 ) - throw tree::TreeException ( "SubtreeWildcard symbol has nonzero arity" ); + throw ::tree::TreeException ( "SubtreeWildcard symbol has nonzero arity" ); } }; diff --git a/alib2data/src/tree/ranked/RankedTree.cpp b/alib2data/src/tree/ranked/RankedTree.cpp index b1e5c2ee3feb68969b3cde2698dc1fa9280e8a74..35fa45e79391e298ae1b27994e3439ff59cd36b2 100644 --- a/alib2data/src/tree/ranked/RankedTree.cpp +++ b/alib2data/src/tree/ranked/RankedTree.cpp @@ -128,11 +128,11 @@ void RankedTree::compose ( std::deque < sax::Token > & out ) const { namespace alib { -auto rankedTreeParserRegister = xmlApi < tree::Tree >::ParserRegister < tree::RankedTree > (); -auto rankedTreeParserRegister2 = xmlApi < tree::RankedTreeWrapper >::ParserRegister < tree::RankedTree > (); -auto rankedTreeParserRegister3 = xmlApi < alib::Object >::ParserRegister < tree::RankedTree > (); +auto rankedTreeParserRegister = xmlApi < ::tree::Tree >::ParserRegister < ::tree::RankedTree > (); +auto rankedTreeParserRegister2 = xmlApi < ::tree::RankedTreeWrapper >::ParserRegister < ::tree::RankedTree > (); +auto rankedTreeParserRegister3 = xmlApi < alib::Object >::ParserRegister < ::tree::RankedTree > (); -auto RankedTreeFromUnrankedTree = castApi::CastRegister < tree::RankedTree, tree::UnrankedTree > ( ); -auto RankedTreeCastBinder = castApi::CastPoolStringBinder < tree::RankedTree > ( tree::RankedTree::getXmlTagName() ); +auto RankedTreeFromUnrankedTree = castApi::CastRegister < ::tree::RankedTree, ::tree::UnrankedTree > ( ); +auto RankedTreeCastBinder = castApi::CastPoolStringBinder < ::tree::RankedTree > ( ::tree::RankedTree::getXmlTagName() ); } /* namespace alib */ diff --git a/alib2data/src/tree/ranked/RankedTree.h b/alib2data/src/tree/ranked/RankedTree.h index 1d32503457635f5e6f822f04b328aee7ddce216a..dbbd6462414b35fa30ca3d21ada06411a64046f8 100644 --- a/alib2data/src/tree/ranked/RankedTree.h +++ b/alib2data/src/tree/ranked/RankedTree.h @@ -113,17 +113,17 @@ public: namespace std { template < > -class ComponentConstraint< tree::RankedTree, alphabet::RankedSymbol, tree::GeneralAlphabet > { +class ComponentConstraint< ::tree::RankedTree, alphabet::RankedSymbol, ::tree::GeneralAlphabet > { public: - static bool used ( const tree::RankedTree & tree, const alphabet::RankedSymbol & symbol ) { + static bool used ( const ::tree::RankedTree & tree, const alphabet::RankedSymbol & symbol ) { return tree.getRoot ( ).testSymbol ( symbol ); } - static bool available ( const tree::RankedTree &, const alphabet::RankedSymbol & ) { + static bool available ( const ::tree::RankedTree &, const alphabet::RankedSymbol & ) { return true; } - static void valid ( const tree::RankedTree &, const alphabet::RankedSymbol & ) { + static void valid ( const ::tree::RankedTree &, const alphabet::RankedSymbol & ) { } }; diff --git a/alib2data/src/tree/unranked/PrefixBarTree.cpp b/alib2data/src/tree/unranked/PrefixBarTree.cpp index e1dd179a965b31259833603af4428f3ddf5d2bc0..f2f7db2961cbc7c1920f545fc48fd05a9f6334a3 100644 --- a/alib2data/src/tree/unranked/PrefixBarTree.cpp +++ b/alib2data/src/tree/unranked/PrefixBarTree.cpp @@ -148,11 +148,11 @@ void PrefixBarTree::compose ( std::deque < sax::Token > & out ) const { namespace alib { -auto prefixBarTreeParserRegister = xmlApi < tree::Tree >::ParserRegister < tree::PrefixBarTree > ( ); -auto prefixBarTreeParserRegister2 = xmlApi < tree::UnrankedTreeWrapper >::ParserRegister < tree::PrefixBarTree > ( ); -auto prefixBarTreeParserRegister3 = xmlApi < alib::Object >::ParserRegister < tree::PrefixBarTree > ( ); +auto prefixBarTreeParserRegister = xmlApi < ::tree::Tree >::ParserRegister < ::tree::PrefixBarTree > ( ); +auto prefixBarTreeParserRegister2 = xmlApi < ::tree::UnrankedTreeWrapper >::ParserRegister < ::tree::PrefixBarTree > ( ); +auto prefixBarTreeParserRegister3 = xmlApi < alib::Object >::ParserRegister < ::tree::PrefixBarTree > ( ); -auto PrefixBarTreeFromUnrankedTree = castApi::CastRegister < tree::PrefixBarTree, tree::UnrankedTree > ( ); -auto PrefixBarTreeCastBinder = castApi::CastPoolStringBinder < tree::PrefixBarTree > ( tree::PrefixBarTree::getXmlTagName() ); +auto PrefixBarTreeFromUnrankedTree = castApi::CastRegister < ::tree::PrefixBarTree, ::tree::UnrankedTree > ( ); +auto PrefixBarTreeCastBinder = castApi::CastPoolStringBinder < ::tree::PrefixBarTree > ( ::tree::PrefixBarTree::getXmlTagName() ); } /* namespace alib */ diff --git a/alib2data/src/tree/unranked/PrefixBarTree.h b/alib2data/src/tree/unranked/PrefixBarTree.h index c3004494b2a58455b6afcfd90eddfa8d2e531448..299b719b9242d999c4d8a774dadcef5542da4581 100644 --- a/alib2data/src/tree/unranked/PrefixBarTree.h +++ b/alib2data/src/tree/unranked/PrefixBarTree.h @@ -95,30 +95,30 @@ public: namespace std { template < > -class ComponentConstraint< tree::PrefixBarTree, alphabet::Symbol, tree::GeneralAlphabet > { +class ComponentConstraint< ::tree::PrefixBarTree, alphabet::Symbol, ::tree::GeneralAlphabet > { public: - static bool used ( const tree::PrefixBarTree & tree, const alphabet::Symbol & symbol ) { + static bool used ( const ::tree::PrefixBarTree & tree, const alphabet::Symbol & symbol ) { const std::vector < alphabet::Symbol > & content = tree.getContent ( ); return std::find ( content.begin ( ), content.end ( ), symbol ) != content.end ( ); } - static bool available ( const tree::PrefixBarTree &, const alphabet::Symbol & ) { + static bool available ( const ::tree::PrefixBarTree &, const alphabet::Symbol & ) { return true; } - static void valid ( const tree::PrefixBarTree &, const alphabet::Symbol & ) { + static void valid ( const ::tree::PrefixBarTree &, const alphabet::Symbol & ) { } }; template < > -class ElementConstraint< tree::PrefixBarTree, alphabet::Symbol, tree::BarSymbol > { +class ElementConstraint< ::tree::PrefixBarTree, alphabet::Symbol, ::tree::BarSymbol > { public: - static bool available ( const tree::PrefixBarTree & tree, const alphabet::Symbol & symbol ) { - return tree.accessComponent < tree::GeneralAlphabet > ( ).get ( ).count ( symbol ); + static bool available ( const ::tree::PrefixBarTree & tree, const alphabet::Symbol & symbol ) { + return tree.accessComponent < ::tree::GeneralAlphabet > ( ).get ( ).count ( symbol ); } - static void valid ( const tree::PrefixBarTree &, const alphabet::Symbol & ) { + static void valid ( const ::tree::PrefixBarTree &, const alphabet::Symbol & ) { } }; diff --git a/alib2data/src/tree/unranked/UnrankedNode.cpp b/alib2data/src/tree/unranked/UnrankedNode.cpp index a22a15758f6abece25f74e6fa4dfa1bcc0958cc2..26a0e44eed355bd28770f2fff137f21aab7fda52 100644 --- a/alib2data/src/tree/unranked/UnrankedNode.cpp +++ b/alib2data/src/tree/unranked/UnrankedNode.cpp @@ -202,16 +202,16 @@ void UnrankedNode::nicePrint ( std::ostream & os, const std::string & prefix, co namespace alib { -tree::UnrankedNode xmlApi < tree::UnrankedNode >::parse ( std::deque < sax::Token >::iterator & input ) { - return tree::TreeFromXMLParser::parseUnrankedNode ( input ); +::tree::UnrankedNode xmlApi < ::tree::UnrankedNode >::parse ( std::deque < sax::Token >::iterator & input ) { + return ::tree::TreeFromXMLParser::parseUnrankedNode ( input ); } -bool xmlApi < tree::UnrankedNode >::first ( const std::deque < sax::Token >::const_iterator & ) { - throw tree::TreeException ( "Unimplemented" ); +bool xmlApi < ::tree::UnrankedNode >::first ( const std::deque < sax::Token >::const_iterator & ) { + throw ::tree::TreeException ( "Unimplemented" ); } -void xmlApi < tree::UnrankedNode >::compose ( std::deque < sax::Token > & output, const tree::UnrankedNode & data ) { - tree::TreeToXMLComposer::composeNode ( output, data ); +void xmlApi < ::tree::UnrankedNode >::compose ( std::deque < sax::Token > & output, const ::tree::UnrankedNode & data ) { + ::tree::TreeToXMLComposer::composeNode ( output, data ); } } /* namespace alib */ diff --git a/alib2data/src/tree/unranked/UnrankedNode.h b/alib2data/src/tree/unranked/UnrankedNode.h index e514240bed6521340125a6878c343e0115ed2908..7179e943af6a94d6c7482dbd5eb0e2d9225fd4eb 100644 --- a/alib2data/src/tree/unranked/UnrankedNode.h +++ b/alib2data/src/tree/unranked/UnrankedNode.h @@ -118,10 +118,10 @@ public: namespace alib { template < > -struct xmlApi < tree::UnrankedNode > { - static tree::UnrankedNode parse ( std::deque < sax::Token >::iterator & input ); +struct xmlApi < ::tree::UnrankedNode > { + static ::tree::UnrankedNode parse ( std::deque < sax::Token >::iterator & input ); static bool first ( const std::deque < sax::Token >::const_iterator & input ); - static void compose ( std::deque < sax::Token > & output, const tree::UnrankedNode & data ); + static void compose ( std::deque < sax::Token > & output, const ::tree::UnrankedNode & data ); }; } /* namespace alib */ @@ -129,8 +129,8 @@ struct xmlApi < tree::UnrankedNode > { namespace std { template < > -struct compare < tree::UnrankedNode > { - int operator ()( const tree::UnrankedNode & first, const tree::UnrankedNode & second ) const { +struct compare < ::tree::UnrankedNode > { + int operator ()( const ::tree::UnrankedNode & first, const ::tree::UnrankedNode & second ) const { return first.compare ( second ); } diff --git a/alib2data/src/tree/unranked/UnrankedNonlinearPattern.cpp b/alib2data/src/tree/unranked/UnrankedNonlinearPattern.cpp index c354c0107fbedc2d26df5c172a3bcbb7bfb02c52..bd8376debb8f63009f9f929213ec8f97945eebd4 100644 --- a/alib2data/src/tree/unranked/UnrankedNonlinearPattern.cpp +++ b/alib2data/src/tree/unranked/UnrankedNonlinearPattern.cpp @@ -134,8 +134,8 @@ void UnrankedNonlinearPattern::compose ( std::deque < sax::Token > & out ) const namespace alib { -auto UnrankedNonlinearPatternParserRegister = xmlApi < tree::Tree >::ParserRegister < tree::UnrankedNonlinearPattern > ( ); -auto UnrankedNonlinearPatternParserRegister2 = xmlApi < tree::UnrankedTreeWrapper >::ParserRegister < tree::UnrankedNonlinearPattern > ( ); -auto UnrankedNonlinearPatternParserRegister3 = xmlApi < alib::Object >::ParserRegister < tree::UnrankedNonlinearPattern > ( ); +auto UnrankedNonlinearPatternParserRegister = xmlApi < ::tree::Tree >::ParserRegister < ::tree::UnrankedNonlinearPattern > ( ); +auto UnrankedNonlinearPatternParserRegister2 = xmlApi < ::tree::UnrankedTreeWrapper >::ParserRegister < ::tree::UnrankedNonlinearPattern > ( ); +auto UnrankedNonlinearPatternParserRegister3 = xmlApi < alib::Object >::ParserRegister < ::tree::UnrankedNonlinearPattern > ( ); } /* namespace alib */ diff --git a/alib2data/src/tree/unranked/UnrankedNonlinearPattern.h b/alib2data/src/tree/unranked/UnrankedNonlinearPattern.h index 69fc7284c5004fdde532ecf5927838d3391153a2..1cef5fff3c04dd924a75240b337b8add12efb62d 100644 --- a/alib2data/src/tree/unranked/UnrankedNonlinearPattern.h +++ b/alib2data/src/tree/unranked/UnrankedNonlinearPattern.h @@ -129,47 +129,47 @@ public: namespace std { template < > -class ComponentConstraint< tree::UnrankedNonlinearPattern, alphabet::Symbol, tree::GeneralAlphabet > { +class ComponentConstraint< ::tree::UnrankedNonlinearPattern, alphabet::Symbol, ::tree::GeneralAlphabet > { public: - static bool used ( const tree::UnrankedNonlinearPattern & pattern, const alphabet::Symbol & symbol ) { - return pattern.getRoot ( ).testSymbol ( symbol ) || pattern.accessElement < tree::SubtreeWildcard > ( ).get ( ) == symbol || pattern.accessComponent < tree::NonlinearAlphabet > ( ).get ( ).count ( symbol ); + static bool used ( const ::tree::UnrankedNonlinearPattern & pattern, const alphabet::Symbol & symbol ) { + return pattern.getRoot ( ).testSymbol ( symbol ) || pattern.accessElement < ::tree::SubtreeWildcard > ( ).get ( ) == symbol || pattern.accessComponent < ::tree::NonlinearAlphabet > ( ).get ( ).count ( symbol ); } - static bool available ( const tree::UnrankedNonlinearPattern &, const alphabet::Symbol & ) { + static bool available ( const ::tree::UnrankedNonlinearPattern &, const alphabet::Symbol & ) { return true; } - static void valid ( const tree::UnrankedNonlinearPattern &, const alphabet::Symbol & ) { + static void valid ( const ::tree::UnrankedNonlinearPattern &, const alphabet::Symbol & ) { } }; template < > -class ComponentConstraint< tree::UnrankedNonlinearPattern, alphabet::Symbol, tree::NonlinearAlphabet > { +class ComponentConstraint< ::tree::UnrankedNonlinearPattern, alphabet::Symbol, ::tree::NonlinearAlphabet > { public: - static bool used ( const tree::UnrankedNonlinearPattern &, const alphabet::Symbol & ) { + static bool used ( const ::tree::UnrankedNonlinearPattern &, const alphabet::Symbol & ) { return false; } - static bool available ( const tree::UnrankedNonlinearPattern & pattern, const alphabet::Symbol & symbol ) { - return pattern.accessComponent < tree::GeneralAlphabet > ( ).get ( ).count ( symbol ); + static bool available ( const ::tree::UnrankedNonlinearPattern & pattern, const alphabet::Symbol & symbol ) { + return pattern.accessComponent < ::tree::GeneralAlphabet > ( ).get ( ).count ( symbol ); } - static void valid ( const tree::UnrankedNonlinearPattern & pattern, const alphabet::Symbol & symbol) { - if ( pattern.accessElement < tree::SubtreeWildcard > ( ).get ( ) == symbol ) - throw tree::TreeException ( "Symbol " + std::to_string ( symbol ) + "cannot be set as nonlinear variable since it is already subtree wildcard" ); + static void valid ( const ::tree::UnrankedNonlinearPattern & pattern, const alphabet::Symbol & symbol) { + if ( pattern.accessElement < ::tree::SubtreeWildcard > ( ).get ( ) == symbol ) + throw ::tree::TreeException ( "Symbol " + std::to_string ( symbol ) + "cannot be set as nonlinear variable since it is already subtree wildcard" ); } }; template < > -class ElementConstraint< tree::UnrankedNonlinearPattern, alphabet::Symbol, tree::SubtreeWildcard > { +class ElementConstraint< ::tree::UnrankedNonlinearPattern, alphabet::Symbol, ::tree::SubtreeWildcard > { public: - static bool available ( const tree::UnrankedNonlinearPattern & pattern, const alphabet::Symbol & symbol ) { - return pattern.accessComponent < tree::GeneralAlphabet > ( ).get ( ).count ( symbol ); + static bool available ( const ::tree::UnrankedNonlinearPattern & pattern, const alphabet::Symbol & symbol ) { + return pattern.accessComponent < ::tree::GeneralAlphabet > ( ).get ( ).count ( symbol ); } - static void valid ( const tree::UnrankedNonlinearPattern & pattern, const alphabet::Symbol & symbol) { - if ( pattern.accessComponent < tree::NonlinearAlphabet > ( ).get ( ).count ( symbol ) ) - throw tree::TreeException ( "Symbol " + std::to_string ( symbol ) + "cannot be set as subtree wildcard since it is already nonlinear variable" ); + static void valid ( const ::tree::UnrankedNonlinearPattern & pattern, const alphabet::Symbol & symbol) { + if ( pattern.accessComponent < ::tree::NonlinearAlphabet > ( ).get ( ).count ( symbol ) ) + throw ::tree::TreeException ( "Symbol " + std::to_string ( symbol ) + "cannot be set as subtree wildcard since it is already nonlinear variable" ); } }; diff --git a/alib2data/src/tree/unranked/UnrankedPattern.cpp b/alib2data/src/tree/unranked/UnrankedPattern.cpp index 6ced3384a92dd46b30c5ee6db766cbea12ac890d..ffa82f78c49b345d6ebf535f68f71a6565cb9e42 100644 --- a/alib2data/src/tree/unranked/UnrankedPattern.cpp +++ b/alib2data/src/tree/unranked/UnrankedPattern.cpp @@ -132,11 +132,11 @@ void UnrankedPattern::compose ( std::deque < sax::Token > & out ) const { namespace alib { -auto unrankedPatternParserRegister = xmlApi < tree::Tree >::ParserRegister < tree::UnrankedPattern > ( ); -auto unrankedPatternParserRegister2 = xmlApi < tree::UnrankedTreeWrapper >::ParserRegister < tree::UnrankedPattern > ( ); -auto unrankedPatternParserRegister3 = xmlApi < alib::Object >::ParserRegister < tree::UnrankedPattern > ( ); +auto unrankedPatternParserRegister = xmlApi < ::tree::Tree >::ParserRegister < ::tree::UnrankedPattern > ( ); +auto unrankedPatternParserRegister2 = xmlApi < ::tree::UnrankedTreeWrapper >::ParserRegister < ::tree::UnrankedPattern > ( ); +auto unrankedPatternParserRegister3 = xmlApi < alib::Object >::ParserRegister < ::tree::UnrankedPattern > ( ); -auto UnrankedPatternFromRankedPattern = castApi::CastRegister < tree::UnrankedPattern, tree::RankedPattern > ( ); -auto UnrankedPatternCastBinder = castApi::CastPoolStringBinder < tree::UnrankedPattern > ( tree::UnrankedPattern::getXmlTagName() ); +auto UnrankedPatternFromRankedPattern = castApi::CastRegister < ::tree::UnrankedPattern, ::tree::RankedPattern > ( ); +auto UnrankedPatternCastBinder = castApi::CastPoolStringBinder < ::tree::UnrankedPattern > ( ::tree::UnrankedPattern::getXmlTagName() ); } /* namespace alib */ diff --git a/alib2data/src/tree/unranked/UnrankedPattern.h b/alib2data/src/tree/unranked/UnrankedPattern.h index 11f6ce9935f3e9a1b5890c96349a672344689dd9..a8692eee3fe4dbdfcf68506c9526eb9b87f6d65c 100644 --- a/alib2data/src/tree/unranked/UnrankedPattern.h +++ b/alib2data/src/tree/unranked/UnrankedPattern.h @@ -120,28 +120,28 @@ public: namespace std { template < > -class ComponentConstraint< tree::UnrankedPattern, alphabet::Symbol, tree::GeneralAlphabet > { +class ComponentConstraint< ::tree::UnrankedPattern, alphabet::Symbol, ::tree::GeneralAlphabet > { public: - static bool used ( const tree::UnrankedPattern & pattern, const alphabet::Symbol & symbol ) { - return pattern.getRoot ( ).testSymbol ( symbol ) || pattern.accessElement < tree::SubtreeWildcard > ( ).get ( ) == symbol; + static bool used ( const ::tree::UnrankedPattern & pattern, const alphabet::Symbol & symbol ) { + return pattern.getRoot ( ).testSymbol ( symbol ) || pattern.accessElement < ::tree::SubtreeWildcard > ( ).get ( ) == symbol; } - static bool available ( const tree::UnrankedPattern &, const alphabet::Symbol & ) { + static bool available ( const ::tree::UnrankedPattern &, const alphabet::Symbol & ) { return true; } - static void valid ( const tree::UnrankedPattern &, const alphabet::Symbol & ) { + static void valid ( const ::tree::UnrankedPattern &, const alphabet::Symbol & ) { } }; template < > -class ElementConstraint< tree::UnrankedPattern, alphabet::Symbol, tree::SubtreeWildcard > { +class ElementConstraint< ::tree::UnrankedPattern, alphabet::Symbol, ::tree::SubtreeWildcard > { public: - static bool available ( const tree::UnrankedPattern & pattern, const alphabet::Symbol & symbol ) { - return pattern.accessComponent < tree::GeneralAlphabet > ( ).get ( ).count ( symbol ); + static bool available ( const ::tree::UnrankedPattern & pattern, const alphabet::Symbol & symbol ) { + return pattern.accessComponent < ::tree::GeneralAlphabet > ( ).get ( ).count ( symbol ); } - static void valid ( const tree::UnrankedPattern &, const alphabet::Symbol & ) { + static void valid ( const ::tree::UnrankedPattern &, const alphabet::Symbol & ) { } }; diff --git a/alib2data/src/tree/unranked/UnrankedTree.cpp b/alib2data/src/tree/unranked/UnrankedTree.cpp index c2839a8f3aea00804c2960284bbd118d09cedb61..12250d6daade15ce15dc184d2f46ea679e719937 100644 --- a/alib2data/src/tree/unranked/UnrankedTree.cpp +++ b/alib2data/src/tree/unranked/UnrankedTree.cpp @@ -129,11 +129,11 @@ void UnrankedTree::compose ( std::deque < sax::Token > & out ) const { namespace alib { -auto unrankedTreeParserRegister = xmlApi < tree::Tree >::ParserRegister < tree::UnrankedTree > ( ); -auto unrankedTreeParserRegister2 = xmlApi < tree::UnrankedTreeWrapper >::ParserRegister < tree::UnrankedTree > ( ); -auto unrankedTreeParserRegister3 = xmlApi < alib::Object >::ParserRegister < tree::UnrankedTree > ( ); +auto unrankedTreeParserRegister = xmlApi < ::tree::Tree >::ParserRegister < ::tree::UnrankedTree > ( ); +auto unrankedTreeParserRegister2 = xmlApi < ::tree::UnrankedTreeWrapper >::ParserRegister < ::tree::UnrankedTree > ( ); +auto unrankedTreeParserRegister3 = xmlApi < alib::Object >::ParserRegister < ::tree::UnrankedTree > ( ); -auto UnrankedTreeFromRankedTree = castApi::CastRegister < tree::UnrankedTree, tree::RankedTree > ( ); -auto UnrankedTreeCastBinder = castApi::CastPoolStringBinder < tree::UnrankedTree > ( tree::UnrankedTree::getXmlTagName() ); +auto UnrankedTreeFromRankedTree = castApi::CastRegister < ::tree::UnrankedTree, ::tree::RankedTree > ( ); +auto UnrankedTreeCastBinder = castApi::CastPoolStringBinder < ::tree::UnrankedTree > ( ::tree::UnrankedTree::getXmlTagName() ); } /* namespace alib */ diff --git a/alib2data/src/tree/unranked/UnrankedTree.h b/alib2data/src/tree/unranked/UnrankedTree.h index 49fcbd6366553fbc10ef1ab2bb3ae2e6b141cea6..1e16dbbb478646fefcfe449b71ca57cd153493f0 100644 --- a/alib2data/src/tree/unranked/UnrankedTree.h +++ b/alib2data/src/tree/unranked/UnrankedTree.h @@ -117,17 +117,17 @@ public: namespace std { template < > -class ComponentConstraint< tree::UnrankedTree, alphabet::Symbol, tree::GeneralAlphabet > { +class ComponentConstraint< ::tree::UnrankedTree, alphabet::Symbol, ::tree::GeneralAlphabet > { public: - static bool used ( const tree::UnrankedTree & tree, const alphabet::Symbol & symbol ) { + static bool used ( const ::tree::UnrankedTree & tree, const alphabet::Symbol & symbol ) { return tree.getRoot ( ).testSymbol ( symbol ); } - static bool available ( const tree::UnrankedTree &, const alphabet::Symbol & ) { + static bool available ( const ::tree::UnrankedTree &, const alphabet::Symbol & ) { return true; } - static void valid ( const tree::UnrankedTree &, const alphabet::Symbol & ) { + static void valid ( const ::tree::UnrankedTree &, const alphabet::Symbol & ) { } }; diff --git a/alib2std/src/extensions/iterator.hpp b/alib2std/src/extensions/iterator.hpp index 9c0e1d25922a16655591326b90fadff2f11698a0..dbcbdaccda4d0b18b978ba9a21660e4c53810d15 100644 --- a/alib2std/src/extensions/iterator.hpp +++ b/alib2std/src/extensions/iterator.hpp @@ -32,6 +32,12 @@ reverser<T> make_reverse(T& container) { return reverser<T>(container); } +template < typename T > +struct is_iterator : std::false_type {}; + +template < typename T > +struct is_iterator<typename std::iterator_traits<T>> : std::true_type {}; + } /* namespace std */ #endif /* __ITERATOR_HPP_ */ diff --git a/alib2std/src/extensions/tree.hpp b/alib2std/src/extensions/tree.hpp index a66cd6d5ef5d95d7050f7ea54da897ebd0cd1503..726e48d36b44857fcd62a8ba95d6c3ec00f74562 100644 --- a/alib2std/src/extensions/tree.hpp +++ b/alib2std/src/extensions/tree.hpp @@ -10,6 +10,778 @@ namespace std { +template < class T > +struct AnyArity { + bool operator ()( const T &, unsigned ) const { + return true; + } + +}; + +template < class T, class ArityChecker = AnyArity < T > > +class tree { + + ArityChecker arityChecker; + + struct tree_node { + T data; + + tree_node * parent; + std::vector < tree_node > children; + + tree_node ( const T & data, const std::vector < tree_node > & children ) : data ( data ), children ( children ), parent ( nullptr ) { + for ( tree_node & child : this->children ) + child.parent = this; + } + + tree_node ( T && data, std::vector < tree_node > && children ) : data ( std::move ( data ) ), children ( std::move ( children ) ), parent ( nullptr ) { + for ( tree_node & child : this->children ) + child.parent = this; + } + + ~tree_node ( ) noexcept { + } + + tree_node ( const tree_node & node ) : data ( node.data ), parent ( node.parent ), children ( node.children ) { + for ( tree_node & child : children ) + child.parent = this; + } + + tree_node ( tree_node && node ) noexcept : data ( std::move ( node.data ) ), parent ( node.parent ), children ( std::move ( node.children ) ) { + for ( tree_node & child : children ) + child.parent = this; + } + + tree_node & operator =( const tree_node & node ) { + return this->operator =( tree_node ( node ) ); + } + + tree_node & operator =( tree_node && node ) noexcept { + data = std::move ( node.data ); + children = std::move ( node.children ); + + for ( tree_node & child : children ) + child.parent = this; + + return * this; + } + + tree_node * getParent ( ) { + return parent; + } + + const tree_node * getParent ( ) const { + return parent; + } + + T & getData ( ) { + return data; + } + + const T & getData ( ) const { + return data; + } + + std::vector < tree_node > & getChildren ( ) { + return children; + } + + const std::vector < tree_node > & getChildren ( ) const { + return children; + } + + }; + + tree_node root; + + std::vector < tree_node > fromTree ( const std::vector < tree < T, ArityChecker > > & input ) { + std::vector < tree_node > res; + + for ( const tree < T, ArityChecker > & subtree : input ) + res.push_back ( subtree.root ); + + return res; + } + +public: + class const_children_iterator : public std::iterator < std::bidirectional_iterator_tag, T > { + typename std::vector < tree_node >::const_iterator node; + + public: + const_children_iterator ( typename std::vector < tree_node >::const_iterator node ) : node ( node ) { + } + + const_children_iterator ( const const_children_iterator & other ) : node ( other.node ) { + } + + const_children_iterator & operator ++( ) { + ++node; + return * this; + } + + const_children_iterator operator ++( int ) { + const_children_iterator tmp ( * this ); + + operator ++( ); + return tmp; + } + + const_children_iterator & operator --( ) { + --node; + return * this; + } + + const_children_iterator operator --( int ) { + const_children_iterator tmp ( * this ); + + operator --( ); + return tmp; + } + + bool operator ==( const const_children_iterator & other ) { + return node == other.node; + } + + bool operator !=( const const_children_iterator & other ) { + return !( * this == other ); + } + + const T & operator *( ) const { + return node->getData ( ); + } + + size_t operator -( const const_children_iterator other ) const { + return node - other.node; + } + + const_children_iterator begin ( ) const { + return node->getChildren ( ).begin ( ); + } + + const_children_iterator end ( ) const { + return node->getChildren ( ).end ( ); + } + + const_children_iterator parent ( ) const { + return typename std::vector < tree_node >::const_iterator ( node->getParent ( ) ); + } + + private: + const tree_node & getTreeNode ( ) const { + return * node; + } + + typename std::vector < tree_node >::const_iterator getUnderlyingIterator ( ) const { + return node; + } + + template < class F, class G > + friend class tree; + }; + + class const_structure_iterator : public std::iterator < std::bidirectional_iterator_tag, T > { + typename std::vector < tree_node >::const_iterator node; + unsigned level; + + bool virtual_node; + bool isEnd; + + public: + const_structure_iterator ( typename std::vector < tree_node >::const_iterator node ) : node ( node ), level ( 0 ), virtual_node ( false ), isEnd ( false ) { + } + + const_structure_iterator ( const const_structure_iterator & other ) : node ( other.node ), level ( other.level ), virtual_node ( other.virtual_node ) { + } + + const_structure_iterator & operator ++( ) { + if ( virtual_node ) { + const tree_node * parent = node->getParent ( ); + + if ( parent != nullptr ) { + ++node; + + if ( node == parent->getChildren ( ).end ( ) ) { + --level; + node = typename std::vector < tree_node >::const_iterator ( parent ); + } else { + virtual_node = false; + } + } else { + ++node; + virtual_node = false; + isEnd = true; + } + } else { + typename std::vector < tree_node >::const_iterator newIter = node->getChildren ( ).begin ( ); + + if ( newIter != node->getChildren ( ).end ( ) ) { + ++level; + node = newIter; + } else { + virtual_node = true; + } + } + + return * this; + } + + const_structure_iterator operator ++( int ) { + const_structure_iterator tmp ( * this ); + + operator ++( ); + return tmp; + } + + const_structure_iterator & operator --( ) { + if ( isEnd ) { + --node; + virtual_node = true; + isEnd = false; + } else if ( virtual_node ) { + typename std::vector < tree_node >::const_iterator newIter = node->getChildren ( ).end ( ); + + if ( newIter != node->getChildren ( ).begin ( ) ) { + ++level; + node = newIter; + --node; + } else { + virtual_node = false; + } + } else { + const tree_node * parent = node->getParent ( ); + + if ( parent != nullptr ) { + if ( node == parent->getChildren ( ).begin ( ) ) { + --level; + node = typename std::vector < tree_node >::const_iterator ( parent ); + } else { + --node; + virtual_node = true; + } + } + } + + return * this; + } + + const_structure_iterator operator --( int ) { + const_structure_iterator tmp ( * this ); + + operator --( ); + return tmp; + } + + bool operator ==( const const_structure_iterator & other ) { + return node == other.node && virtual_node == other.virtual_node; + } + + bool operator !=( const const_structure_iterator & other ) { + return !( * this == other ); + } + + const T & operator *( ) const { + return node->getData ( ); + } + + unsigned getLevel ( ) const { + return level; + } + + bool getVirtual ( ) const { + return virtual_node; + } + + private: + const tree_node & getTreeNode ( ) const { + return * node; + } + + typename std::vector < tree_node >::const_iterator getUnderlyingIterator ( ) const { + return node; + } + + template < class F, class G > + friend class tree; + }; + + class const_prefix_iterator : public std::iterator < std::bidirectional_iterator_tag, T > { + const_structure_iterator node; + + public: + const_prefix_iterator ( typename std::vector < tree_node >::const_iterator node ) : node ( node ) { + } + + const_prefix_iterator ( const const_prefix_iterator & other ) : node ( other.node ) { + } + + const_prefix_iterator & operator ++( ) { + while ( ( ++node ).getVirtual ( ) ); + + return * this; + } + + const_prefix_iterator operator ++( int ) { + const_prefix_iterator tmp ( * this ); + + operator ++( ); + return tmp; + } + + const_prefix_iterator & operator --( ) { + while ( ( --node ).getVirtual ( ) ); + + return * this; + } + + const_prefix_iterator operator --( int ) { + const_prefix_iterator tmp ( * this ); + + operator --( ); + return tmp; + } + + bool operator ==( const const_prefix_iterator & other ) { + return node == other.node; + } + + bool operator !=( const const_prefix_iterator & other ) { + return !( * this == other ); + } + + const T & operator *( ) const { + return * node; + } + + unsigned getLevel ( ) const { + return node.getLevel ( ); + } + + private: + const tree_node & getTreeNode ( ) const { + return node.getTreeNode ( ); + } + + typename std::vector < tree_node >::const_iterator getUnderlyingIterator ( ) const { + return node.getUnderlyingIterator; + } + + template < class F, class G > + friend class tree; + }; + + class const_postfix_iterator : public std::iterator < std::bidirectional_iterator_tag, T > { + const_structure_iterator node; + + public: + const_postfix_iterator ( typename std::vector < tree_node >::const_iterator node ) : node ( node ) { + } + + const_postfix_iterator ( const const_postfix_iterator & other ) : node ( other.node ) { + } + + const_postfix_iterator & operator ++( ) { + while ( !( ++node ).getVirtual ( ) && !node.isEnd ); + + return * this; + } + + const_postfix_iterator operator ++( int ) { + const_postfix_iterator tmp ( * this ); + + operator ++( ); + return tmp; + } + + const_postfix_iterator & operator --( ) { + while ( !( --node ).getVirtual ( ) ); + + return * this; + } + + const_postfix_iterator operator --( int ) { + const_postfix_iterator tmp ( * this ); + + operator --( ); + return tmp; + } + + bool operator ==( const const_postfix_iterator & other ) { + return node == other.node; + } + + bool operator !=( const const_postfix_iterator & other ) { + return !( * this == other ); + } + + const T & operator *( ) const { + return * node; + } + + unsigned getLevel ( ) const { + return node.getLevel ( ); + } + + private: + const tree_node & getTreeNode ( ) const { + return node.getTreeNode ( ); + } + + typename std::vector < tree_node >::const_iterator getUnderlyingIterator ( ) const { + return node.getUnderlyingIterator ( ); + } + + template < class F, class G > + friend class tree; + }; + +// ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +private: + const_children_iterator insert_helper ( const_children_iterator under, const_children_iterator position, const_children_iterator begin, const_children_iterator end ) { + tree_node * under_node = const_cast < tree_node * > ( & under.getTreeNode ( ) ); + std::vector < tree_node > & children = const_cast < std::vector < tree_node > & > ( under_node->getChildren ( ) ); + + size_t insertedSize = end - begin; + + if ( !arityChecker ( * under, children.size ( ) + insertedSize ) ) + throw "Invalid number of children"; + + std::vector < tree_node > inserted; + + for ( const_children_iterator beginCopy = begin; beginCopy != end; ++beginCopy ) + inserted.push_back ( beginCopy.getTreeNode ( ) ); + + typename std::vector < tree_node >::iterator iter = children.insert ( position.getUnderlyingIterator ( ), inserted.begin ( ), inserted.end ( ) ); + + for ( typename std::vector < tree_node >::iterator iterCopy = iter; begin != end; ++begin, ++iterCopy ) + iterCopy->parent = under_node; + + typename std::vector < tree_node >::const_iterator citer = iter; + return citer; + } + +public: + const_children_iterator insert ( const_children_iterator under, const_children_iterator position, const tree < T, ArityChecker > & value ) { + std::vector < tree_node > & children = const_cast < std::vector < tree_node > & > ( under.getTreeNode ( ).getChildren ( ) ); + + typename std::vector < tree_node >::iterator iter = children.insert ( position.getUnderlyingIterator ( ), value.root ); + iter->parent = const_cast < tree_node * > ( & under.getTreeNode ( ) ); + typename std::vector < tree_node >::const_iterator res = iter; + return res; + } + + const_children_iterator insert ( const_children_iterator under, const_children_iterator position, tree < T, ArityChecker > && value ) { + std::vector < tree_node > & children = const_cast < std::vector < tree_node > & > ( under.getTreeNode ( ).getChildren ( ) ); + + typename std::vector < tree_node >::iterator iter = children.insert ( position.getUnderlyingIterator ( ), std::move ( value.root ) ); + iter->parent = const_cast < tree_node * > ( & under.getTreeNode ( ) ); + typename std::vector < tree_node >::const_iterator res = iter; + return res; + } + + template < class Iterator > + const_children_iterator insert ( const_children_iterator under, const_children_iterator position, Iterator begin, Iterator end ) { + std::vector < tree_node > children; + + for ( ; begin != end; ++begin ) + children.push_back ( tree_node ( * begin, { } ) ); + + return insert_helper ( under, position, children.cbegin ( ), children.cend ( ) ); + } + + const_children_iterator insert ( const_children_iterator under, const_children_iterator position, const_children_iterator begin, const_children_iterator end ) { + return insert_helper ( under, position, begin, end ); + } + +// ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +public: + tree ( const T & data, const std::vector < tree < T, ArityChecker > > & subtrees, ArityChecker arityChecker = ArityChecker ( ) ) : arityChecker ( arityChecker ), root ( data, fromTree ( subtrees ) ) { + if ( !arityChecker ( data, subtrees.size ( ) ) ) + throw "Invalid number of children"; + } + + template < typename ... Types > + tree ( const T & data, Types ... subtrees, ArityChecker arityChecker ) : tree ( data, std::vector < tree < T, ArityChecker > > { subtrees ... }, arityChecker ) { + } + + template < typename ... Types > + tree ( const T & data, Types ... subtrees ) : tree ( data, std::vector < tree < T, ArityChecker > > { subtrees ... }, ArityChecker ( ) ) { + } + + template < typename Iterator, typename std::enable_if < std::is_iterator < Iterator >::value >::type > + tree ( const T & data, Iterator begin, Iterator end ) : root ( data, { } ) { + std::vector < tree_node > children; + + for ( ; begin != end; ++begin ) + children.push_back ( tree_node ( * begin, { } ) ); + + insert_helper ( begin ( ), begin ( ).end ( ), children.cbegin ( ), children.cend ( ) ); + } + + tree ( const T & data, const_children_iterator begin, const_children_iterator end ) : root ( data, { } ) { + insert_helper ( begin ( ), begin ( ).end ( ), begin, end ); + } + +// ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + + const_children_iterator begin ( ) const { + return typename std::vector < tree_node >::const_iterator ( & root ); + } + + const_children_iterator end ( ) const { + return typename std::vector < tree_node >::const_iterator ( & root + 1 ); + } + +// ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + + const_prefix_iterator prefix_begin ( ) const { + return typename std::vector < tree_node >::const_iterator ( & root ); + } + + const_prefix_iterator prefix_end ( ) const { + const_prefix_iterator res ( typename std::vector < tree_node >::const_iterator ( & root + 1 ) ); + + res.node.isEnd = true; + return res; + } + +// ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + + const_postfix_iterator postfix_begin ( ) const { + const_postfix_iterator res { typename std::vector < tree_node >::const_iterator ( & root ) }; + + while ( !( res.node ).getVirtual ( ) ) ++res.node; + + return res; + } + + const_postfix_iterator postfix_end ( ) const { + const_postfix_iterator res ( typename std::vector < tree_node >::const_iterator ( & root + 1 ) ); + + res.node.isEnd = true; + return res; + } + +// ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + + const_structure_iterator structure_begin ( ) const { + return typename std::vector < tree_node >::const_iterator ( & root ); + } + + const_structure_iterator structure_end ( ) const { + const_structure_iterator res ( typename std::vector < tree_node >::const_iterator ( & root + 1 ) ); + + res.isEnd = true; + return res; + } + +// ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + + void push_back ( const_children_iterator under, const T & value ) { + std::vector < tree_node > & children = const_cast < std::vector < tree_node > & > ( under.getTreeNode ( ).getChildren ( ) ); + + if ( !arityChecker ( * under, children.size ( ) + 1 ) ) + throw "Invalid number of children"; + + children.push_back ( tree_node ( value, { } ) ); + std::prev ( children.end ( ) )->parent = const_cast < tree_node * > ( & under.getTreeNode ( ) ); + } + + void push_back ( const_children_iterator under, T && value ) { + std::vector < tree_node > & children = const_cast < std::vector < tree_node > & > ( under.getTreeNode ( ).getChildren ( ) ); + + if ( !arityChecker ( * under, children.size ( ) + 1 ) ) + throw "Invalid number of children"; + + children.push_back ( tree_node ( std::move ( value ), { } ) ); + std::prev ( children.end ( ) )->parent = const_cast < tree_node * > ( & under.getTreeNode ( ) ); + } + +// ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + + const_children_iterator erase ( const_children_iterator under, const_children_iterator position ) { + std::vector < tree_node > & children = const_cast < std::vector < tree_node > & > ( under.getTreeNode ( ).getChildren ( ) ); + + if ( !arityChecker ( * under, children.size ( ) - 1 ) ) + throw "Invalid number of children"; + + typename std::vector < tree_node >::iterator iter = children.erase ( position.getUnderlyingIterator ( ) ); + typename std::vector < tree_node >::const_iterator res = iter; + return res; + } + + // ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + + template < class ... Indexes > + const T & operator ()( Indexes ... indexes ) const { + const tree_node * node = & root; + + ( void ) std::initializer_list < int > { ( node = & node->getChildren ( )[indexes], 0 ) ... }; + + return node->getData ( ); + } + +private: + class SubscriptAccess { + tree_node * node; + const ArityChecker & arityChecker; + + public: + SubscriptAccess ( tree_node * node, const ArityChecker & arityChecker ) : node ( node ), arityChecker ( arityChecker ) { + } + + SubscriptAccess ( const SubscriptAccess & ) = delete; + SubscriptAccess ( SubscriptAccess && ) = delete; + + SubscriptAccess & operator =( const SubscriptAccess & ) = delete; + SubscriptAccess & operator =( SubscriptAccess && ) = delete; + + operator const T &( ) { + return node->getData ( ); + } + + SubscriptAccess & operator =( const T & data ) { + if ( !arityChecker ( data, node->getChildren ( ).size ( ) ) ) + throw "Invalid number of children"; + + node->getData ( ) = data; + + return * this; + } + + SubscriptAccess & operator =( const tree < T, ArityChecker > & data ) { + * node = data.root; + + return * this; + } + + friend void swap ( SubscriptAccess && first, SubscriptAccess && second ) { + tree_node tmp = std::move ( * first.node ); + + * first.node = std::move ( * second.node ); + * second.node = std::move ( tmp ); + } + + }; + +public: + template < class ... Indexes > + SubscriptAccess operator ()( Indexes ... indexes ) { + tree_node * node = & root; + + ( void ) std::initializer_list < int > { ( node = & node->getChildren ( )[indexes], 0 ) ... }; + + return { node, arityChecker }; + } + +// ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + + bool checkStructure ( const tree_node & node ) const { + bool sign = true; + + for ( const tree_node & child : node.getChildren ( ) ) + sign &= child.getParent ( ) == & node && checkStructure ( child ); + + return sign; + } + + bool checkStructure ( ) const { + return root.parent == nullptr && checkStructure ( root ); + } + +// ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + + friend void swap ( tree & first, tree & second ) { + swap ( std::move ( first ( ) ), std::move ( second ( ) ) ); + } + +// ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + int compare ( const tree & other ) const { + std::compare < typename std::decay < T >::type > comp; + auto iterF = this->prefix_begin ( ); + auto iterS = other.prefix_begin ( ); + + for ( ; iterF != this->prefix_end ( ) || iterS != other.prefix_end ( ); ++iterF, ++iterS ) { + int res = comp ( * iterF, * iterS ); + + if ( res != 0 ) return res; + } + + if ( iterF != this->prefix_end ( ) ) return -1; + + if ( iterS != other.prefix_end ( ) ) return 1; + + return 0; + } + + bool operator ==( const tree & other ) { + return compare ( other ) == 0; + } + + bool operator !=( const tree & other ) { + return compare ( other ) != 0; + } + + bool operator <( const tree & other ) { + return compare ( other ) < 0; + } + + bool operator <=( const tree & other ) { + return compare ( other ) <= 0; + } + + bool operator >( const tree & other ) { + return compare ( other ) > 0; + } + + bool operator >=( const tree & other ) { + return compare ( other ) >= 0; + } + +}; + +template < class T, class ... Ts > +std::ostream & operator <<( std::ostream & out, const tree < T, Ts ... > & t ) { + out << "["; + + unsigned level = 0; + + for ( typename tree < T, Ts ... >::const_prefix_iterator iter = t.prefix_begin ( ); iter != t.prefix_end ( ); ) { + while ( iter.getLevel ( ) > level ) { + out << "["; + ++level; + } + + out << level << * iter; + ++iter; + + bool printComma = iter.getLevel ( ) == level; + + while ( iter.getLevel ( ) < level ) { + out << "]"; + --level; + printComma = true; + } + + if ( printComma && ( level != 0 ) ) + out << ","; + } + + out << "]"; + return out; +} + +template < class T, class ... Ts > +struct compare < tree < T, Ts ... > > { + int operator ()( const tree < T, Ts ... > & first, const tree < T, Ts ... > & second ) const { + return first.compare ( second ); + } + +}; + +// ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + template < class Data > class BaseNode { Data * parent; @@ -375,7 +1147,7 @@ public: typename std::vector < Data >::iterator insert ( typename std::vector < Data >::iterator it, Data d ) { it = children.insert ( it, std::move ( d ) ); - ( * std::prev ( it ) ) -> parent = static_cast < Cast * > ( this ); + ( * std::prev ( it ) )->parent = static_cast < Cast * > ( this ); return it; } diff --git a/alib2std/src/tree b/alib2std/src/tree index 136d7e05689c788e900a7b3022f13f9a3705ab81..32683cb54c727c8a7e787bb37507500317863bb0 100644 --- a/alib2std/src/tree +++ b/alib2std/src/tree @@ -4,6 +4,7 @@ #include <memory> #include <vector> #include <tuple> +#include "iterator" #include "extensions/tree.hpp" #endif /* __TREE_HEADER_WRAPPER */ diff --git a/alib2std/test-src/extensions/TreeTest.cpp b/alib2std/test-src/extensions/TreeTest.cpp index 23f062e51b0eb42ae25cf94bbef5381fb97245b3..c9e3d92790172bfe1fb7ccb5b5800dcfd5e2d716 100644 --- a/alib2std/test-src/extensions/TreeTest.cpp +++ b/alib2std/test-src/extensions/TreeTest.cpp @@ -40,3 +40,152 @@ void TreeTest::testRankedTree ( ) { void TreeTest::testUnrankedTree ( ) { } + +void print_tree ( std::tree < char >::const_children_iterator biter, std::tree < char >::const_children_iterator eiter, std::string indent ) { + for ( std::tree < char >::const_children_iterator iter = biter; iter != eiter; iter++ ) { + std::cout << indent << * iter << std::endl; + print_tree ( iter.begin ( ), iter.end ( ), indent + " " ); + } +} + +struct RankedArityChecker { + bool operator ()( char symbol, unsigned wantedRank ) const { + switch ( symbol ) { + case 'a': + return wantedRank == 2; + + case 'b': + return wantedRank == 1; + + default: + return wantedRank == 0; + } + } + +}; + +void TreeTest::testTreeStdStructure ( ) { + std::tree < char > t ( 'a', std::tree < char > ( 'a' ), std::tree < char > ( 'b', std::tree < char > ( 'a' ), std::tree < char > ( 'b' ) ) ); + + // std::cout << "structure t " << std::boolalpha << t.checkStructure() << std::endl; + + std::tree < char > t2 ( 'c' ); + + // std::cout << "structure t2 " << std::boolalpha << t2.checkStructure() << std::endl; + t2.insert ( t2.begin ( ), t2.begin ( ).begin ( ), { 'c', std::tree < char > ( 'b' ) } ); + CPPUNIT_ASSERT ( t2.checkStructure ( ) ); + + t2.insert ( t2.begin ( ), t2.begin ( ).end ( ), t.begin ( ), t.end ( ) ); + CPPUNIT_ASSERT ( t2.checkStructure ( ) ); + + std::vector < char > data = { 'd', 'e' }; + t2.insert ( t2.begin ( ), t2.begin ( ).end ( ), data.begin ( ), data.end ( ) ); + CPPUNIT_ASSERT ( t2.checkStructure ( ) ); + + // print_tree ( t.begin(), t.end(), ""); + + t2.erase ( t2.begin ( ), std::prev ( t2.begin ( ).end ( ) ) ); + CPPUNIT_ASSERT ( t2.checkStructure ( ) ); + t2.push_back ( t2.begin ( ), 'f' ); + CPPUNIT_ASSERT ( t2.checkStructure ( ) ); + + // print_tree ( t2.begin(), t2.end(), ""); + + CPPUNIT_ASSERT_EQUAL ( ( char ) t2 ( 1, 1 ), 'b' ); + t2 ( 1, 1 ) = 'c'; + CPPUNIT_ASSERT_EQUAL ( ( char ) t2 ( 1, 1 ), 'c' ); + + CPPUNIT_ASSERT ( t2.checkStructure ( ) ); + std::tree < char >::const_prefix_iterator beg = t2.prefix_begin ( ); + beg++; + beg++; + beg++; + beg++; + beg++; + beg++; + beg++; + beg--; + beg--; + beg--; + beg--; + beg--; + beg--; + beg--; + + CPPUNIT_ASSERT ( beg == t2.prefix_begin ( ) ); + std::cout << t2 << std::endl; + std::stringstream ss; + ss << t2; + CPPUNIT_ASSERT ( ss.str ( ) == "[0c[1c[2b],1a[2a,2c[3a,3b]],1d,1f]]" ); + + std::vector < std::pair < unsigned, char > > expectedPrefix = { { 0, 'c' }, { 1, 'c' }, { 2, 'b' }, { 1, 'a' }, { 2, 'a' }, { 2, 'c' }, { 3, 'a' }, { 3, 'b' }, { 1, 'd' }, { 1, 'f' } }; + std::vector < std::pair < unsigned, char > >::const_iterator ref = expectedPrefix.begin ( ); + + for ( std::tree < char >::const_prefix_iterator iter = t2.prefix_begin ( ); iter != t2.prefix_end ( ); ++iter ) { + CPPUNIT_ASSERT ( iter.getLevel ( ) == ref->first ); + CPPUNIT_ASSERT ( * iter == ref->second ); + ++iter; + --iter; + ++ref; + } + + std::vector < std::tuple < unsigned, char, bool > > expectedStructure = { std::make_tuple ( 0u, 'c', false ), std::make_tuple ( 1u, 'c', false ), std::make_tuple ( 2u, 'b', false ), std::make_tuple ( 2u, 'b', true ), std::make_tuple ( 1u, 'c', true ), std::make_tuple ( 1u, 'a', false ), std::make_tuple ( 2u, 'a', false ), std::make_tuple ( 2u, 'a', true ), std::make_tuple ( 2u, 'c', false ), std::make_tuple ( 3u, 'a', false ), std::make_tuple ( 3u, 'a', true ), std::make_tuple ( 3u, 'b', false ), std::make_tuple ( 3u, 'b', true ), std::make_tuple ( 2u, 'c', true ), std::make_tuple ( 1u, 'a', true ), std::make_tuple ( 1u, 'd', false ), std::make_tuple ( 1u, 'd', true ), std::make_tuple ( 1u, 'f', false ), std::make_tuple ( 1u, 'f', true ), std::make_tuple ( 0u, 'c', true ) }; + std::vector < std::tuple < unsigned, char, bool > >::const_iterator ref2 = expectedStructure.begin ( ); + + for ( std::tree < char >::const_structure_iterator iter = t2.structure_begin ( ); iter != t2.structure_end ( ); ++iter ) { + CPPUNIT_ASSERT ( iter.getLevel ( ) == std::get < 0 > ( * ref2 ) ); + CPPUNIT_ASSERT ( * iter == std::get < 1 > ( * ref2 ) ); + CPPUNIT_ASSERT ( iter.getVirtual ( ) == std::get < 2 > ( * ref2 ) ); + ++iter; + --iter; + ++ref2; + } + + std::vector < std::pair < unsigned, char > > expectedPostfix = { { 2, 'b' }, { 1, 'c' }, { 2, 'a' }, { 3, 'a' }, { 3, 'b' }, { 2, 'c' }, { 1, 'a' }, { 1, 'd' }, { 1, 'f' }, { 0, 'c' } }; + std::vector < std::pair < unsigned, char > >::const_iterator ref3 = expectedPostfix.begin ( ); + + for ( std::tree < char >::const_postfix_iterator iter = t2.postfix_begin ( ); iter != t2.postfix_end ( ); ++iter ) { + CPPUNIT_ASSERT ( iter.getLevel ( ) == ref3->first ); + CPPUNIT_ASSERT ( * iter == ref3->second ); + ++iter; + --iter; + ++ref3; + } + + std::tree < char, RankedArityChecker > rt ( 'a', std::tree < char, RankedArityChecker > ( 'b', std::tree < char, RankedArityChecker > ( 'c' ) ), std::tree < char, RankedArityChecker > ( 'c' ) ); + + CPPUNIT_ASSERT_EQUAL ( ( char ) rt ( 0, 0 ), 'c' ); + rt ( 0, 0 ) = 'd'; + CPPUNIT_ASSERT_EQUAL ( ( char ) rt ( 0, 0 ), 'd' ); + rt ( 0, 0 ) = std::tree < char, RankedArityChecker > ( 'e' ); + CPPUNIT_ASSERT_EQUAL ( ( char ) rt ( 0, 0 ), 'e' ); + CPPUNIT_ASSERT ( rt.checkStructure ( ) ); + + std::cout << rt << std::endl; + swap ( rt ( 0 ), rt ( 1 ) ); + CPPUNIT_ASSERT ( rt.checkStructure ( ) ); + std::cout << rt << std::endl; + std::stringstream ss2; + ss2 << rt; + CPPUNIT_ASSERT ( ss2.str ( ) == "[0a[1c,1b[2e]]]" ); + + std::tree < char, RankedArityChecker > rt2 ( 'c' ); + swap ( rt, rt2 ); + + CPPUNIT_ASSERT ( rt.checkStructure ( ) ); + std::cout << rt << std::endl; + std::stringstream ss3; + ss3 << rt; + CPPUNIT_ASSERT ( ss3.str ( ) == "[0c]" ); + std::cout << rt2 << std::endl; + + std::tree < char > cmp1 ( 'a' ); + std::tree < char > cmp2 ( 'b' ); + std::tree < char > cmp3 ( 'c' ); + + CPPUNIT_ASSERT ( cmp1 < cmp2 ); + CPPUNIT_ASSERT ( cmp2 < cmp3 ); + CPPUNIT_ASSERT ( cmp2 <= cmp3 ); + CPPUNIT_ASSERT ( cmp2 == cmp2 ); + CPPUNIT_ASSERT ( cmp1 != cmp2 ); +} diff --git a/alib2std/test-src/extensions/TreeTest.h b/alib2std/test-src/extensions/TreeTest.h index 41c6695f6d24528bc702c54a2632127f829a1e18..12989ce28014ca4b51b59f4d57b543d4c311d7ce 100644 --- a/alib2std/test-src/extensions/TreeTest.h +++ b/alib2std/test-src/extensions/TreeTest.h @@ -10,6 +10,7 @@ class TreeTest : public CppUnit::TestFixture { CPPUNIT_TEST ( testRegexps ); CPPUNIT_TEST ( testRankedTree ); CPPUNIT_TEST ( testUnrankedTree ); + CPPUNIT_TEST ( testTreeStdStructure ); CPPUNIT_TEST_SUITE_END ( ); public: @@ -100,6 +101,7 @@ public: void testRegexps ( ); void testRankedTree ( ); void testUnrankedTree ( ); + void testTreeStdStructure(); }; #endif // TREE_TEST_H_