void CArrayClear(CArray cArray) { if (cArray->releaser) { for (int i = 0; i < cArray->count; ++i) { cArray->releaser(CArrayElement(cArray, i)); } } cArray->count = 0; }
void CArrayRemoveElement(CArray cArray, void *element) { if (cArray->releaser) cArray->releaser(element); int numLeft = --(cArray->count); char *eltByte = (char *)element; int byteDist = eltByte - cArray->elements; int index = byteDist / cArray->elementSize; if (index == numLeft) return; memmove(eltByte, eltByte + cArray->elementSize, (numLeft - index) * cArray->elementSize); }