diff options
Diffstat (limited to 'src/include/skalibs/genqdyn.h')
-rw-r--r-- | src/include/skalibs/genqdyn.h | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/src/include/skalibs/genqdyn.h b/src/include/skalibs/genqdyn.h new file mode 100644 index 0000000..0f7751b --- /dev/null +++ b/src/include/skalibs/genqdyn.h @@ -0,0 +1,33 @@ +/* ISC license. */ + +#ifndef SKALIBS_GENQDYN_H +#define SKALIBS_GENQDYN_H + +#include <sys/types.h> +#include <skalibs/stralloc.h> + +typedef struct genqdyn_s genqdyn, *genqdyn_ref ; +struct genqdyn_s +{ + stralloc queue ; + size_t esize ; + size_t head ; + unsigned int num ; + unsigned int den ; +} ; + +#define GENQDYN_ZERO { .queue = STRALLOC_ZERO, .esize = 1, .head = 0, .num = 0, .den = 1 } +extern genqdyn const genqdyn_zero ; + +#define GENQDYN_INIT(type, n, d) { .queue = STRALLOC_ZERO, .esize = sizeof(type), .head = 0, .num = n, .den = d } +extern void genqdyn_init (genqdyn *, size_t, unsigned int, unsigned int) ; + +#define genqdyn_n(g) ((g)->queue.len / (g)->esize - (g)->head) ; + +extern void genqdyn_free (genqdyn *) ; +extern int genqdyn_push (genqdyn *, void const *) ; +#define GENQDYN_PEEK(type, g) ((type *)((g)->queue.s + (g)->esize * (g)->head)) +#define genqdyn_peek(g) GENQDYN_PEEK(void, (g)) +extern int genqdyn_pop(genqdyn *) ; + +#endif |