summaryrefslogtreecommitdiff
path: root/src/text-buffer.c
diff options
context:
space:
mode:
authorEkaitz Zarraga <ekaitz@elenq.tech>2025-08-21 21:51:47 +0200
committerEkaitz Zarraga <ekaitz@elenq.tech>2025-08-21 21:51:47 +0200
commit517805980b106b5ae44e74f8a9b58e76c09c3124 (patch)
tree5e222d1671217671be7d792da72e37d23369d7f1 /src/text-buffer.c
parentd819be1c8161741e1e736521d12c06749af87527 (diff)
text-buffer: Move to a separate file.
Diffstat (limited to 'src/text-buffer.c')
-rw-r--r--src/text-buffer.c83
1 files changed, 83 insertions, 0 deletions
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);
+}