Skip to content
Snippets Groups Projects
Commit cfbaa1d8 authored by Jan Trávníček's avatar Jan Trávníček
Browse files

unsigned save comparison

parent 3edb1960
No related branches found
No related tags found
No related merge requests found
......@@ -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 */
 
......
......@@ -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 */
 
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment