// 5 may 2015 #include #include "ui.h" #include "uipriv.h" struct ptrArray *newPtrArray(void) { return uiNew(struct ptrArray); } void ptrArrayDestroy(struct ptrArray *p) { if (p->len != 0) complain("attempt to destroy ptrarray %p while it still has pointers inside", p); if (p->ptrs != NULL) // array was created but nothing was ever put inside uiFree(p->ptrs); uiFree(p); } #define grow 32 void ptrArrayAppend(struct ptrArray *p, void *d) { ptrArrayInsertAt(p, p->len, d); } void ptrArrayInsertAt(struct ptrArray *p, uintmax_t i, void *d) { if (i > p->len) complain("index out of range in ptrArrayInsertAt()"); if (p->len >= p->cap) { p->cap += grow; p->ptrs = (void **) uiRealloc(p->ptrs, p->cap * sizeof (void *), "void *[]"); } // thanks to ValleyBell memmove(&(p->ptrs[i + 1]), &(p->ptrs[i]), (p->len - i) * sizeof (void *)); p->ptrs[i] = d; p->len++; } void ptrArrayDelete(struct ptrArray *p, uintmax_t i) { if (i >= p->len) complain("index out of range in ptrArrayRemove()"); // thanks to ValleyBell memmove(&(p->ptrs[i]), &(p->ptrs[i + 1]), (p->len - i - 1) * sizeof (void *)); p->ptrs[p->len - 1] = NULL; p->len--; }