From cfbaa1d896da4ce79a86f272ee304c84eb9050b5 Mon Sep 17 00:00:00 2001 From: Jan Travnicek <Jan.Travnicek@fit.cvut.cz> Date: Sun, 27 Sep 2015 21:44:32 +0200 Subject: [PATCH] unsigned save comparison --- .../src/arbology/exact/ExactSubtreeMatch.cpp | 111 ++++++++++-------- .../stringology/exact/ExactFactorMatch.cpp | 24 ++-- 2 files changed, 74 insertions(+), 61 deletions(-) diff --git a/alib2algo/src/arbology/exact/ExactSubtreeMatch.cpp b/alib2algo/src/arbology/exact/ExactSubtreeMatch.cpp index f711c038fe..fd29de4a55 100644 --- a/alib2algo/src/arbology/exact/ExactSubtreeMatch.cpp +++ b/alib2algo/src/arbology/exact/ExactSubtreeMatch.cpp @@ -19,93 +19,104 @@ namespace arbology { namespace exact { -std::set<unsigned> ExactSubtreeMatch::match(const tree::Tree& subject, const tree::Tree& pattern) { - return getInstance().dispatch(subject.getData(), pattern.getData()); +std::set < unsigned > ExactSubtreeMatch::match ( const tree::Tree & subject, const tree::Tree & pattern ) { + return getInstance ( ).dispatch ( subject.getData ( ), pattern.getData ( ) ); } -bool ExactSubtreeMatch::matchHelper(const tree::UnrankedNode& subject, const tree::UnrankedNode& pattern) { - if(subject.getSymbol() != pattern.getSymbol()) return false; - if(subject.getChildren().size() != pattern.getChildren().size()) return false; - for(const std::tuple<const tree::UnrankedNode*, const tree::UnrankedNode*>& childs : std::make_pair_foreach(subject.getChildren(), pattern.getChildren())) { - if(!matchHelper(*std::get<0>(childs), *std::get<1>(childs))) return false; - } +bool ExactSubtreeMatch::matchHelper ( const tree::UnrankedNode & subject, const tree::UnrankedNode & pattern ) { + if ( subject.getSymbol ( ) != pattern.getSymbol ( ) ) return false; + + if ( subject.getChildren ( ).size ( ) != pattern.getChildren ( ).size ( ) ) return false; + + for ( const std::tuple < const tree::UnrankedNode *, const tree::UnrankedNode * > & childs : std::make_pair_foreach ( subject.getChildren ( ), pattern.getChildren ( ) ) ) + if ( !matchHelper ( * std::get < 0 > ( childs ), * std::get < 1 > ( childs ) ) ) return false; + return true; } -bool ExactSubtreeMatch::matchHelper(const tree::RankedNode& subject, const tree::RankedNode& pattern) { - if(subject.getSymbol() != pattern.getSymbol()) return false; - // ranked symbols are the same; test for number of children is not needed - for(const std::tuple<const tree::RankedNode*, const tree::RankedNode*>& childs : std::make_pair_foreach(subject.getChildren(), pattern.getChildren())) { - if(!matchHelper(*std::get<0>(childs), *std::get<1>(childs))) return false; - } +bool ExactSubtreeMatch::matchHelper ( const tree::RankedNode & subject, const tree::RankedNode & pattern ) { + if ( subject.getSymbol ( ) != pattern.getSymbol ( ) ) return false; + + // ranked symbols are the same; test for number of children is not needed + for ( const std::tuple < const tree::RankedNode *, const tree::RankedNode * > & childs : std::make_pair_foreach ( subject.getChildren ( ), pattern.getChildren ( ) ) ) + if ( !matchHelper ( * std::get < 0 > ( childs ), * std::get < 1 > ( childs ) ) ) return false; + return true; } -void ExactSubtreeMatch::matchInternal(unsigned& index, std::set<unsigned>& occ, const tree::UnrankedNode& subject, const tree::UnrankedNode& pattern) { - if(matchHelper(subject, pattern)) occ.insert(index); +void ExactSubtreeMatch::matchInternal ( unsigned & index, std::set < unsigned > & occ, const tree::UnrankedNode & subject, const tree::UnrankedNode & pattern ) { + if ( matchHelper ( subject, pattern ) ) occ.insert ( index ); + index++; - for(const tree::UnrankedNode* child : subject.getChildren()) { - matchInternal(index, occ, *child, pattern); - } + + for ( const tree::UnrankedNode * child : subject.getChildren ( ) ) + matchInternal ( index, occ, * child, pattern ); } -void ExactSubtreeMatch::matchInternal(unsigned& index, std::set<unsigned>& occ, const tree::RankedNode& subject, const tree::RankedNode& pattern) { - if(matchHelper(subject, pattern)) occ.insert(index); +void ExactSubtreeMatch::matchInternal ( unsigned & index, std::set < unsigned > & occ, const tree::RankedNode & subject, const tree::RankedNode & pattern ) { + if ( matchHelper ( subject, pattern ) ) occ.insert ( index ); + index++; - for(const tree::RankedNode* child : subject.getChildren()) { - matchInternal(index, occ, *child, pattern); - } + + for ( const tree::RankedNode * child : subject.getChildren ( ) ) + matchInternal ( index, occ, * child, pattern ); } -std::set<unsigned> ExactSubtreeMatch::match(const tree::UnrankedTree& subject, const tree::UnrankedTree& pattern) { +std::set < unsigned > ExactSubtreeMatch::match ( const tree::UnrankedTree & subject, const tree::UnrankedTree & pattern ) { unsigned i = 0; - std::set<unsigned> occ; - matchInternal(i, occ, subject.getRoot(), pattern.getRoot()); + std::set < unsigned > occ; + + matchInternal ( i, occ, subject.getRoot ( ), pattern.getRoot ( ) ); return occ; } -auto ExactSubtreeMatchUnrankedTree = ExactSubtreeMatch::RegistratorWrapper<std::set<unsigned>, tree::UnrankedTree>(ExactSubtreeMatch::getInstance(), ExactSubtreeMatch::match); +auto ExactSubtreeMatchUnrankedTree = ExactSubtreeMatch::RegistratorWrapper < std::set < unsigned >, tree::UnrankedTree > ( ExactSubtreeMatch::getInstance ( ), ExactSubtreeMatch::match ); -std::set<unsigned> ExactSubtreeMatch::match(const tree::RankedTree& subject, const tree::RankedTree& pattern) { +std::set < unsigned > ExactSubtreeMatch::match ( const tree::RankedTree & subject, const tree::RankedTree & pattern ) { unsigned i = 0; - std::set<unsigned> occ; - matchInternal(i, occ, subject.getRoot(), pattern.getRoot()); + std::set < unsigned > occ; + + matchInternal ( i, occ, subject.getRoot ( ), pattern.getRoot ( ) ); return occ; } -auto ExactSubtreeMatchRankedTree = ExactSubtreeMatch::RegistratorWrapper<std::set<unsigned>, tree::RankedTree>(ExactSubtreeMatch::getInstance(), ExactSubtreeMatch::match); +auto ExactSubtreeMatchRankedTree = ExactSubtreeMatch::RegistratorWrapper < std::set < unsigned >, tree::RankedTree > ( ExactSubtreeMatch::getInstance ( ), ExactSubtreeMatch::match ); + +std::set < unsigned > ExactSubtreeMatch::match ( const tree::PrefixRankedTree & subject, const tree::PrefixRankedTree & pattern ) { + std::set < unsigned > occ; -std::set<unsigned> ExactSubtreeMatch::match(const tree::PrefixRankedTree& subject, const tree::PrefixRankedTree& pattern) { - std::set<unsigned> occ; - for(unsigned i = 0; i <= subject.getContent().size() - pattern.getContent().size(); i++) { + for ( unsigned i = 0; i + pattern.getContent ( ).size ( ) <= subject.getContent ( ).size ( ); i++ ) { unsigned j = 0; - for(; j < pattern.getContent().size(); j++) { - if(pattern.getContent()[j] != subject.getContent()[i+j]) break; - } - if( j == pattern.getContent().size() ) - occ.insert(i); + for ( ; j < pattern.getContent ( ).size ( ); j++ ) + if ( pattern.getContent ( )[j] != subject.getContent ( )[i + j] ) break; + + if ( j == pattern.getContent ( ).size ( ) ) + occ.insert ( i ); } + return occ; } -auto ExactSubtreeMatchPrefixRankedTree = ExactSubtreeMatch::RegistratorWrapper<std::set<unsigned>, tree::PrefixRankedTree>(ExactSubtreeMatch::getInstance(), ExactSubtreeMatch::match); +auto ExactSubtreeMatchPrefixRankedTree = ExactSubtreeMatch::RegistratorWrapper < std::set < unsigned >, tree::PrefixRankedTree > ( ExactSubtreeMatch::getInstance ( ), ExactSubtreeMatch::match ); + +std::set < unsigned > ExactSubtreeMatch::match ( const tree::PrefixRankedBarTree & subject, const tree::PrefixRankedBarTree & pattern ) { + std::set < unsigned > occ; -std::set<unsigned> ExactSubtreeMatch::match(const tree::PrefixRankedBarTree& subject, const tree::PrefixRankedBarTree& pattern) { - std::set<unsigned> occ; - for(unsigned i = 0; i <= subject.getContent().size() - pattern.getContent().size(); i++) { + for ( unsigned i = 0; i + pattern.getContent ( ).size ( ) <= subject.getContent ( ).size ( ); i++ ) { unsigned j = 0; - for(; j < pattern.getContent().size(); j++) { - if(pattern.getContent()[j] != subject.getContent()[i+j]) break; - } - if( j == pattern.getContent().size() ) - occ.insert(i); + for ( ; j < pattern.getContent ( ).size ( ); j++ ) + if ( pattern.getContent ( )[j] != subject.getContent ( )[i + j] ) break; + + if ( j == pattern.getContent ( ).size ( ) ) + occ.insert ( i ); } + return occ; } -auto ExactSubtreeMatchPrefixRankedBarTree = ExactSubtreeMatch::RegistratorWrapper<std::set<unsigned>, tree::PrefixRankedBarTree>(ExactSubtreeMatch::getInstance(), ExactSubtreeMatch::match); +auto ExactSubtreeMatchPrefixRankedBarTree = ExactSubtreeMatch::RegistratorWrapper < std::set < unsigned >, tree::PrefixRankedBarTree > ( ExactSubtreeMatch::getInstance ( ), ExactSubtreeMatch::match ); } /* namespace exact */ diff --git a/alib2algo/src/stringology/exact/ExactFactorMatch.cpp b/alib2algo/src/stringology/exact/ExactFactorMatch.cpp index 556983b527..3dc99ab829 100644 --- a/alib2algo/src/stringology/exact/ExactFactorMatch.cpp +++ b/alib2algo/src/stringology/exact/ExactFactorMatch.cpp @@ -15,25 +15,27 @@ namespace stringology { namespace exact { -std::set<unsigned> ExactFactorMatch::match(const string::String& subject, const string::String& pattern) { - return getInstance().dispatch(subject.getData(), pattern.getData()); +std::set < unsigned > ExactFactorMatch::match ( const string::String & subject, const string::String & pattern ) { + return getInstance ( ).dispatch ( subject.getData ( ), pattern.getData ( ) ); } -std::set<unsigned> ExactFactorMatch::match(const string::LinearString& subject, const string::LinearString& pattern) { - std::set<unsigned> occ; - for(unsigned i = 0; i <= subject.getContent().size() - pattern.getContent().size(); i++) { +std::set < unsigned > ExactFactorMatch::match ( const string::LinearString & subject, const string::LinearString & pattern ) { + std::set < unsigned > occ; + + for ( unsigned i = 0; i + pattern.getContent ( ).size ( ) <= subject.getContent ( ).size ( ); i++ ) { unsigned j = 0; - for(; j < pattern.getContent().size(); j++) { - if(pattern.getContent()[j] != subject.getContent()[i+j]) break; - } - if( j == pattern.getContent().size() ) - occ.insert(i); + for ( ; j < pattern.getContent ( ).size ( ); j++ ) + if ( pattern.getContent ( )[j] != subject.getContent ( )[i + j] ) break; + + if ( j == pattern.getContent ( ).size ( ) ) + occ.insert ( i ); } + return occ; } -auto ExactFactorMatchLinearString = ExactFactorMatch::RegistratorWrapper<std::set<unsigned>, string::LinearString>(ExactFactorMatch::getInstance(), ExactFactorMatch::match); +auto ExactFactorMatchLinearString = ExactFactorMatch::RegistratorWrapper < std::set < unsigned >, string::LinearString > ( ExactFactorMatch::getInstance ( ), ExactFactorMatch::match ); } /* namespace exact */ -- GitLab