diff options
| author | Ian Moffett <ian@mirocom.org> | 2026-05-23 06:03:23 -0400 |
|---|---|---|
| committer | Ian Moffett <ian@mirocom.org> | 2026-05-23 06:04:40 -0400 |
| commit | f99c1d678f3310a3679b24e518355fbb00211273 (patch) | |
| tree | 8ec6498d4c591fd2776e203296232d73740200f3 /include | |
| parent | 32635789dca1c35224ce6e320a03db23e56d380f (diff) | |
core: Add pointer box / RAII impl
Signed-off-by: Ian Moffett <ian@mirocom.org>
Diffstat (limited to 'include')
| -rw-r--r-- | include/cescal/ptrbox.h | 71 | ||||
| -rw-r--r-- | include/cescal/state.h | 3 |
2 files changed, 74 insertions, 0 deletions
diff --git a/include/cescal/ptrbox.h b/include/cescal/ptrbox.h new file mode 100644 index 0000000..bde75f1 --- /dev/null +++ b/include/cescal/ptrbox.h @@ -0,0 +1,71 @@ +/* + * Copyright (c) 2026, Chloe M. + * Provided under the BSD-3 clause + */ + +#ifndef CESCAL_PTRBOX_H +#define CESCAL_PTRBOX_H 1 + +/* + * Represents a pointer box entry in which allocated data can + * be stored within + * + * @data: Allocated data backed by entry + * @next: Next pointer box entry + */ +struct ptrbox_entry { + void *data; + struct ptrbox_entry *next; +}; + +/* + * Represents a pointer box that enables RAII like behavior + * + * @head: Pointer box head + * @tail: Pointer box tail + */ +struct ptrbox { + struct ptrbox_entry *head; + struct ptrbox_entry *tail; +}; + +/* + * Initialize a pointer box + * + * @ptrbox: Pointer box to initialize + * + * Returns zero on success + */ +int ptrbox_init(struct ptrbox *ptrbox); + +/* + * Allocate memory and save the reference within a pointer box + * + * @ptrbox: Pointer box to save reference within + * @len: Length of memory to allocate + * + * Returns the base of the allocated memory on success, otherwise + * NULL. + */ +void *ptrbox_alloc(struct ptrbox *ptrbox, size_t len); + +/* + * Duplicate a string and store the reference within a + * pointer box + * + * @ptrbox: Pointer box to store reference within + * @s: String to duplicate + * + * Returns the duplicated string on success, otherwise NULL. + */ +char *ptrbox_strdup(struct ptrbox *ptrbox, const char *s); + +/* + * Destroy a pointer box along with all references stored + * within + * + * @ptrbox: Pointer box to destroy + */ +void ptrbox_destroy(struct ptrbox *ptrbox); + +#endif /* !CESCAL_PTRBOX_H */ diff --git a/include/cescal/state.h b/include/cescal/state.h index e832bc9..566b5a2 100644 --- a/include/cescal/state.h +++ b/include/cescal/state.h @@ -9,6 +9,7 @@ #include <stdint.h> #include "cescal/readbuf.h" #include "cescal/tokbuf.h" +#include "cescal/ptrbox.h" /* * Compiler state machine @@ -16,11 +17,13 @@ * @in_fd: Input file descriptor * @rb: Read buffer * @tokbuf: Token buffer + * @ptrbox: Global pointer box */ struct cescal_state { int in_fd; struct readbuf rb; struct tokbuf tokbuf; + struct ptrbox ptrbox; }; /* |
