Macaulay2 Engine
Loading...
Searching...
No Matches

◆ superwords() [1/2]

auto SuffixTree::superwords ( const Word & w,
std::vector< std::pair< int, int > > & output,
bool onlyFirst ) const->bool

Definition at line 567 of file SuffixTree.cpp.

568{
569 auto clType = contractedLocus(mRoot,w);
570 auto y = std::get<0>(clType);
571 auto f = std::get<1>(clType);
572 auto pre = std::get<2>(clType);
573
574 if (!concatenatesTo(Word(y->label()),pre,w)) return false;
575 else if (f == nullptr)
576 {
577 auto leaves = std::vector<SuffixTreeNode*> {};
578 allLeaves(y,leaves);
579 for (auto g : leaves)
580 {
581 output.push_back(std::make_pair(g->getPatternNumber(),mMonomials[g->getPatternNumber()].size() - g->label().size() + 1));
582 if (onlyFirst) return true;
583 }
584 }
585 else if (f->isLeaf() && f->label().size() == w.size() + 1)
586 {
587 output.push_back(std::make_pair(f->getPatternNumber(),mMonomials[f->getPatternNumber()].size() - f->label().size() + 1));
588 return true;
589 }
590 return false;
591}
bool concatenatesTo(const Word a, const Word b, const Word c)
auto contractedLocus(SuffixTreeNode *y, const Word &s, bool incrementLeafCount=false) const -> ContractedLocusType
SuffixTreeNode * mRoot
std::vector< Label > mMonomials
auto allLeaves(SuffixTreeNode *v, std::vector< SuffixTreeNode * > &output) const -> void
int size() const
Definition Word.hpp:74

References allLeaves(), concatenatesTo(), contractedLocus(), mMonomials, and mRoot.