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

◆ compare_res2_pairs()

int res2_comp::compare_res2_pairs ( res2_pair * f,
res2_pair * g ) const
private

Definition at line 714 of file res-a0.cpp.

715{
716 // Lots of different orders appear here, controlled by the above
717 // static variables.
718 // if compare(f,g) returns -1, this says place g BEFORE f on the list.
719 exponents_t EXP1, EXP2, EXP3, EXP4;
720 int cmp, df, dg;
721
723 {
724 df = f->degree;
725 dg = g->degree;
726 if (df > dg) return -1;
727 if (df < dg) return 1;
728 }
729
730 switch (compare_type)
731 {
732 case COMPARE_MONORDER:
733 cmp = f->syz->comp->compare_num - g->syz->comp->compare_num;
734 if (cmp < 0) return 1;
735 if (cmp > 0)
736 return -1; // Lower compare num's should be on list earlier
737 cmp = f->compare_num - g->compare_num;
738 if (cmp < 0) return 1;
739 if (cmp > 0) return -1;
740 return 0;
741 case COMPARE_LEX:
744 M->to_expvector(f->syz->monom, EXP1);
745 M->to_expvector(g->syz->monom, EXP2);
747 {
748 for (int i = M->n_vars() - 1; i >= 0; i--)
749 {
750 if (EXP1[i] < EXP2[i]) return -compare_use_descending;
751 if (EXP1[i] > EXP2[i]) return compare_use_descending;
752 }
753 }
754 else
755 {
756 for (int i = 0; i < M->n_vars(); i++)
757 {
758 if (EXP1[i] < EXP2[i]) return -compare_use_descending;
759 if (EXP1[i] > EXP2[i]) return compare_use_descending;
760 }
761 }
762 [[fallthrough]];
763 case COMPARE_ORDER:
764 cmp = M->compare(f->syz->monom, g->syz->monom);
765 if (cmp != 0) return compare_use_descending * cmp;
766 cmp = f->syz->comp->compare_num - g->syz->comp->compare_num;
767 if (cmp < 0) return -compare_use_descending;
768 if (cmp > 0) return compare_use_descending;
769 return 0;
773 while (f->level >= 1)
774 {
775 M->to_expvector(f->syz->monom, EXP1);
776 M->to_expvector(g->syz->monom, EXP2);
778 {
779 for (int i = M->n_vars() - 1; i >= 0; i--)
780 {
781 if (EXP1[i] < EXP2[i]) return -compare_use_descending;
782 if (EXP1[i] > EXP2[i]) return compare_use_descending;
783 }
784 }
785 else
786 {
787 for (int i = 0; i < M->n_vars(); i++)
788 {
789 if (EXP1[i] < EXP2[i]) return -compare_use_descending;
790 if (EXP1[i] > EXP2[i]) return compare_use_descending;
791 }
792 }
793 // Go down one level
794 f = f->syz->comp;
795 g = g->syz->comp;
796 }
797 return 0;
803 M->to_expvector(f->syz->monom, EXP1);
804 M->to_expvector(g->syz->monom, EXP2);
806 {
807 for (int i = M->n_vars() - 1; i >= 0; i--)
808 {
809 if (EXP1[i] < EXP2[i]) return -compare_use_descending;
810 if (EXP1[i] > EXP2[i]) return compare_use_descending;
811 }
812 }
813 else
814 {
815 for (int i = 0; i < M->n_vars(); i++)
816 {
817 if (EXP1[i] < EXP2[i]) return -compare_use_descending;
818 if (EXP1[i] > EXP2[i]) return compare_use_descending;
819 }
820 }
821 while (f->level >= 1)
822 {
823 // Go down one level
824 M->to_expvector(f->syz->monom, EXP1);
825 M->to_expvector(g->syz->monom, EXP2);
826 f = f->syz->comp;
827 g = g->syz->comp;
828 M->to_expvector(f->syz->monom, EXP3);
829 M->to_expvector(g->syz->monom, EXP4);
831 {
832 for (int i = M->n_vars() - 1; i >= 0; i--)
833 {
834 if (EXP1[i] - EXP3[i] < EXP2[i] - EXP4[i])
836 if (EXP1[i] - EXP3[i] > EXP2[i] - EXP4[i])
838 }
839 }
840 else
841 {
842 for (int i = 0; i < M->n_vars(); i++)
843 {
844 if (EXP1[i] - EXP3[i] < EXP2[i] - EXP4[i])
846 if (EXP1[i] - EXP3[i] > EXP2[i] - EXP4[i])
848 }
849 }
850 }
851 return 0;
852 default:
853 return 0;
854 }
855}
exponents::Exponents exponents_t
size_t exp_size
Definition res-a0.hpp:192
int compare_use_degree
Definition res-a0.hpp:197
const Monoid * M
Definition res-a0.hpp:124
int compare_use_descending
Definition res-a0.hpp:198
int compare_type
Definition res-a0.hpp:196
int compare_use_reverse
Definition res-a0.hpp:199
#define ALLOCATE_EXPONENTS(byte_len)
Definition monoid.hpp:62
const int COMPARE_MONORDER
Definition res-a0.hpp:82
const int COMPARE_LEX
Definition res-a0.hpp:78
const int COMPARE_LEX_EXTENDED
Definition res-a0.hpp:79
const int COMPARE_LEX_EXTENDED2
Definition res-a0.hpp:80
const int COMPARE_ORDER
Definition res-a0.hpp:81
unsigned short degree
unsigned char level
res2term * syz
unsigned int compare_num
res2_pair * comp
int monom[1]

References ALLOCATE_EXPONENTS, res2term::comp, COMPARE_LEX, COMPARE_LEX_EXTENDED, COMPARE_LEX_EXTENDED2, COMPARE_MONORDER, res2_pair::compare_num, COMPARE_ORDER, compare_type, compare_use_degree, compare_use_descending, compare_use_reverse, res2_pair::degree, exp_size, res2_pair::level, M, res2term::monom, and res2_pair::syz.

Referenced by merge_res2_pairs().