Macaulay2 Engine
Loading...
Searching...
No Matches
spair.hpp
Go to the documentation of this file.
1// Copyright 1996 Michael E. Stillman
2#ifndef _spair_hh_
3#define _spair_hh_
4
46
47#include "freemod.hpp"
48#include "polyring.hpp"
49#include "gbring.hpp"
50
51struct s_pair;
52
53struct gb_elem : public our_new_delete
54{
57 s_pair *pair_list; // List of pairs with this as 'first' element
61 int is_min;
62 int me;
63
65 : next(nullptr),
66 next_min(nullptr),
67 pair_list(nullptr),
68 f(nullptr),
69 fsyz(nullptr),
70 lead_exp(nullptr),
71 is_min(0),
72 me(0)
73 {
74 }
75 gb_elem(gbvector *f0, gbvector *fsyz0, int is_min0)
76 : next(nullptr),
77 next_min(nullptr),
78 pair_list(nullptr),
79 f(f0),
80 fsyz(fsyz0),
81 lead_exp(nullptr),
82 is_min(is_min0),
83 me(0)
84 {
85 }
86};
87
88struct s_pair : public our_new_delete
89{
91 s_pair *next_same; // Next one with the same 'first'
93 int compare_num; // <0 means 'deleted': don't compute the corresp s-pair
94 int degree;
95 int *lcm; // A packed monomial (should it be an expvector?)
98 gbvector *f; // A vector in NGB_comp::gens.rows()
99 gbvector *fsyz; // A vector in NGB_comp::syz.rows()
100};
101
102const int NHEAP = 12;
103
105{
106 const Monoid *M;
107
112
113 int compare(s_pair *f, s_pair *g) const;
114 s_pair *merge(s_pair *f, s_pair *g) const;
115
116 public:
117 s_pair_heap(const Monoid *M);
118
119 s_pair *grab_remaining_pairs(); // designed so the user can then remove the
120 // data associated with them
121 ~s_pair_heap();
122
123 void insert(s_pair *&p);
124 void insert(s_pair *p, int len);
125 s_pair *remove();
126 void put_back(s_pair *&p);
127
128 void sort_list(s_pair *&p) const;
129
130 int n_elems() { return nelems; }
131 void stats() const;
132 void text_out(buffer &o) const;
133
135 {
136 return heap[i];
137 } // DO NOT USE, except for debugging purposes!
138};
139
140#endif
141
142// Local Variables:
143// compile-command: "make -C $M2BUILDDIR/Macaulay2/e "
144// indent-tabs-mode: nil
145// End:
Engine-side commutative monomial monoid: variable names, ordering, multidegree machinery,...
Definition monoid.hpp:89
void stats() const
Definition spair.cpp:269
s_pair * remove()
Definition spair.cpp:225
void sort_list(s_pair *&p) const
Definition spair.cpp:156
s_pair_heap(const Monoid *M)
Definition spair.cpp:21
s_pair * heap[NHEAP]
Definition spair.hpp:108
int n_in_heap[NHEAP]
Definition spair.hpp:109
int compare(s_pair *f, s_pair *g) const
Definition spair.cpp:66
s_pair * merge(s_pair *f, s_pair *g) const
Definition spair.cpp:123
s_pair * grab_remaining_pairs()
Definition spair.cpp:31
void text_out(buffer &o) const
Definition spair.cpp:270
int n_elems()
Definition spair.hpp:130
void put_back(s_pair *&p)
Definition spair.cpp:263
int top_of_heap
Definition spair.hpp:110
~s_pair_heap()
Definition spair.cpp:44
const Monoid * M
Definition spair.hpp:106
void insert(s_pair *&p)
Definition spair.cpp:180
s_pair * debug_list(int i)
Definition spair.hpp:134
FreeModule — finite-rank free module R^n, the type-level anchor for every Matrix.
GBRing and gbvector — the GB-tuned polynomial-ring view used by classical Buchberger code.
int p
PolynomialRing — abstract polynomial-ring base, the engine's most-reused class.
const int NHEAP
Definition spair.hpp:102
s_pair * pair_list
Definition spair.hpp:57
int * lead_exp
Definition spair.hpp:60
gbvector * fsyz
Definition spair.hpp:59
int is_min
Definition spair.hpp:61
gb_elem()
Definition spair.hpp:64
gb_elem * next
Definition spair.hpp:55
gbvector * f
Definition spair.hpp:58
gb_elem * next_min
Definition spair.hpp:56
int me
Definition spair.hpp:62
gb_elem(gbvector *f0, gbvector *fsyz0, int is_min0)
Definition spair.hpp:75
int * lcm
Definition spair.hpp:95
int degree
Definition spair.hpp:94
gb_elem * second
Definition spair.hpp:97
int syz_type
Definition spair.hpp:92
gbvector * f
Definition spair.hpp:98
s_pair * next
Definition spair.hpp:90
gbvector * fsyz
Definition spair.hpp:99
gb_elem * first
Definition spair.hpp:96
int compare_num
Definition spair.hpp:93
s_pair * next_same
Definition spair.hpp:91