void VectorAppend(vector *v, const void *elemAddr) { if(v->logicalLen == v->allocLen){ VectorGrow(v); } void *target = (char*)v->elems + v->logicalLen * v->elemSize; memcpy(target, elemAddr, v->elemSize); v->logicalLen++; }
void VectorInsert(vector *v, const void *elemAddr, int position) { assert(position >= 0 && position <= v->logicalLen); if(v->logicalLen == v->allocLen){ VectorGrow(v); } ShuffleBack(v, position); void *target = (char*)v->elems + position*v->elemSize; memcpy(target, elemAddr, v->elemSize); v->logicalLen++; }
ptr_t VectorCreateRow(Vector_t *vectorP) { ptr_t newRowP = NULL; if (! vectorP) { return NULL; } if (vectorP->rowCount == vectorP->maxRows) { if (! VectorGrow(vectorP)) { return NULL; } } newRowP = (ptr_t)((uint8_t *)vectorP->rowP) + (vectorP->rowCount * vectorP->rowSize); vectorP->rowCount++; VectorZeroRow(vectorP, newRowP); return newRowP; }