#include "dvec.h" #include "util.h" #include #include static inline void * dvec_add_slots(struct dvec *dvec, size_t count) { assert(!dvec_add(dvec, dvec->len, count)); return dvec->data + (dvec->len - count) * dvec->dsize; } static inline void * dvec_add_slot(struct dvec *dvec) { return dvec_add_slots(dvec, 1); } static inline void dvec_rm_slots(struct dvec *dvec, void *slot, size_t count) { dvec_rm(dvec, ((size_t) (slot - dvec->data)) / dvec->dsize, count); } static inline void dvec_rm_slot(struct dvec *dvec, void *slot) { dvec_rm_slots(dvec, slot, 1); } static inline ssize_t dvec_sprintf(struct dvec *dvec, const char *fmtstr, ...) { va_list ap, cpy; ssize_t n; va_copy(cpy, ap); va_start(cpy, fmtstr); n = vsnprintf(NULL, 0, fmtstr, cpy); assert(n >= 0); va_end(cpy); va_start(ap, fmtstr); dvec_add_slots(dvec, (size_t) n + 1); vsnprintf(dvec->data, dvec->len, fmtstr, ap); va_end(ap); return n; }