1#ifndef _word_table_hpp_
2#define _word_table_hpp_
70using Overlap = std::tuple<int,int,int,bool>;
104 size_t insert(
Word w, std::vector<Overlap>& newRightOverlaps);
116 std::vector<std::pair<int,int>>& output)
const;
125 std::pair<int,int>& output)
const;
139 std::vector<std::pair<int,int>>& output)
const;
147 void leftOverlaps(std::vector<Overlap>& newLeftOverlaps)
const;
150 void rightOverlaps(std::vector<Overlap>& newRightOverlaps)
const;
155 std::vector<int>& result_start_indices);
164 int& result_start_index);
170 std::vector<int>& result_overlaps);
227 std::vector<std::pair<int,int>>& output)
const;
238 std::pair<int,int>& output)
const;
252 std::vector<std::pair<int,int>>& output)
const;
260 void leftOverlaps(std::vector<Overlap>& newLeftOverlaps)
const;
263 void rightOverlaps(std::vector<Overlap>& newRightOverlaps)
const;
275 std::vector<int>& result_start_indices);
279 int& result_start_index);
285 std::vector<int>& result_overlaps);
Bump-pointer arena allocator for transient inner-loop allocations.
std::tuple< int, int, int, bool > Overlap
std::ostream & operator<<(std::ostream &o, const WordTable &wordTable)
Thin RAII wrapper around memtailor::Arena providing bump-pointer array allocation with optional mutex...
Non-owning view of a non-commutative word: [begin, end) of int variable indices.
size_t monomialCount() const
const Word & operator[](int index) const
void superwords(Word word, std::vector< std::pair< int, int > > &output) const
void rightOverlaps(std::vector< Overlap > &newRightOverlaps) const
static void subwordPositions(Word word1, Word word2, std::vector< int > &result_start_indices)
bool isPrefix(Word word, int &output) const
bool isSuffix(Word word, int &output) const
std::vector< int > mIndices
void subwords(Word word, std::vector< std::pair< int, int > > &output) const
std::vector< Word > mMonomials
static void overlaps(Word word1, Word word2, std::vector< int > &result_overlaps)
auto isNontrivialSuperword(Word word, int index1, int index2) const -> bool
void leftOverlaps(std::vector< Overlap > &newLeftOverlaps) const
friend std::ostream & operator<<(std::ostream &o, const WordTable &wordTable)
static bool isPrefixOf(Word word1, Word word2)
static bool subwordPosition(Word word1, Word word2, int &result_start_index)
bool subword(Word word, std::pair< int, int > &output) const
MemoryBlock mMonomialSpace
static bool isSuffixOf(Word word1, Word word2)
Index of Words (non-commutative monomials) with subword, prefix/suffix, and overlap lookup used by th...
Word plus its ecart degree and heft degree — the value type WordWithDataTable stores.
friend std::ostream & operator<<(std::ostream &o, const WordWithDataTable &wordWithDataTable)
static void overlaps(WordWithData word1, WordWithData word2, std::vector< int > &result_overlaps)
bool subword(WordWithData word, std::pair< int, int > &output) const
static void subwordPositions(WordWithData word1, WordWithData word2, std::vector< int > &result_start_indices)
bool isSuffix(WordWithData word, int &output) const
std::vector< int > mIndices
void superwords(WordWithData word, std::vector< std::pair< int, int > > &output) const
static bool subwordPosition(WordWithData word1, WordWithData word2, int &result_start_index)
bool isPrefix(WordWithData word, int &output) const
auto isNontrivialSuperword(WordWithData word, int index1, int index2) const -> bool
size_t insert(WordWithData w)
static bool isPrefixOf(WordWithData word1, WordWithData word2)
void leftOverlaps(std::vector< Overlap > &newLeftOverlaps) const
const WordWithData & operator[](int index) const
size_t monomialCount() const
static bool isSuffixOf(WordWithData word1, WordWithData word2)
void subwords(WordWithData word, std::vector< std::pair< int, int > > &output) const
void rightOverlaps(std::vector< Overlap > &newRightOverlaps) const
std::vector< WordWithData > mMonomials
Variant of WordTable where each stored monomial carries an additional ecart-degree datum that gates s...