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

◆ gbvector_normal_form()

void QRingInfo_field_basic::gbvector_normal_form ( const FreeModule * F,
gbvector *& f ) const
virtual

Reimplemented from QRingInfo.

Definition at line 151 of file qring.cpp.

153{
155
156 GBRing *GR = R->get_gb_ring();
157 gbvector head;
158 gbvector *result = &head;
159 gbvector *t = f;
160 while (t != nullptr)
161 {
162 GR->gbvector_get_lead_exponents(F, t, EXP1);
163 int x = ringtable->find_divisor(EXP1, 1);
164 if (x >= 0)
165 {
166 const gbvector *r = quotient_gbvector(x);
167 gbvector *zero = nullptr;
168 GR->gbvector_reduce_lead_term(F, F, zero, t, zero, r, zero);
169 }
170 else
171 {
172 result->next = t;
173 t = t->next;
174 result = result->next;
175 }
176 }
177 result->next = nullptr;
178 f = head.next;
179}
exponents::Exponents exponents_t
void gbvector_get_lead_exponents(const FreeModule *F, const gbvector *f, int *result)
Definition gbring.cpp:541
void gbvector_reduce_lead_term(const FreeModule *F, const FreeModule *Fsyz, gbvector *flead, gbvector *&f, gbvector *&fsyz, const gbvector *g, const gbvector *gsyz, bool use_denom, ring_elem &denom)
Definition gbring.cpp:944
MonomialTable * ringtable
Definition qring.hpp:154
const PolyRing * R
Definition qring.hpp:83
size_t exp_size
Definition qring.hpp:86
const gbvector * quotient_gbvector(int i) const
Definition qring.hpp:99
int zero
VALGRIND_MAKE_MEM_DEFINED & result(result)
#define ALLOCATE_EXPONENTS(byte_len)
Definition monoid.hpp:62
volatile int x
gbvector * next
Definition gbring.hpp:80

References ALLOCATE_EXPONENTS, QRingInfo::exp_size, GBRing::gbvector_get_lead_exponents(), GBRing::gbvector_reduce_lead_term(), gbvector::next, QRingInfo::quotient_gbvector(), QRingInfo::R, result(), QRingInfo_field::ringtable, x, and zero.