summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/piece-table-internals.h19
-rw-r--r--src/piece-table.c67
-rw-r--r--src/text-buffer.c83
-rw-r--r--src/text-buffer.h39
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 */