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

◆ IM2_RingElement_to_Integer()

gmp_ZZorNull IM2_RingElement_to_Integer ( const RingElement * a)

Definition at line 100 of file ringelement.cpp.

103{
104 const Ring *R = a->get_ring();
105 if (R->is_ZZ())
106 {
107 // Note: RingElement ZZ elements are on the "gc" side of the memory barrier, and
108 // are read only. Therefore we can just return the same value.
109 return a->get_value().get_mpz();
110 }
111 if (R->isFinitePrimeField())
112 {
113 mpz_ptr result = newitem(__mpz_struct);
114
115 std::pair<bool, long> res = R->coerceToLongInteger(a->get_value());
116 assert(res.first);
117
118 mpz_init_set_si(result, static_cast<int>(res.second));
120 return result;
121 }
122 ERROR("Expected ZZ or ZZ/p as base ring");
123 return nullptr;
124}
virtual bool is_ZZ() const
Definition ring.hpp:171
virtual std::pair< bool, long > coerceToLongInteger(ring_elem a) const
Definition ring.cpp:236
virtual bool isFinitePrimeField() const
Definition ring.hpp:169
ring_elem get_value() const
Definition relem.hpp:79
const Ring * get_ring() const
Definition relem.hpp:81
xxx xxx xxx
Definition ring.hpp:102
void mpz_reallocate_limbs(mpz_ptr _z)
Definition gmp-util.h:46
const int ERROR
Definition m2-mem.cpp:55
VALGRIND_MAKE_MEM_DEFINED & result(result)
#define newitem(T)
Definition newdelete.hpp:86
mpz_srcptr get_mpz() const
Definition ringelem.hpp:127

References Ring::coerceToLongInteger(), ERROR, ring_elem::get_mpz(), RingElement::get_ring(), RingElement::get_value(), Ring::is_ZZ(), Ring::isFinitePrimeField(), mpz_reallocate_limbs(), newitem, and result().