From dbb93885c59df16785e7da6a579c332d3fc6fcf7 Mon Sep 17 00:00:00 2001 From: Jan Travnicek <Jan.Travnicek@fit.cvut.cz> Date: Wed, 20 Jul 2016 22:03:30 +0200 Subject: [PATCH] some fixes in existing tree representations --- alib2data/src/tree/ranked/PrefixRankedBarPattern.cpp | 2 +- alib2data/src/tree/ranked/PrefixRankedPattern.cpp | 6 +++--- alib2data/src/tree/ranked/RankedNonlinearPattern.cpp | 6 ++++++ alib2data/src/tree/ranked/RankedPattern.cpp | 4 +++- 4 files changed, 13 insertions(+), 5 deletions(-) diff --git a/alib2data/src/tree/ranked/PrefixRankedBarPattern.cpp b/alib2data/src/tree/ranked/PrefixRankedBarPattern.cpp index d47f287ed4..c00edfa6d6 100644 --- a/alib2data/src/tree/ranked/PrefixRankedBarPattern.cpp +++ b/alib2data/src/tree/ranked/PrefixRankedBarPattern.cpp @@ -243,7 +243,7 @@ auto prefixRankedBarPatternParserRegister2 = xmlApi < tree::RankedTreeWrapper >: auto prefixRankedBarPatternParserRegister3 = xmlApi < alib::Object >::ParserRegister < tree::PrefixRankedBarPattern > (); auto PrefixRankedBarPatternFromRankedPattern = castApi::CastRegister < tree::PrefixRankedBarPattern, tree::RankedPattern > ( ); -auto PrefixRankedBarPatternFromRankedTree = castApi::CastRegister < tree::PrefixRankedBarPattern, tree::PrefixRankedBarTree > ( ); +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/PrefixRankedPattern.cpp b/alib2data/src/tree/ranked/PrefixRankedPattern.cpp index 6b4895ff8e..fad5af6a8d 100644 --- a/alib2data/src/tree/ranked/PrefixRankedPattern.cpp +++ b/alib2data/src/tree/ranked/PrefixRankedPattern.cpp @@ -28,14 +28,14 @@ namespace tree { -PrefixRankedPattern::PrefixRankedPattern ( alphabet::RankedSymbol subtreeWildcard, std::set < alphabet::RankedSymbol > alphabet, std::vector < alphabet::RankedSymbol > data ) : std::Components < PrefixRankedPattern, alphabet::RankedSymbol, std::tuple < GeneralAlphabet >, std::tuple < SubtreeWildcard > > ( std::make_tuple ( std::move ( alphabet ) + std::set < alphabet::RankedSymbol > { subtreeWildcard } ), std::make_tuple ( subtreeWildcard ) ) { +PrefixRankedPattern::PrefixRankedPattern ( alphabet::RankedSymbol subtreeWildcard, std::set < alphabet::RankedSymbol > alphabet, std::vector < alphabet::RankedSymbol > data ) : std::Components < PrefixRankedPattern, alphabet::RankedSymbol, std::tuple < GeneralAlphabet >, std::tuple < SubtreeWildcard > > ( std::make_tuple ( std::move ( alphabet ) ), std::make_tuple ( subtreeWildcard ) ) { setContent ( std::move ( data ) ); } -PrefixRankedPattern::PrefixRankedPattern ( alphabet::RankedSymbol subtreeWildcard, std::vector < alphabet::RankedSymbol > data ) : PrefixRankedPattern ( std::move ( subtreeWildcard ), std::set < alphabet::RankedSymbol > ( data.begin ( ), data.end ( ) ), std::move ( data ) ) { +PrefixRankedPattern::PrefixRankedPattern ( alphabet::RankedSymbol subtreeWildcard, std::vector < alphabet::RankedSymbol > data ) : PrefixRankedPattern ( std::move ( subtreeWildcard ), std::set < alphabet::RankedSymbol > ( data.begin ( ), data.end ( ) ) + std::set < alphabet::RankedSymbol > { subtreeWildcard }, std::move ( data ) ) { } -PrefixRankedPattern::PrefixRankedPattern ( const PrefixRankedTree & tree ) : PrefixRankedPattern ( alphabet::SubtreeWildcardSymbol::RANKED_SUBTREE_WILDCARD_SYMBOL, tree.getAlphabet ( ), tree.getContent ( ) ) { +PrefixRankedPattern::PrefixRankedPattern ( const PrefixRankedTree & tree ) : PrefixRankedPattern ( alphabet::SubtreeWildcardSymbol::RANKED_SUBTREE_WILDCARD_SYMBOL, tree.getAlphabet ( ) + std::set < alphabet::RankedSymbol > { alphabet::SubtreeWildcardSymbol::RANKED_SUBTREE_WILDCARD_SYMBOL }, tree.getContent ( ) ) { } PrefixRankedPattern::PrefixRankedPattern ( const RankedPattern & tree ) : PrefixRankedPattern ( tree.getSubtreeWildcard ( ), tree.getAlphabet ( ), toPrefixRanked ( tree.getRoot ( ), tree.getSubtreeWildcard ( ) ) ) { diff --git a/alib2data/src/tree/ranked/RankedNonlinearPattern.cpp b/alib2data/src/tree/ranked/RankedNonlinearPattern.cpp index 9ae77324a9..c5c344b5f1 100644 --- a/alib2data/src/tree/ranked/RankedNonlinearPattern.cpp +++ b/alib2data/src/tree/ranked/RankedNonlinearPattern.cpp @@ -167,6 +167,9 @@ template < > void tree::RankedNonlinearPattern::Component < tree::RankedNonlinearPattern, alphabet::RankedSymbol, tree::NonlinearAlphabet >::valid ( const alphabet::RankedSymbol & symbol ) const { const tree::RankedNonlinearPattern * pattern = static_cast < const tree::RankedNonlinearPattern * > ( this ); + if( symbol.getRank().getData() != 0 ) + throw tree::TreeException ( "SubtreeWildcard symbol has nonzero arity" ); + if ( pattern->accessElement < tree::SubtreeWildcard > ( ).get ( ) == symbol ) throw tree::TreeException ( "Symbol " + ( std::string ) symbol + "cannot be set as nonlinear variable since it is already subtree wildcard" ); } @@ -182,6 +185,9 @@ template < > void tree::RankedNonlinearPattern::Element < tree::RankedNonlinearPattern, alphabet::RankedSymbol, tree::SubtreeWildcard >::valid ( const alphabet::RankedSymbol & symbol ) const { const tree::RankedNonlinearPattern * pattern = static_cast < const tree::RankedNonlinearPattern * > ( this ); + if( symbol.getRank().getData() != 0 ) + throw tree::TreeException ( "SubtreeWildcard symbol has nonzero arity" ); + if ( pattern->accessComponent < tree::NonlinearAlphabet > ( ).get ( ).count ( symbol ) ) throw tree::TreeException ( "Symbol " + ( std::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 1d7d77d952..4f6548c76f 100644 --- a/alib2data/src/tree/ranked/RankedPattern.cpp +++ b/alib2data/src/tree/ranked/RankedPattern.cpp @@ -154,7 +154,9 @@ bool tree::RankedPattern::Element < tree::RankedPattern, alphabet::RankedSymbol, } template < > -void tree::RankedPattern::Element < tree::RankedPattern, alphabet::RankedSymbol, tree::SubtreeWildcard >::valid ( const alphabet::RankedSymbol & ) const { +void tree::RankedPattern::Element < tree::RankedPattern, alphabet::RankedSymbol, tree::SubtreeWildcard >::valid ( const alphabet::RankedSymbol & symbol ) const { + if( symbol.getRank().getData() != 0 ) + throw tree::TreeException ( "SubtreeWildcard symbol has nonzero arity" ); } } /* namespace std */ -- GitLab