25 lines
532 B
C
25 lines
532 B
C
|
#include "enumerate.h"
|
||
|
|
||
|
#define LOOP(i,n) for(int i = 0; i < (n); i++)
|
||
|
|
||
|
void enumerate_coxeter_group(group_t *group, mat *gen, mat *matrices)
|
||
|
{
|
||
|
TYPE t = GETTYPE(gen[0]->x[0]);
|
||
|
mat_workspace *ws;
|
||
|
|
||
|
ws = mat_workspace_init(3, t);
|
||
|
|
||
|
mat_identity(matrices[0]);
|
||
|
for(int i = 1; i < group->size; i++) {
|
||
|
if(!group->elements[i].inverse)
|
||
|
continue;
|
||
|
|
||
|
int parent = group->elements[i].parent->id;
|
||
|
int letter = group->elements[i].letter;
|
||
|
|
||
|
mat_multiply(ws, matrices[i], matrices[parent], gen[letter]);
|
||
|
}
|
||
|
|
||
|
mat_workspace_clear(ws);
|
||
|
}
|