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

◆ remove1()

void MonomialIdeal::remove1 ( Nmi_node * p)
private

Definition at line 397 of file monideal.cpp.

398{
399 assert(p != nullptr);
400 assert(p->tag == Nmi_node::leaf);
401 p->baggage() = nullptr;
402 count -= 2;
403
404 for (; p != nullptr;)
405 {
406 p->left->right = p->right;
407 p->right->left = p->left;
408 Nmi_node *q = p->header;
409 p->left = p->right = nullptr;
411
412 if (q->right == q->header) // only the header is left, so delete it
413 {
414 p = q->down();
415 q->down() = nullptr;
416 if (p != nullptr) p->down() = nullptr;
418 continue;
419 }
420
421 if (q->left != q->right) return;
422
423 if (q->left->exp > 0) return;
424
425 Nmi_node *dad = q->down();
426 if (q->left->tag == Nmi_node::leaf)
427 {
428 // set parent of q to be a leaf with baggage of q->left
429 // since this is a leaf, dad should be non null
430 assert(dad != nullptr);
431 dad->tag = Nmi_node::leaf;
432 dad->baggage() = q->left->baggage();
433 }
434 else
435 {
436 // set parent of q to be node pointing to q->left->down
437 q->left->down()->down() = dad;
438 if (dad != nullptr)
439 dad->down() = q->left->down();
440 else
441 mi = q->left->down();
442 q->left->down() = nullptr;
443 }
444 q->down() = nullptr;
445 delete_mi_node(q); // Deletes both nodes q, q->left.
446 return;
447 }
448 if (p == nullptr) mi = nullptr;
449}
void delete_mi_node(Nmi_node *p)
Definition monideal.cpp:78
Nmi_node * mi
Definition monideal.hpp:138
Bag *& baggage()
Definition monideal.hpp:103
enum Nmi_node::@355074146072071371146336002330246050056154227161 tag
Nmi_node * header
Definition monideal.hpp:84
Nmi_node * down
Definition monideal.hpp:88
Nmi_node * left
Definition monideal.hpp:82
Nmi_node * right
Definition monideal.hpp:83
int p

References Nmi_node::baggage(), count, delete_mi_node(), Nmi_node::down, Nmi_node::exp, Nmi_node::header, Nmi_node::leaf, Nmi_node::left, mi, p, Nmi_node::right, and Nmi_node::tag.

Referenced by remove().