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

◆ gbvector_add_to()

void GBRing::gbvector_add_to ( const FreeModule * F,
gbvector *& f,
gbvector *& g )

Definition at line 668 of file gbring.cpp.

669{
670 if (g == nullptr) return;
671 if (f == nullptr)
672 {
673 f = g;
674 g = nullptr;
675 return;
676 }
677 if (zzp)
678 {
679 gbvector_add_to_zzp(F, f, g);
680 return;
681 }
682 gbvector head;
683 gbvector *result = &head;
684 while (1) switch (gbvector_compare(F, f, g))
685 {
686 case LT:
687 result->next = g;
688 result = result->next;
689 g = g->next;
690 if (g == nullptr)
691 {
692 result->next = f;
693 f = head.next;
694 return;
695 }
696 break;
697 case GT:
698 result->next = f;
699 result = result->next;
700 f = f->next;
701 if (f == nullptr)
702 {
703 result->next = g;
704 f = head.next;
705 g = nullptr;
706 return;
707 }
708 break;
709 case EQ:
710 gbvector *tmf = f;
711 gbvector *tmg = g;
712 f = f->next;
713 g = g->next;
714 K->add_to(tmf->coeff, tmg->coeff);
715#if 0
716// if (R->is_ZZ_quotient)
717// {
718// ring_elem t = K->remainder(tmf->coeff, R->ZZ_quotient_value);
719// K->remove(tmf->coeff);
720// tmf->coeff = t;
721// }
722#endif
723 if (K->is_zero(tmf->coeff))
724 {
726 }
727 else
728 {
729 result->next = tmf;
730 result = result->next;
731 }
733 if (g == nullptr)
734 {
735 result->next = f;
736 f = head.next;
737 return;
738 }
739 if (f == nullptr)
740 {
741 result->next = g;
742 f = head.next;
743 g = nullptr;
744 return;
745 }
746 break;
747 }
748}
CoefficientRingZZp * zzp
Definition gbring.hpp:141
void gbvector_add_to_zzp(const FreeModule *F, gbvector *&f, gbvector *&g)
Definition gbring.cpp:590
int gbvector_compare(const FreeModule *F, const gbvector *f, const gbvector *g) const
Definition gbring.cpp:413
const Ring * K
Definition gbring.hpp:138
void gbvector_remove_term(gbvector *f)
Definition gbring.cpp:279
VALGRIND_MAKE_MEM_DEFINED & result(result)
ring_elem coeff
Definition gbring.hpp:81
gbvector * next
Definition gbring.hpp:80
const int EQ
Definition style.hpp:40
const int GT
Definition style.hpp:41
const int LT
Definition style.hpp:39

References gbvector::coeff, EQ, gbvector_add_to_zzp(), gbvector_compare(), gbvector_remove_term(), GT, K, LT, gbvector::next, result(), and zzp.

Referenced by gbvector_apply(), gbvector_auto_reduce(), gbvector_auto_reduce_ZZ(), gbvector_cancel_lead_terms(), gbvector_combine_lead_terms_ZZ(), gbvector_reduce_lead_term(), gbvector_reduce_lead_term_ZZ(), gbvector_reduce_with_marked_lead_term(), gbvector_replace_2by2_ZZ(), and gbvector_sort().