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

◆ insert() [1/5]

auto SuffixTree::insert ( const Word & s,
std::vector< Overlap > & newRightOverlaps )->size_t

Definition at line 142 of file SuffixTree.cpp.

143{
144 // warning: this function appends the results to the end of right overlaps.
145 int wordNum = mMonomials.size();
146 auto plList = std::vector<int> {};
147 Label tempS(w.begin(),w.end());
148 mMonomials.push_back(tempS);
149 tempS.push_back(-(wordNum + 1));
150 Word s(tempS);
151 auto v = mRoot;
152 bool isFullPattern = true;
153 while (s.size() != 0)
154 {
155 InsertType insertType;
156 if (v == mRoot) insertType = insertStepD(v,s,isFullPattern);
157 else if (v->parent() == mRoot) insertType = insertStepC(v,mRoot,suffix(Word(v->arcLabel()),1),s,isFullPattern);
158 else insertType = insertStepC(v,v->parent()->suffixLink(),Word(v->arcLabel()),s,isFullPattern);
159 auto newv = std::get<0>(insertType);
160 auto roRoot = std::get<1>(insertType);
161 auto newLocus = std::get<2>(insertType);
162 v = newv;
163 if (roRoot != nullptr)
164 {
165 plList.clear();
166 patternLeaves(roRoot,plList);
167 for(auto pl : plList)
168 {
169 auto ro0 = newLocus->getPatternNumber();
170 auto ro1 = mMonomials[ro0].size() - roRoot->label().size();
171 auto ro2 = pl;
172 rightOverlaps.push_back(std::make_tuple(ro0,ro1,ro2,true));
173 }
174 }
175 if (v != mRoot && s.size() == 2)
176 {
177 v->setSuffixLink(mRoot);
178 }
179 s = suffix(s,1);
180 isFullPattern = false;
181 }
182 return mMonomials.size();
183}
Word suffix(const Word vec, int indexOfSuffix)
std::tuple< SuffixTreeNode *, SuffixTreeNode *, SuffixTreeNode * > InsertType
std::vector< int > Label
auto insertStepD(SuffixTreeNode *y, const Word &s, bool isFullPattern) -> InsertType
auto patternLeaves(SuffixTreeNode *v, std::vector< int > &output) const -> void
auto insertStepC(SuffixTreeNode *v, SuffixTreeNode *x, const Word &beta, const Word &s, bool isFullPattern) -> InsertType
SuffixTreeNode * mRoot
std::vector< Label > mMonomials
void size_t s
Definition m2-mem.cpp:271

References insertStepC(), insertStepD(), mMonomials, mRoot, patternLeaves(), s, and suffix().