From bf4535008a78ed84fe3e76a9ae262646b9a5f150 Mon Sep 17 00:00:00 2001 From: WormHeamer Date: Sat, 27 Dec 2025 23:26:28 -0500 Subject: basic piece table implementation --- txt.h | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 txt.h (limited to 'txt.h') diff --git a/txt.h b/txt.h new file mode 100644 index 0000000..21712af --- /dev/null +++ b/txt.h @@ -0,0 +1,43 @@ +#ifndef TXT_H +#define TXT_H + +#include "dynarr.h" + +typedef enum : u8 { + TXT_SRC, + TXT_ADD +} TxtBufIdx; + +typedef struct TxtPiece { + TxtBufIdx buf; + u32 ofs, n; +} TxtPiece; + +typedef struct { + char *s; + u32 n, c; +} TxtBuf; + +typedef struct { + u32 p, i; +} TxtLoc; + +typedef struct { + DYNARR(TxtPiece) ptbl; + TxtBuf buf[2]; + u32 len; +} Txt; + +TxtLoc txt_at(Txt *b, u32 cur); + +u32 txt_split_piece(Txt *b, u32 pi, u32 i); +void txt_remove_piece(Txt *b, u32 pi); +void txt_insert_piece(Txt *b, u32 pi, TxtBufIdx buf, u32 ofs, u32 n); +void txt_buf_append(Txt *b, TxtBufIdx bi, const char *s, u32 n); + +u32 txt_insert(Txt *b, u32 cur, const char *s, u32 n); +u32 txt_insert_c(Txt *b, u32 cur, char ch); +u32 txt_delete(Txt *b, u32 cur, u32 n); +int txt_open(Txt *b, const char *path); + +#endif -- cgit v1.2.3