67{
69 if (cmp < 0) return -1;
70 if (cmp > 0) return 1;
71 int compare_type =
72 0;
73
74 switch (compare_type)
75 {
76 case 0:
77 cmp =
M->compare(f->
lcm, g->
lcm);
78 if (cmp != 0)
79 return cmp;
80
81 if (f->
first ==
nullptr || g->
first ==
nullptr)
return 0;
83 if (cmp > 0) return 1;
84 if (cmp < 0) return -1;
85 break;
86 case 1:
87 cmp =
M->compare(f->
lcm, g->
lcm);
88 if (cmp != 0)
89 return -cmp;
90
91 if (f->
first ==
nullptr || g->
first ==
nullptr)
return 0;
93 if (cmp > 0) return 1;
94 if (cmp < 0) return -1;
95 break;
96 case 2:
97 if (f->
first !=
nullptr && g->
first !=
nullptr)
98 {
100 if (cmp < 0) return -1;
101 if (cmp > 0) return 1;
102 }
104 {
106 if (cmp < 0) return -1;
107 if (cmp > 0) return 1;
108 }
109 cmp =
M->compare(f->
lcm, g->
lcm);
110 if (cmp != 0) return cmp;
111 if (f->
first ==
nullptr || g->
first ==
nullptr)
return 0;
113 if (cmp > 0) return 1;
114 if (cmp < 0) return -1;
115 break;
116 default:
117 return -1;
118 break;
119 }
120 return 0;
121}