/*
** binomial.h Birk Huber, 4/99
** -- header file for binomal type and main operations on binomials
**
**
** TiGERS, Toric Groebner Basis Enumeration by Reverse Search
** copyright (c) 1999 Birk Huber
**
*/
#ifndef BINOMIAL_H
extern int ring_N;
extern int ring_lv;
extern int *ring_weight;
#endif
int ring_set(int n);
int ring_getvar(FILE *ifile);
#define ring_putvar(ofile,v) fprintf(ofile,"%c",'a'+v)
typedef int *monomial;
int monomial_divides(monomial m1, monomial m2);
int monomial_equal(monomial m1, monomial m2);
int monomial_lexcomp(monomial m1, monomial m2);
int monomial_rlexcomp(monomial m1, monomial m2);
typedef struct bin_tag *binomial;
struct bin_tag{
int *exps1;
int *exps2;
int *E;
int ff;
int bf;
binomial next;
};
#define BINOMIAL 1
#define MONOMIAL 0
#define FACET 0
#define NONFACET 1
#define UNKNOWN -1
#define binomial_next(b) (b->next)
#define binomial_lead(b) (b->exps1)
#define binomial_trail(b) (b->exps2)
#define monomial_set(b) (b->bf=MONOMIAL)
#define binomial_set(b) (b->bf=BINOMIAL)
#define binomial_facet(b) (b->ff)
binomial binomial_new();
void binomial_free(binomial m);
void binomial_read(FILE *is, binomial b);
void binomial_print(FILE *of, binomial b);
binomial monomial_spair(binomial b,monomial m);
void binomial_flip(binomial b);
int binomial_spair(binomial b1, binomial b2);
/*
** return TRUE if binomials marking agrees with respect to the
** lexicographic term order
*/
#define binomial_ordered(b)\
((monomial_lexcomp(binomial_lead(b),binomial_trail(b))>=0) ? TRUE : FALSE)