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

◆ compare_res_pairs()

int res_comp::compare_res_pairs ( res_pair * f,
res_pair * g ) const
private

Definition at line 318 of file res-a1.cpp.

319{
320 exponents_t EXP1, EXP2;
321 int cmp, df, dg, i;
322 // if (f->compare_num < g->compare_num) return 1;
323 // if (f->compare_num > g->compare_num) return -1;
324 // MES: what to do if we obtain equality? Here is one way:
325 switch (compare_type)
326 {
327 case 1:
328 // Compare using descending lexicographic order
329 // on the usual set of variables
332 M->to_expvector(f->base_monom, EXP1);
333 M->to_expvector(g->base_monom, EXP2);
334 for (i = 0; i < M->n_vars(); i++)
335 {
336 if (EXP1[i] < EXP2[i]) return -1;
337 if (EXP1[i] > EXP2[i]) return 1;
338 }
339 return 0;
340 case 2:
341 // Compare using ascending lexicographic order
342 // on the usual set of variables
345 M->to_expvector(f->base_monom, EXP1);
346 M->to_expvector(g->base_monom, EXP2);
347 for (i = 0; i < M->n_vars(); i++)
348 {
349 if (EXP1[i] < EXP2[i]) return 1;
350 if (EXP1[i] > EXP2[i]) return -1;
351 }
352 return 0;
353 case 3:
354 // Compare using descending lexicographic order
355 // on the reversed set of variables
358 M->to_expvector(f->base_monom, EXP1);
359 M->to_expvector(g->base_monom, EXP2);
360 for (i = M->n_vars() - 1; i >= 0; i--)
361 {
362 if (EXP1[i] < EXP2[i]) return -1;
363 if (EXP1[i] > EXP2[i]) return 1;
364 }
365 return 0;
366 case 4:
367 // Compare using ascending lexicographic order
368 // on the reversed set of variables
371 M->to_expvector(f->base_monom, EXP1);
372 M->to_expvector(g->base_monom, EXP2);
373 for (i = M->n_vars() - 1; i >= 0; i--)
374 {
375 if (EXP1[i] < EXP2[i]) return 1;
376 if (EXP1[i] > EXP2[i]) return -1;
377 }
378 return 0;
379 case 5:
380 // The original method, but with degree added, since
381 // the new skeleton code doesn't just sort elements of
382 // the same degree.
383 df = degree(f);
384 dg = degree(g);
385 if (df > dg) return -1;
386 if (df < dg) return 1;
387 cmp = M->compare(f->base_monom, g->base_monom);
388 if (cmp != 0) return cmp;
389 cmp = f->first->compare_num - g->first->compare_num;
390 if (cmp < 0) return 1;
391 if (cmp > 0) return -1;
392 return 0;
393 default:
394 cmp = M->compare(f->base_monom, g->base_monom);
395 if (cmp != 0) return cmp;
396 cmp = f->first->compare_num - g->first->compare_num;
397 if (cmp < 0) return 1;
398 if (cmp > 0) return -1;
399 return 0;
400 }
401 return 0;
402}
exponents::Exponents exponents_t
size_t exp_size
Definition res-a1.hpp:114
int degree(const res_pair *q) const
Definition res-a1.cpp:273
int compare_type
Definition res-a1.hpp:117
const Monoid * M
Definition res-a1.hpp:80
res_pair * first
int compare_num
int * base_monom
#define ALLOCATE_EXPONENTS(byte_len)
Definition monoid.hpp:62

References ALLOCATE_EXPONENTS, res_pair::base_monom, res_pair::compare_num, compare_type, degree(), exp_size, res_pair::first, and M.

Referenced by merge_res_pairs().