2020-08-02 22:48:33 +00:00
|
|
|
#ifndef COXETER_H
|
|
|
|
#define COXETER_H
|
|
|
|
|
|
|
|
#include <inttypes.h>
|
|
|
|
|
|
|
|
typedef struct _groupelement {
|
|
|
|
int id;
|
|
|
|
int letter;
|
|
|
|
struct _groupelement *parent;
|
2022-02-05 23:51:45 +00:00
|
|
|
int need_to_compute; // optimization flag; if 0, will skip matrix computation
|
2020-08-02 22:48:33 +00:00
|
|
|
|
|
|
|
int length;
|
|
|
|
struct _groupelement *inverse;
|
|
|
|
struct _groupelement **left;
|
|
|
|
struct _groupelement **right;
|
|
|
|
} groupelement_t;
|
|
|
|
|
|
|
|
typedef struct _group {
|
|
|
|
int rank;
|
|
|
|
int *coxeter_matrix;
|
|
|
|
int size;
|
|
|
|
groupelement_t *elements;
|
|
|
|
groupelement_t **lists;
|
|
|
|
} group_t;
|
|
|
|
|
|
|
|
group_t *coxeter_init(int rank, int *coxeter_matrix, int nmax);
|
|
|
|
group_t *coxeter_init_triangle(int p, int q, int r, int nmax);
|
|
|
|
void coxeter_clear(group_t *g);
|
|
|
|
|
|
|
|
#endif
|