#include "piece-table.h" static piece *make_piece() { return malloc(sizeof(piece)); } static piece *make_sentinel() { piece *p = make_piece(); p->length = 0; p->next = NULL; p->prev = NULL; p->start = NULL; return p; } bool init_piece_table(piece_table *pt, char *orig) { piece *pc, *sentinel; init_growable_buffer(&pt->add); init_fixed_buffer(&pt->orig, orig); pt->length = pt->orig.size; pc = make_piece(); if(pc == NULL){ return false; } sentinel = make_sentinel(); if(sentinel == NULL){ return false; } pc->start = pt->orig.content; pc->length = pt->orig.size; pc->prev = sentinel; pc->next = sentinel; pt->cached_offset = 0; pt->cached = pc; return true; } void free_piece_table(piece_table *pt) { free_growable_buffer(&pt->add); free_fixed_buffer(&pt->orig); free_piece_list(pt->sentinel); pt->sentinel = NULL; pt->cached = NULL; pt->cached_offset = 0; pt->length = 0; } void free_piece_list(piece *pt) { // TODO }