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

◆ insert1()

template<typename Key>
void ResF4MonomialLookupTableT< Key >::insert1 ( mi_node *& p,
const_varpower_monomial m,
Key k )
private

Definition at line 90 of file res-f4-monlookup.cpp.

93{
94 count += 2;
95 mi_node **p = &top, *up = nullptr;
96 bool one_element = true;
97
98 for (index_res_varpower_monomial i = b; i.valid();)
99 {
100 one_element = false;
101 varpower_word insert_var = i.var();
103
104 if (*p == nullptr)
105 {
106 // make a new header node
107 *p = new_mi_node(insert_var, 0, up);
108 (*p)->header = (*p)->left = (*p)->right = *p;
109 }
110 else if ((*p)->var < insert_var)
111 {
112 // make a new layer
116
117 header_node->left = header_node->right = zero_node;
118 (*p)->down() = zero_node;
119 *p = header_node->header = zero_node->header = zero_node->left =
120 zero_node->right = header_node;
121 }
122
123 if ((*p)->var > insert_var)
124 {
125 insert_var = (*p)->var;
126 insert_exp = 0;
127 }
128 else
129 {
130 insert_exp = i.exponent();
131 ++i;
132 }
133
134 mi_node *q = (*p)->right;
135 while ((q != q->header) && (q->exp < insert_exp)) q = q->right;
136 if (q->exp != insert_exp)
137 {
139
140 if (i.valid())
141 {
143 insert_var, insert_exp, static_cast<mi_node *>(nullptr));
144 q->insert_to_left(insert_node);
145 q = insert_node;
146 }
147 else
148 {
150 q->insert_to_left(insert_node);
151 return;
152 }
153 }
154
155 up = q;
156 p = &(q->down());
157 }
158 if (one_element)
159 {
160 // insert a header node and a var/exp = 0/0 leaf
161 top = new_mi_node(0, 0, static_cast<mi_node *>(nullptr));
162 mi_node *leaf_node = new_mi_node(0, 0, k);
163 top->left = top->right = leaf_node;
164 top->header = leaf_node->header = leaf_node->left = leaf_node->right =
165 top;
166 }
167}
res_varpower_word varpower_word
mi_node * new_mi_node(varpower_word v, varpower_word e, mi_node *d)

References count, ResF4MonomialLookupTableT< Key >::mi_node::down, ResF4MonomialLookupTableT< Key >::mi_node::exp, ResF4MonomialLookupTableT< Key >::mi_node::header, ResF4MonomialLookupTableT< Key >::mi_node::insert_to_left(), ResF4MonomialLookupTableT< Key >::mi_node::left, new_mi_node(), p, and ResF4MonomialLookupTableT< Key >::mi_node::right.

Referenced by insert_minimal_vp().