summary refs log tree commit diff
path: root/bin
diff options
context:
space:
mode:
authorJune McEnroe <june@causal.agency>2018-11-20 18:36:45 -0500
committerJune McEnroe <june@causal.agency>2018-11-20 18:36:45 -0500
commit0b825562a1da4930973f5e6065e46f77a7d144ce (patch)
treeb1ba65579d4354960e62c2d785a0c05d4c83f01f /bin
parentAlias ls='ls -p' (diff)
downloadsrc-0b825562a1da4930973f5e6065e46f77a7d144ce.tar.gz
src-0b825562a1da4930973f5e6065e46f77a7d144ce.zip
Add bufferDelete
Diffstat (limited to 'bin')
-rw-r--r--bin/edi/buffer.c16
-rw-r--r--bin/edi/edi.h1
2 files changed, 17 insertions, 0 deletions
diff --git a/bin/edi/buffer.c b/bin/edi/buffer.c
index e9422951..62f55bee 100644
--- a/bin/edi/buffer.c
+++ b/bin/edi/buffer.c
@@ -66,6 +66,12 @@ void bufferAppend(struct Buffer *buf, wchar_t ch) {
 	buf->slice.len++;
 }
 
+void bufferDelete(struct Buffer *buf) {
+	if (!buf->slice.len) return;
+	buf->slice.len--;
+	buf->len--;
+}
+
 wchar_t *bufferDest(struct Buffer *buf, size_t len) {
 	if (buf->len + len > buf->cap) {
 		while (len > buf->cap) buf->cap *= 2;
@@ -116,6 +122,16 @@ int main() {
 	bufferFree(&buf);
 
 	buf = bufferAlloc(4);
+	bufferInsert(&buf);
+	bufferAppend(&buf, L'A');
+	bufferAppend(&buf, L'B');
+	bufferDelete(&buf);
+	assert(!wcsncmp(L"A", buf.slice.ptr, buf.slice.len));
+	bufferAppend(&buf, L'C');
+	assert(!wcsncmp(L"AC", buf.slice.ptr, buf.slice.len));
+	bufferFree(&buf);
+
+	buf = bufferAlloc(4);
 
 	wchar_t *dest = bufferDest(&buf, 2);
 	dest[0] = L'A';
diff --git a/bin/edi/edi.h b/bin/edi/edi.h
index 9b300739..4e127b94 100644
--- a/bin/edi/edi.h
+++ b/bin/edi/edi.h
@@ -44,6 +44,7 @@ struct Buffer bufferAlloc(size_t cap);
 void bufferFree(struct Buffer *buf);
 void bufferInsert(struct Buffer *buf);
 void bufferAppend(struct Buffer *buf, wchar_t ch);
+void bufferDelete(struct Buffer *buf);
 wchar_t *bufferDest(struct Buffer *buf, size_t len);
 
 struct Table {