static void chart_free(chart c, size_t n) { size_t i; for (i=0; i<CHART_SIZE(n); i++) free_sihashf(c[i]); FREE(c); }
static chart chart_make(size_t n) { size_t i, nn = CHART_SIZE(n); chart c = MALLOC(nn*sizeof(sihashf)); for (i=0; i<nn; i++) c[i] = NULL; /* chart cell will be constructed in apply_unary() */ return c; }
chart chart_make(size_t n) { size_t i, left, right, nn = CHART_SIZE(n); chart c = MALLOC(sizeof(struct chart)); c->vertex = MALLOC((n+1)*sizeof(sihashcc)); for (i = 0; i <= n; i++) c->vertex[i] = make_sihashcc(CHART_CELLS); c->cell = MALLOC(nn*sizeof(sihashcc)); for (left = 0; left < n; left++) for (right = left+1; right <= n; right++) CHART_ENTRY(c, left, right) = make_sihashcc(left+1 == right ? NLABELS : CHART_CELLS); return c; }
void chart_free(chart c, size_t n) { size_t i; /* vertex cell values will be freed below */ for (i=0; i<=n; i++) { FREE(c->vertex[i]->table); FREE(c->vertex[i]); } for (i = 0; i < CHART_SIZE(n); i++) { assert(c->cell[i]); free_sihashcc(c->cell[i]); } FREE(c->vertex); FREE(c->cell); FREE(c); FREE_CHART; }