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

◆ insert1()

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

Definition at line 77 of file f4-monlookup.cpp.

80{
81 count++;
82 mi_node **p = &top, *up = nullptr;
83 bool one_element = true;
84
85 for (index_varpower_monomial i = b; i.valid();)
86 {
87 one_element = false;
90
91 if (*p == nullptr)
92 {
93 // make a new header node
94 *p = new_mi_node(insert_var, 0, up);
95 (*p)->header = (*p)->left = (*p)->right = *p;
96 }
97 else if ((*p)->var < insert_var)
98 {
99 // make a new layer
103
104 header_node->left = header_node->right = zero_node;
105 (*p)->down() = zero_node;
106 *p = header_node->header = zero_node->header = zero_node->left =
107 zero_node->right = header_node;
108 }
109
110 if ((*p)->var > insert_var)
111 {
112 insert_var = (*p)->var;
113 insert_exp = 0;
114 }
115 else
116 {
117 insert_exp = i.exponent();
118 ++i;
119 }
120
121 mi_node *q = (*p)->right;
122 while ((q != q->header) && (q->exp < insert_exp)) q = q->right;
123 if (q->exp != insert_exp)
124 {
126
127 if (i.valid())
128 {
130 insert_var, insert_exp, static_cast<mi_node *>(nullptr));
131 q->insert_to_left(insert_node);
132 q = insert_node;
133 }
134 else
135 {
137 q->insert_to_left(insert_node);
138 return;
139 }
140 }
141
142 up = q;
143 p = &(q->down());
144 }
145 if (one_element)
146 {
147 // insert a header node and a var/exp = 0/0 leaf
148 top = new_mi_node(0, 0, static_cast<mi_node *>(nullptr));
149 mi_node *leaf_node = new_mi_node(0, 0, k);
150 top->left = top->right = leaf_node;
151 top->header = leaf_node->header = leaf_node->left = leaf_node->right =
152 top;
153 }
154}
mi_node * new_mi_node(varpower_word v, varpower_word e, mi_node *d)

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

Referenced by insert_minimal_vp().