diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/piece-table-internals.h | 19 | ||||
-rw-r--r-- | src/piece-table.c | 67 | ||||
-rw-r--r-- | src/text-buffer.c | 83 | ||||
-rw-r--r-- | src/text-buffer.h | 39 |
4 files changed, 123 insertions, 85 deletions
diff --git a/src/piece-table-internals.h b/src/piece-table-internals.h index 2da6c53..75f00e1 100644 --- a/src/piece-table-internals.h +++ b/src/piece-table-internals.h @@ -18,13 +18,7 @@ #ifndef PIECE_TABLE_INTERNALS_H #define PIECE_TABLE_INTERNALS_H -typedef struct - { - size_t used; - size_t size; - char *contents; - } -text_buffer; +#include "text-buffer.h" typedef struct _piece { @@ -59,17 +53,6 @@ typedef struct _piece_table } piece_table; - - -/* text_buffer */ -void text_buffer_init (text_buffer *tb); -void text_buffer_resize (text_buffer *tb, size_t size); -void text_buffer_append (text_buffer *tb, char c); -char text_buffer_index (text_buffer *tb, size_t pos); -void text_buffer_empty (text_buffer *tb); -void text_buffer_fill (text_buffer *tb, char *fill, size_t size); -void text_buffer_free (text_buffer *tb); - /* piece_buffer */ piece_buffer *piece_buffer_create (size_t size); void piece_buffer_destroy (piece_buffer *pb); diff --git a/src/piece-table.c b/src/piece-table.c index 5577774..fa7cd48 100644 --- a/src/piece-table.c +++ b/src/piece-table.c @@ -22,73 +22,6 @@ #include <assert.h> #include "piece-table-internals.h" -/* text_buffer */ - -void -text_buffer_init (text_buffer *tb) -{ - tb->used = 0; - tb->size = 0; - tb->contents = NULL; -} - -void -text_buffer_resize (text_buffer *tb, size_t size) -{ - tb->size = size; - tb->contents = realloc (tb->contents, sizeof (*tb->contents) * size); -} - -void -text_buffer_append (text_buffer *tb, char c) -{ - size_t base_size = 1024; - if (tb->size == 0) - { - tb->contents = malloc (sizeof (*tb->contents) * base_size); - tb->size = base_size; - } - else if (tb->size == tb->used) - text_buffer_resize (tb, tb->size * 2); - tb->contents[tb->used++] = c; -} - -char -text_buffer_index (text_buffer *tb, size_t pos) -{ - assert (pos < tb->used); - return tb->contents[pos]; -} - -void -text_buffer_empty (text_buffer *tb) -{ - free (tb->contents); - text_buffer_init (tb); -} - -void -text_buffer_fill (text_buffer *tb, char *fill, size_t size) -{ - size_t i; - tb->used = size; - tb->size = size; - free (tb->contents); - tb->contents = malloc (sizeof (*tb->contents) * size); - for (i=0; i<size; i++) - { - tb->contents[i] = fill[i]; - } -} - -void -text_buffer_free (text_buffer *tb) -{ - free (tb->contents); - text_buffer_init (tb); -} - - /* piece_buffer */ piece_buffer * diff --git a/src/text-buffer.c b/src/text-buffer.c new file mode 100644 index 0000000..caa1c3e --- /dev/null +++ b/src/text-buffer.c @@ -0,0 +1,83 @@ +/* parc + * Copyright (C) 2025 Ekaitz Zarraga <ekaitz@elenq.tech> + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +#include <assert.h> +#include <stdlib.h> +#include "text-buffer.h" + +void +text_buffer_init (text_buffer *tb) +{ + tb->used = 0; + tb->size = 0; + tb->contents = NULL; +} + +void +text_buffer_resize (text_buffer *tb, size_t size) +{ + tb->size = size; + tb->contents = realloc (tb->contents, sizeof (*tb->contents) * size); +} + +void +text_buffer_append (text_buffer *tb, char c) +{ + size_t base_size = 1024; + if (tb->size == 0) + { + tb->contents = malloc (sizeof (*tb->contents) * base_size); + tb->size = base_size; + } + else if (tb->size == tb->used) + text_buffer_resize (tb, tb->size * 2); + tb->contents[tb->used++] = c; +} + +char +text_buffer_index (text_buffer *tb, size_t pos) +{ + assert (pos < tb->used); + return tb->contents[pos]; +} + +void +text_buffer_empty (text_buffer *tb) +{ + free (tb->contents); + text_buffer_init (tb); +} + +void +text_buffer_fill (text_buffer *tb, char *fill, size_t size) +{ + size_t i; + tb->used = size; + tb->size = size; + free (tb->contents); + tb->contents = malloc (sizeof (*tb->contents) * size); + for (i=0; i<size; i++) + { + tb->contents[i] = fill[i]; + } +} + +void +text_buffer_free (text_buffer *tb) +{ + free (tb->contents); + text_buffer_init (tb); +} diff --git a/src/text-buffer.h b/src/text-buffer.h new file mode 100644 index 0000000..5361534 --- /dev/null +++ b/src/text-buffer.h @@ -0,0 +1,39 @@ +/* parc + * Copyright (C) 2025 Ekaitz Zarraga <ekaitz@elenq.tech> + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#ifndef TEXT_BUFFER_H +#define TEXT_BUFFER_H + +#include <stddef.h> + +typedef struct + { + size_t used; + size_t size; + char *contents; + } +text_buffer; + +void text_buffer_init (text_buffer *tb); +void text_buffer_resize (text_buffer *tb, size_t size); +void text_buffer_append (text_buffer *tb, char c); +char text_buffer_index (text_buffer *tb, size_t pos); +void text_buffer_empty (text_buffer *tb); +void text_buffer_fill (text_buffer *tb, char *fill, size_t size); +void text_buffer_free (text_buffer *tb); + +#endif /* TEXT_BUFFER_H */ |