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

◆ lead_monom()

EngineMonomial * RingElement::lead_monom ( int nvars) const

Definition at line 197 of file relem.cpp.

198{
199 if (is_zero())
200 {
201 ERROR("the zero element has no lead monomial");
202 return nullptr;
203 }
204 const PolynomialRing *P = R->cast_to_PolynomialRing();
205 if (P != nullptr)
206 {
207 gc_vector<int> resultvp;
208 Nterm *t = get_value();
209
210 exponents_t exp = newarray_atomic(int, nvars);
211 P->lead_logical_exponents(nvars, t, exp);
212 varpower::from_expvector(nvars, exp, resultvp);
213 return EngineMonomial::make(resultvp.data());
214 }
215 const M2FreeAlgebraOrQuotient* Q = dynamic_cast<const M2FreeAlgebraOrQuotient*>(R);
216 if (Q != nullptr)
217 {
218 ERROR("not implemented yet");
219 return nullptr;
220 }
221 ERROR("expected polynomial ring");
222 return nullptr;
223}
exponents::Exponents exponents_t
static EngineMonomial * make(int v, int e)
Definition monomial.cpp:26
static void from_expvector(int n, exponents::ConstExponents a, Vector &result)
virtual void lead_logical_exponents(int nvars0, const ring_elem f, exponents_t result_exp) const =0
ring_elem get_value() const
Definition relem.hpp:79
bool is_zero() const
Definition relem.hpp:167
const Ring * R
Definition relem.hpp:68
const int ERROR
Definition m2-mem.cpp:55
const mpreal exp(const mpreal &x, mp_rnd_t r=mpreal::get_default_rnd())
Definition mpreal.h:2298
#define newarray_atomic(T, len)
Definition newdelete.hpp:91

References ERROR, ExponentList< int, true >::from_expvector(), get_value(), is_zero(), PolynomialRing::lead_logical_exponents(), EngineMonomial::make(), newarray_atomic, and R.

Referenced by IM2_RingElement_lead_monomial().