2016-07-26 08:09:34 +00:00
# ifndef THICKENINGS_H
# define THICKENINGS_H
# include "coxeter.h"
# define DEBUG(msg, ...) do{fprintf(stderr, msg, ##__VA_ARGS__); }while(0)
2016-10-14 16:49:20 +00:00
# define MAX_THICKENINGS 0 // 0 means infinite
2016-08-29 13:19:49 +00:00
# define HEAD_MARKER 127
2016-07-26 08:09:34 +00:00
typedef struct _edgelist {
int to ;
struct _edgelist * next ;
} edgelist_t ;
2016-10-14 16:49:20 +00:00
// describes an element of the Coxeter group; only "opposite" and "bruhat_lower" are being used for enumerating thickenings; everything else is just needed for initialization or output
2016-07-26 08:09:34 +00:00
typedef struct {
int * word ;
int wordlength ;
int * left ;
int * right ;
int opposite ;
edgelist_t * bruhat_lower ;
edgelist_t * bruhat_higher ;
int is_hyperplane_reflection ; // boolean value
} node_t ;
char * alphabetize ( int * word , int len , const char * alphabet , char * buffer ) ;
2016-10-14 16:49:20 +00:00
void print_thickening ( int rank , int order , const signed char * thickening , int level , const char * alphabet , FILE * f ) ;
2016-07-26 08:09:34 +00:00
static int compare_wordlength ( const void * a , const void * b , void * gr ) ;
void prepare_graph ( semisimple_type_t type , node_t * graph , edgelist_t * * edgelists_pointer , int * * words_pointer ) ;
2016-10-14 16:49:20 +00:00
long enumerate_balanced_thickenings ( semisimple_type_t type , node_t * graph , const char * alphabet , FILE * outfile ) ;
2016-07-26 08:09:34 +00:00
# endif