diff options
Diffstat (limited to 'src/piece-table.c')
-rw-r--r-- | src/piece-table.c | 58 |
1 files changed, 11 insertions, 47 deletions
diff --git a/src/piece-table.c b/src/piece-table.c index c170216..43728e4 100644 --- a/src/piece-table.c +++ b/src/piece-table.c @@ -20,49 +20,10 @@ #include <stdlib.h> #include <string.h> #include <assert.h> +#include "piece-table-internals.h" -typedef struct - { - size_t used; - size_t size; - char *contents; - } -text_buffer; - -typedef struct _piece - { - text_buffer *buffer; - size_t start; - size_t length; - struct _piece *next; - struct _piece *prev; - } -piece; - -typedef struct _piece_buffer - { - size_t used; - size_t size; - struct _piece_buffer *next; - piece *start; - } -piece_buffer; - -typedef struct _piece_table - { - text_buffer orig; - text_buffer add; - piece_buffer *pieces; - piece *sentinel; - piece *empty; - size_t length; - - piece *cached; - size_t cached_offset; - } -piece_table; +/* text_buffer */ - void text_buffer_init (text_buffer *tb) { @@ -128,6 +89,8 @@ text_buffer_free (text_buffer *tb) } +/* piece_buffer */ + piece_buffer * piece_buffer_create (size_t size) { @@ -175,6 +138,8 @@ piece_buffer_bump (piece_buffer *pb) } +/* piece_table */ + void piece_table_piece_mark_empty (piece_table *pt, piece *p) { @@ -222,7 +187,7 @@ piece_table_piece_split (piece_table *pt, piece *p, size_t pos) } void -piece_find_by_pos (piece_table *pt, size_t pos) +piece_table_piece_find (piece_table *pt, size_t pos) { piece *cur; assert (pos < pt->length); @@ -283,7 +248,7 @@ piece_table_insert (piece_table *pt, size_t pos, char *in, size_t len) } else { - piece_find_by_pos (pt, pos); + piece_table_piece_find (pt, pos); start = piece_table_piece_split (pt, pt->cached, pos - pt->cached_offset); } @@ -340,7 +305,7 @@ piece_table_delete (piece_table *pt, size_t pos, size_t len) } else { - piece_find_by_pos (pt, pos); + piece_table_piece_find (pt, pos); off_start = pt->cached_offset; start = piece_table_piece_split (pt, pt->cached, pos - pt->cached_offset); @@ -352,7 +317,7 @@ piece_table_delete (piece_table *pt, size_t pos, size_t len) } else { - piece_find_by_pos (pt, pos + len); + piece_table_piece_find (pt, pos + len); end = piece_table_piece_split (pt, pt->cached, pos + len - pt->cached_offset)->next; } @@ -415,7 +380,6 @@ piece_table_create (char *orig, size_t size) return piece_table_create_from ("", 0); } - void piece_table_destroy (piece_table *pt) { @@ -429,7 +393,7 @@ char piece_table_index (piece_table *pt, size_t pos) { assert (pos < pt->length); - piece_find_by_pos (pt, pos); + piece_table_piece_find (pt, pos); return text_buffer_index (pt->cached->buffer, pt->cached->start + pos - pt->cached_offset); } |