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

◆ findAllDivisors() [2/2]

void newf4::MonomialLookupTable::findAllDivisors ( const MonomialView monView,
std::vector< int > & result,
bool stopAtOne = false ) const

Definition at line 44 of file MonomialLookupTable.cpp.

47{
48 int curIndex = 0;
49 MonomialMask mask = createMask(monView);
50 for (; curIndex < mMonomialInfo.size(); ++curIndex)
51 {
52 auto m = mMonomialInfo[curIndex];
53 if (m.mIsUsed && maskDivides(m.mMask,mask))
54 {
55 // ugh with the const_cast, but MonomialInt doesn't store const pointers
56 MonomialView mvDivisor(const_cast<MonomialInt*>(mMonomialSpace.data() + m.mOffset));
57 if ((monView.simpleDegree() >= m.mSimpleDegree) &&
58 (MonomialView::monomialDivides(mvDivisor, monView)))
59 {
60 result.push_back(curIndex);
61 if (stopAtOne) break;
62 }
63 }
64 }
65}
static MonomialMask createMask(const MonomialView &monView)
std::vector< MonomialInt > mMonomialSpace
std::vector< MonomialInfo > mMonomialInfo
static bool maskDivides(MonomialMask divisor, MonomialMask divisee)
static bool monomialDivides(const MonomialView &divisor, const MonomialView &divisee)
VALGRIND_MAKE_MEM_DEFINED & result(result)
int32_t MonomialInt
uint64_t MonomialMask

References createMask(), maskDivides(), mMonomialInfo, mMonomialSpace, newf4::MonomialView::monomialDivides(), result(), and newf4::MonomialView::simpleDegree().