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

◆ ideal_quotient()

binomialGB::monomial_list * binomialGB::ideal_quotient ( monomial0 m) const

Definition at line 735 of file gb-toric.cpp.

736{
737 monomial_list *r;
739 for (int i = 0; i <= _max_degree; i++) deglist[i] = nullptr;
740
741 for (iterator p = begin(); p != end(); p++)
742 {
743 binomial_gb_elem *g = *p;
744 gbmin_elem *gm = new gbmin_elem(g, R->mask(g->f.lead));
745 monomial n = R->quotient(g->f.lead, m);
746 monomial_list *nl = new monomial_list(n, R->mask(n), gm);
747 int d = R->degree(n);
748 nl->next = deglist[d];
749 deglist[d] = nl;
750 }
751 monomial_list *result = nullptr;
752
753 for (int d = 0; d <= _max_degree; d++)
754 if (deglist[d] != nullptr)
755 {
756 monomial_list *currentresult = nullptr;
757 while (deglist[d] != nullptr)
758 {
759 monomial_list *p = deglist[d];
760 deglist[d] = p->next;
761 if (find_divisor(result, p->m))
762 {
763 R->remove_monomial(p->m);
764 freemem(p->tag); // There is only one element at this point
765 freemem(p);
766 }
767 else if ((r = find_divisor(currentresult, p->m)))
768 {
769 gbmin_elem *p1 = new gbmin_elem(p->tag->elem, p->mask);
770 R->remove_monomial(p->m);
771 freemem(p);
772 p1->next = r->tag;
773 r->tag = p1;
774 }
775 else
776 {
777 p->next = currentresult;
778 currentresult = p;
779 }
780 }
781 if (result == nullptr)
782 result = currentresult;
783 else if (currentresult != nullptr)
784 {
785 monomial_list *q;
786 for (q = result; q->next != nullptr; q = q->next)
787 ;
788 q->next = currentresult;
789 }
790 currentresult = nullptr;
791 }
792 freemem(deglist);
793 return result;
794}
iterator begin() const
Definition gb-toric.hpp:296
monomial_list * find_divisor(monomial_list *I, monomial0 m) const
Definition gb-toric.cpp:720
const binomial_ring * R
Definition gb-toric.hpp:252
int _max_degree
Definition gb-toric.hpp:254
iterator end() const
Definition gb-toric.hpp:297
#define monomial
Definition gb-toric.cpp:11
int p
int p1
void freemem(void *s)
Definition m2-mem.cpp:103
VALGRIND_MAKE_MEM_DEFINED & result(result)
#define newarray(T, len)
Definition newdelete.hpp:82
monomial0 lead
Definition gb-toric.hpp:51

References _max_degree, begin(), end(), binomial_gb_elem::f, find_divisor(), freemem(), binomial::lead, monomial, newarray, binomialGB::monomial_list::next, p, p1, R, result(), and binomialGB::monomial_list::tag.

Referenced by make_new_pairs().