From 517805980b106b5ae44e74f8a9b58e76c09c3124 Mon Sep 17 00:00:00 2001 From: Ekaitz Zarraga Date: Thu, 21 Aug 2025 21:51:47 +0200 Subject: text-buffer: Move to a separate file. --- src/text-buffer.c | 83 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 src/text-buffer.c (limited to 'src/text-buffer.c') 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 + * + * 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 . + */ +#include +#include +#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; icontents[i] = fill[i]; + } +} + +void +text_buffer_free (text_buffer *tb) +{ + free (tb->contents); + text_buffer_init (tb); +} -- cgit v1.2.3