From d46183860c1f3f10095e95023adcb79b1896ab0e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hugo=20H=C3=B6rnquist?= Date: Fri, 22 Mar 2019 20:11:11 +0100 Subject: Move C and Scheme code into subdirs. --- src/strbuf.h | 109 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 109 insertions(+) create mode 100644 src/strbuf.h (limited to 'src/strbuf.h') diff --git a/src/strbuf.h b/src/strbuf.h new file mode 100644 index 00000000..7f936a9e --- /dev/null +++ b/src/strbuf.h @@ -0,0 +1,109 @@ +#ifndef STRBUF_H +#define STRBUF_H + +#include +#include +#include "macro.h" + +/* + * A high level string type which holds it's own length, how much + * memmory it has allocated for itself, and a seek pointer into the + * string. + * + * Also comes with a number of functions which allow for safe(er) + * access to the memmory. + */ +typedef struct { + char* mem; + SCM scm; + /* TODO add support for negative ptr */ + int ptr; + unsigned int alloc; + unsigned int len; +} strbuf; + +/* + * Init strbuf to size of 10 + */ +INIT_F(strbuf); + +/* + * Like realloc, but for strbuf + */ +int strbuf_realloc(strbuf* str, size_t len); + +/* + * Free's contents of str, but keeps str. + */ +FREE_F(strbuf); + +int strbuf_cmp(strbuf* a, strbuf* b); +int strbuf_c(strbuf* a, const char* b); + +/* + * Copy contents from src to dest. + * Assumes that dest is already initialized. + */ +int DEEP_COPY(strbuf)(strbuf*, strbuf*); + +/* + * Append char to end of strbuf, determined by s->len. + * + * TODO rename this PUSH(strbuf)? + */ +int strbuf_append(strbuf* s, char c); + +char strbuf_pop(strbuf*); + +/* + * Calls strbuf_append with NULL. + */ +int strbuf_cap(strbuf* s); + +/* + * Returns a pointer to character at index. Allows mutation of the + * value pointed to by the return address. + */ +char* charat(strbuf* s, unsigned int idx); + +/* + * Same as `charat`, But returns the current character. + */ +char* strbuf_cur(strbuf* s); + +/* + * Resets the seek for strbuf to 0. + */ +int strbuf_reset(strbuf* s); + +/* + * Sets the length and seek ptr to 0, but doesn't touch the memmory. + */ +int strbuf_soft_reset(strbuf* s); + +/* + * Returns the character after the last, so where null hopefully is. + */ +char* strbuf_end(strbuf* s); + +/* + * Reallocs dest to be the same size as src, and copies the contents + * of src into dest. + */ +int strbuf_realloc_copy(strbuf* dest, strbuf* src); + +/* + * Copies contents from src to dest, also allocating dest in the + * process. dest should not be initialized before self call. + */ +int strbuf_init_copy(strbuf* dest, strbuf* src); + +strbuf* RESOLVE(strbuf)(strbuf*, strbuf*); + +FMT_F(strbuf); + +int SIZE(strbuf)(strbuf*); + +int strbuf_load(strbuf* self, const char* str); + +#endif /* STRBUF_H */ -- cgit v1.2.3