394{
395
396
397
398
399
400 int gbLeftIndex = std::get<0>(o);
401 int overlapPos = std::get<1>(o);
402 int gbRightIndex = std::get<2>(o);
403
404 if (overlapPos < 0)
405 {
406
408 - gbLeftIndex - 1,
409 Word(),
411 return;
412 }
413
414
415
416
417
418
419
421 Word leadWordRight =
mWordTable[gbRightIndex];
422 int overlapLen = leadWordLeft.
size() - overlapPos;
423
424 Word suffix2 {};
425 Word prefix2(leadWordLeft.
begin(), leadWordLeft.
begin() + overlapPos);
426
427 Word suffix1(leadWordRight.
begin() + overlapLen, leadWordRight.
end());
428 Word prefix1 {};
429
430
431
433
434
435
439
440
441
442
443
444 if (gbLeftIndex > gbRightIndex)
445 {
447 gbRightIndex,
448 suffix2,
451 gbLeftIndex,
452 suffix1,
454 }
455 else
456 {
458 gbLeftIndex,
459 suffix1,
462 gbRightIndex,
463 suffix2,
465 }
466}
const FreeMonoid & monoid() const
Word wordProductAsWord(const Word &left, const Word &right, MemoryBlock &memBlock) const
std::vector< PreRow > mOverlapsTodo
MonomialHash mColumnMonomials
MemoryBlock mMonomialSpace
std::vector< PreRow > mReducersTodo
const FreeAlgebra & freeAlgebra() const
const int * begin() const
Symbolic description of one row before it is materialised in the matrix: a left * (something) * right...