diff --git a/alib2data/src/tree/ranked/PrefixRankedBarPattern.cpp b/alib2data/src/tree/ranked/PrefixRankedBarPattern.cpp index d47f287ed41ddef7d3e5d7d0b903dbe5ccdf7d28..c00edfa6d64e180428fc3b990796b60fd83bc19a 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 6b4895ff8e4c97110f1e5c5a849d70cf9ef530af..fad5af6a8d9aeb8b904999b5aa7f5b11c9c45fc8 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 9ae77324a9c33c9e9a8608da56915d9d3a242aa9..c5c344b5f171a88591b8bd74946d4e2b01bb869e 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 1d7d77d9528467331472f9c7e044f82672845af8..4f6548c76ff888d480bf3f0817c1cb0ada665ef3 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 */