Macaulay2 Engine
Loading...
Searching...
No Matches
monomial.hpp
Go to the documentation of this file.
1// (c) 1994 Michael E. Stillman
2
3#ifndef _monomial_hh_
4#define _monomial_hh_
5
38
39#include <vector>
40
41#include "ExponentList.hpp"
42#include "hash.hpp"
43#include "engine-includes.hpp"
44#include "buffer.hpp"
45
59// TODO: can this be combined with varpower using templates?
61{
62 // The format of a monomial is from ExponentList.hpp:
63 // [2n+1, v1, e1, ..., vn, en]
65
67 EngineMonomial(int v, int e);
68 EngineMonomial(const int *vp);
70 EngineMonomial(const std::vector<int>& vp);
71
72 protected:
73 virtual unsigned int computeHashValue() const;
74
75 public:
76 static EngineMonomial *make(int v, int e);
78 static EngineMonomial *make(const int *vp);
79 static EngineMonomial *make(const std::vector<int>& vp);
80 // format for this is that of a 'varpower' monomial:
81 // [2n+1, v1, e1, v2, e2, ..., vn, en]
82 // with each ei != 0.
83
84 int * ints() { return val.data(); }
85 const int * ints() const { return val.data(); }
86
89 EngineMonomial *power(int n) const;
90 void monsyz(const EngineMonomial &b, EngineMonomial *&sa, EngineMonomial *&sb) const;
91 EngineMonomial *lcm(const EngineMonomial &b) const;
92 EngineMonomial *gcd(const EngineMonomial &b) const;
93
94 EngineMonomial *radical() const;
95 EngineMonomial *erase(const EngineMonomial &b) const;
96
97 bool is_one() const;
98 bool is_equal(const EngineMonomial &b) const;
99 bool divides(const Monoid *M, const EngineMonomial &b) const;
100 int compare(const Monoid *M, const EngineMonomial &b) const;
101 int simple_degree() const;
102
103 void text_out(buffer &o) const { varpower::elem_text_out(o, val.data()); }
105};
106
107#endif
108
109// Local Variables:
110// compile-command: "make -C $M2BUILDDIR/Macaulay2/e "
111// indent-tabs-mode: nil
112// End:
Variable-length sparse (variable, exponent) encoding of monomials.
Append-only GC-backed byte buffer used throughout the engine for text output.
EngineMonomial * operator*(const EngineMonomial &b) const
Definition monomial.cpp:122
int simple_degree() const
Definition monomial.cpp:100
EngineMonomial * erase(const EngineMonomial &b) const
Definition monomial.cpp:137
gc_vector< int > val
Definition monomial.hpp:64
bool divides(const Monoid *M, const EngineMonomial &b) const
Definition monomial.cpp:88
void text_out(buffer &o) const
Definition monomial.hpp:103
bool is_equal(const EngineMonomial &b) const
Definition monomial.cpp:70
int compare(const Monoid *M, const EngineMonomial &b) const
Definition monomial.cpp:76
EngineMonomial * power(int n) const
Definition monomial.cpp:144
const int * ints() const
Definition monomial.hpp:85
bool is_one() const
Definition monomial.cpp:69
EngineMonomial * radical() const
Definition monomial.cpp:152
EngineMonomial * gcd(const EngineMonomial &b) const
Definition monomial.cpp:108
void monsyz(const EngineMonomial &b, EngineMonomial *&sa, EngineMonomial *&sb) const
Definition monomial.cpp:115
EngineMonomial * lcm(const EngineMonomial &b) const
Definition monomial.cpp:101
virtual unsigned int computeHashValue() const
Definition monomial.cpp:64
M2_arrayint to_arrayint() const
Definition monomial.hpp:104
static EngineMonomial * make(int v, int e)
Definition monomial.cpp:26
EngineMonomial * operator/(const EngineMonomial &b) const
Definition monomial.cpp:130
Engine-side immutable monomial value type wrapping a varpower- encoded exponent vector.
Definition monomial.hpp:61
EngineObject()
Definition hash.hpp:66
static void elem_text_out(buffer &o, ConstExponents m, bool p_one=true)
static M2_arrayint to_arrayint(ConstExponents vp)
Engine-side commutative monomial monoid: variable names, ordering, multidegree machinery,...
Definition monoid.hpp:89
Engine-wide include prelude — a single point of truth for portability shims.
EngineObject / MutableEngineObject — shared bases that supply the hash an M2 interpreter object expec...
typename std::vector< T, gc_allocator< T > > gc_vector
a version of the STL vector, which allocates its backing memory with gc.
Definition newdelete.hpp:76