diff options
author | Hugo Hörnquist <hugo@lysator.liu.se> | 2019-03-22 20:11:11 +0100 |
---|---|---|
committer | Hugo Hörnquist <hugo@lysator.liu.se> | 2019-03-22 20:17:52 +0100 |
commit | d46183860c1f3f10095e95023adcb79b1896ab0e (patch) | |
tree | dd331a0efe9777bfe84160139da1e39df3226b71 /src/strbuf.h | |
parent | Add stuff to test.scm. (diff) | |
download | calp-d46183860c1f3f10095e95023adcb79b1896ab0e.tar.gz calp-d46183860c1f3f10095e95023adcb79b1896ab0e.tar.xz |
Move C and Scheme code into subdirs.
Diffstat (limited to 'src/strbuf.h')
-rw-r--r-- | src/strbuf.h | 109 |
1 files changed, 109 insertions, 0 deletions
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 <stdlib.h> +#include <libguile.h> +#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 */ |