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

◆ processMonomialProduct()

ComponentIndex F4Res::processMonomialProduct ( res_const_packed_monomial m,
res_const_packed_monomial n,
int & result_sign_if_skew )
private

Definition at line 154 of file res-f4.cpp.

157{
158 result_sign_if_skew = 1;
159 auto x = monoid().get_component(n);
160 auto& p = mFrame.level(mThisLevel - 2)[x];
161 if (p.mBegin == p.mEnd) return -1;
162
163 int* thisMonom = mMonomSpace2.allocate(1 + monoid().max_monomial_size());
164 thisMonom++; // so thisMonom[-1] exists, but is not part of the monomial, as far as
165 monoid().unchecked_mult(m, n, thisMonom);
166 monoid().set_component(x, thisMonom);
167
168 if (ring().isSkewCommutative())
169 {
170 result_sign_if_skew = monoid().skew_mult_sign(ring().skewInfo(), m, n);
171 if (result_sign_if_skew == 0)
172 {
173 mMonomSpace2.popLastAlloc(thisMonom-1); // we did not need this monomial!
174 return -1;
175 }
176 }
177 return processCurrentMonomial(thisMonom);
178}
const ResPolyRing & ring() const
Definition res-f4.hpp:104
int mThisLevel
Definition res-f4.hpp:164
const ResMonoid & monoid() const
Definition res-f4.hpp:103
MonomialMemorySpace mMonomSpace2
Definition res-f4.hpp:188
SchreyerFrame & mFrame
Definition res-f4.hpp:159
ComponentIndex processCurrentMonomial(res_packed_monomial thisMonom)
Definition res-f4.cpp:192
component_index get_component(res_const_packed_monomial m) const
void set_component(component_index component, res_packed_monomial m) const
void unchecked_mult(res_const_packed_monomial m, res_const_packed_monomial n, res_packed_monomial result) const
int skew_mult_sign(const SkewMultiplication *skew, res_const_packed_monomial m, res_const_packed_monomial n) const
int p
volatile int x

References ResMonoidDense::get_component(), mFrame, mMonomSpace2, monoid(), mThisLevel, p, processCurrentMonomial(), ring(), ResMonoidDense::set_component(), ResMonoidDense::skew_mult_sign(), ResMonoidDense::unchecked_mult(), and x.

Referenced by loadRow().