Macaulay2 Engine
Loading...
Searching...
No Matches
ZZ.hpp
Go to the documentation of this file.
1// Copyright 1995 Michael E. Stillman.
2
3#ifndef _ZZ_hh_
4#define _ZZ_hh_
5
42
43#include "error.h"
44#include "ring.hpp"
45#include <cstddef>
46
47namespace M2 {
48class ARingZZGMP;
49};
50
51// The following lines are here only to remove complaints about old style casts
52// from gmp
53extern "C" inline int mask_mpz_cmp_si(mpz_srcptr x, long int i)
54{
55 return mpz_cmp_si(x, i);
56}
57extern "C" inline int mask_mpq_cmp_si(mpq_srcptr x, long int i, long int j)
58{
59 return mpq_cmp_si(x, i, j);
60}
61
76class RingZZ : public Ring
77{
78 friend class M2::ARingZZGMP;
79
80 mpz_ptr new_elem() const;
81
83
84 protected:
85 virtual ~RingZZ() {}
86 public:
87 typedef mpz_ptr element_type;
88
90 // Creation of globalZZ is done in PolyRing::make_trivial_ZZ_poly_ring
91 // These two routines should not be called from elsewhere
92 RingZZ() {}
93 bool initialize_ZZ(const PolynomialRing *deg_ring);
95
96 RingZZ *cast_to_RingZZ() { return this; }
97 const RingZZ *cast_to_RingZZ() const { return this; }
99 {
100 return coeffR;
101 }
102
103 virtual MutableMatrix *makeMutableMatrix(size_t nrows,
104 size_t ncols,
105 bool dense) const;
106
107 // The following are all the routines required by 'ring'
108 virtual bool is_ZZ() const { return true; }
109 virtual CoefficientType coefficient_type() const { return COEFF_ZZ; }
110 virtual void text_out(buffer &o) const;
111
112 static unsigned int mod_ui(mpz_srcptr n, unsigned int p);
113 static std::pair<bool, int> get_si(mpz_srcptr n);
114
115 // If the base ring of a is ZZ:
116 // To get a bignum from a RingElement a, use: a.get_value().get_mpz()
117 // To get a bignum from an ring_elem a, use: a.get_mpz()
118
119 virtual unsigned int computeHashValue(const ring_elem a) const;
120
121 virtual std::pair<bool, long> coerceToLongInteger(ring_elem a) const;
122
123 virtual ring_elem from_long(long n) const;
124 virtual ring_elem from_int(mpz_srcptr n) const;
125 virtual bool from_rational(mpq_srcptr q, ring_elem &result) const;
126 virtual bool promote(const Ring *R,
127 const ring_elem f,
128 ring_elem &result) const;
129 virtual bool lift(const Ring *R, const ring_elem f, ring_elem &result) const;
130
131 virtual ring_elem preferred_associate(ring_elem f) const;
132 virtual bool lower_associate_divisor(ring_elem &f, ring_elem g) const;
133
134 virtual void lower_content(ring_elem &c, ring_elem g)
135 const; // c is a content elem, g is in ring
136
137 int is_positive(const ring_elem a) const;
138
139 virtual bool is_unit(const ring_elem f) const;
140 virtual bool is_zero(const ring_elem f) const;
141 virtual bool is_equal(const ring_elem f, const ring_elem g) const;
142 virtual int compare_elems(const ring_elem f, const ring_elem g) const;
143
144 virtual ring_elem copy(const ring_elem f) const;
145 virtual void remove(ring_elem &f) const;
146
147#if 0
148 void internal_negate_to(ring_elem &f) const;
149 void internal_add_to(ring_elem &f, ring_elem &g) const;
150 void internal_subtract_to(ring_elem &f, ring_elem &g) const;
151#endif
152
153 virtual ring_elem negate(const ring_elem f) const;
154 virtual ring_elem add(const ring_elem f, const ring_elem g) const;
155 virtual ring_elem subtract(const ring_elem f, const ring_elem g) const;
156 virtual ring_elem mult(const ring_elem f, const ring_elem g) const;
157 virtual ring_elem power(const ring_elem f, mpz_srcptr n) const;
158 virtual ring_elem power(const ring_elem f, int n) const;
159
160 virtual ring_elem invert(const ring_elem f) const;
161
162 virtual ring_elem divide(const ring_elem f, const ring_elem g) const;
163
164 virtual ring_elem remainder(const ring_elem f, const ring_elem g) const;
165 virtual ring_elem quotient(const ring_elem f, const ring_elem g) const;
167 const ring_elem g,
168 ring_elem &quot) const;
169
170 ring_elem gcd(const ring_elem f, const ring_elem g) const;
172 const ring_elem g,
173 ring_elem &u,
174 ring_elem &v) const;
175
176 virtual void syzygy(const ring_elem a,
177 const ring_elem b,
178 ring_elem &x,
179 ring_elem &y) const;
180
181 virtual ring_elem random() const;
182
183 virtual void elem_text_out(buffer &o,
184 const ring_elem f,
185 bool p_one = true,
186 bool p_plus = false,
187 bool p_parens = false) const;
188
189 virtual ring_elem eval(const RingMap *map,
190 const ring_elem f,
191 int first_var) const;
192};
193
194unsigned int computeHashValue_mpz(mpz_srcptr a);
195#endif
196
197// Local Variables:
198// compile-command: "make -C $M2BUILDDIR/Macaulay2/e "
199// indent-tabs-mode: nil
200// End:
int mask_mpq_cmp_si(mpq_srcptr x, long int i, long int j)
Definition ZZ.hpp:57
unsigned int computeHashValue_mpz(mpz_srcptr a)
Definition ZZ.cpp:14
int mask_mpz_cmp_si(mpz_srcptr x, long int i)
Definition ZZ.hpp:53
wrapper for the mpz_struct integer representation
Abstract base class for mutable matrices over an arbitrary engine Ring, the in-place counterpart of t...
Definition mat.hpp:79
Abstract base for the engine's polynomial-ring hierarchy.
Definition polyring.hpp:96
CoefficientType
Definition ring.hpp:222
@ COEFF_ZZ
Definition ring.hpp:222
Ring()
Definition ring.hpp:136
xxx xxx xxx
Definition ring.hpp:102
Engine-side ring homomorphism: stores, for each source-ring variable, the target-ring element it maps...
Definition ringmap.hpp:60
virtual ring_elem add(const ring_elem f, const ring_elem g) const
Definition ZZ.cpp:251
virtual MutableMatrix * makeMutableMatrix(size_t nrows, size_t ncols, bool dense) const
Definition mat.cpp:32
virtual bool promote(const Ring *R, const ring_elem f, ring_elem &result) const
Definition ZZ.cpp:136
virtual ring_elem negate(const ring_elem f) const
Definition ZZ.cpp:243
virtual ring_elem power(const ring_elem f, mpz_srcptr n) const
Exponentiation. This is the default function, if a class doesn't define this.
Definition ZZ.cpp:287
virtual unsigned int computeHashValue(const ring_elem a) const
Definition ZZ.cpp:41
RingZZ()
Definition ZZ.hpp:92
M2::ARingZZGMP * coeffR
Definition ZZ.hpp:82
virtual ring_elem quotient(const ring_elem f, const ring_elem g) const
Definition ZZ.cpp:353
virtual bool is_unit(const ring_elem f) const
Definition ZZ.cpp:149
virtual bool is_zero(const ring_elem f) const
Definition ZZ.cpp:155
static unsigned int mod_ui(mpz_srcptr n, unsigned int p)
Definition ZZ.cpp:55
virtual void lower_content(ring_elem &c, ring_elem g) const
Definition ZZ.cpp:225
virtual ~RingZZ()
Definition ZZ.hpp:85
virtual ring_elem from_long(long n) const
Definition ZZ.cpp:110
virtual void syzygy(const ring_elem a, const ring_elem b, ring_elem &x, ring_elem &y) const
Definition ZZ.cpp:386
virtual ring_elem eval(const RingMap *map, const ring_elem f, int first_var) const
Definition ZZ.cpp:422
virtual bool lower_associate_divisor(ring_elem &f, ring_elem g) const
Definition ZZ.cpp:206
virtual bool from_rational(mpq_srcptr q, ring_elem &result) const
Definition ZZ.cpp:128
virtual ring_elem remainderAndQuotient(const ring_elem f, const ring_elem g, ring_elem &quot) const
Definition ZZ.cpp:317
virtual void remove(ring_elem &f) const
Definition ZZ.cpp:194
bool initialize_ZZ(const PolynomialRing *deg_ring)
Definition ZZ.cpp:19
mpz_ptr new_elem() const
Definition ZZ.cpp:34
M2::ARingZZGMP * get_ARing() const
Definition ZZ.hpp:98
virtual ring_elem subtract(const ring_elem f, const ring_elem g) const
Definition ZZ.cpp:259
virtual ring_elem random() const
Definition ZZ.cpp:70
virtual ring_elem from_int(mpz_srcptr n) const
Definition ZZ.cpp:119
virtual ring_elem divide(const ring_elem f, const ring_elem g) const
Definition ZZ.cpp:304
virtual int compare_elems(const ring_elem f, const ring_elem g) const
Definition ZZ.cpp:168
static std::pair< bool, int > get_si(mpz_srcptr n)
Definition ZZ.cpp:46
ring_elem gcd(const ring_elem f, const ring_elem g) const
Definition ZZ.cpp:361
int is_positive(const ring_elem a) const
Definition ZZ.cpp:177
virtual bool is_equal(const ring_elem f, const ring_elem g) const
Definition ZZ.cpp:161
virtual CoefficientType coefficient_type() const
Definition ZZ.hpp:109
virtual ring_elem invert(const ring_elem f) const
Definition ZZ.cpp:296
virtual bool is_ZZ() const
Definition ZZ.hpp:108
virtual ring_elem mult(const ring_elem f, const ring_elem g) const
Definition ZZ.cpp:267
virtual ring_elem remainder(const ring_elem f, const ring_elem g) const
Definition ZZ.cpp:345
virtual std::pair< bool, long > coerceToLongInteger(ring_elem a) const
Definition ZZ.cpp:64
virtual void text_out(buffer &o) const
Definition ZZ.cpp:32
RingZZ * cast_to_RingZZ()
Definition ZZ.hpp:96
ring_elem gcd_extended(const ring_elem f, const ring_elem g, ring_elem &u, ring_elem &v) const
Definition ZZ.cpp:369
const RingZZ * cast_to_RingZZ() const
Definition ZZ.hpp:97
mpz_ptr element_type
Definition ZZ.hpp:87
virtual ring_elem preferred_associate(ring_elem f) const
Definition ZZ.cpp:199
virtual void elem_text_out(buffer &o, const ring_elem f, bool p_one=true, bool p_plus=false, bool p_parens=false) const
Definition ZZ.cpp:77
virtual ring_elem copy(const ring_elem f) const
Definition ZZ.cpp:183
virtual bool lift(const Ring *R, const ring_elem f, ring_elem &result) const
Definition ZZ.cpp:144
Engine error-reporting primitives: ERROR, INTERNAL_ERROR, error, error_message.
int p
VALGRIND_MAKE_MEM_DEFINED & result(result)
Definition aring-CC.cpp:3
volatile int x
Ring — the legacy abstract base class for every coefficient and polynomial ring.