diff --git a/include/cyclone/types.h b/include/cyclone/types.h index 75f25b2d..ffeaa9c5 100644 --- a/include/cyclone/types.h +++ b/include/cyclone/types.h @@ -1428,6 +1428,16 @@ typedef union { /**@}*/ /**@}*/ +typedef struct vpbuffer_t vpbuffer; +struct vpbuffer_t { + void **buf; + int len; + int count; +}; + +vpbuffer *vp_create(void); +void vp_add(vpbuffer *v, void *obj); + /* Utility functions */ void **vpbuffer_realloc(void **buf, int *len); void **vpbuffer_add(void **buf, int *len, int i, void *obj); diff --git a/runtime.c b/runtime.c index 9429bf7c..80b0f91d 100644 --- a/runtime.c +++ b/runtime.c @@ -6435,6 +6435,21 @@ void vpbuffer_free(void **buf) free(buf); } +vpbuffer *vp_create(void) +{ + vpbuffer *v = malloc(sizeof(vpbuffer)); + v->len = 128; + v->count = 0; + v->buf = NULL; + v->buf = vpbuffer_realloc(v->buf, &(v->len)); + return v; +} + +void vp_add(vpbuffer *v, void *obj) +{ + v->buf = vpbuffer_add(v->buf, &(v->len), v->count++, obj); +} + object Cyc_bit_unset(void *data, object n1, object n2) { Cyc_check_int(data, n1);