Added daPopDiscard function

This commit is contained in:
Maciej Samborski 2024-03-03 20:34:54 +01:00
parent e305cc2c66
commit 1c135b3d09
2 changed files with 15 additions and 6 deletions

17
da.h
View File

@ -17,6 +17,7 @@ typedef void * dynarr;
dynarr _daCreate(size_t initCapacity, size_t type, size_t size); dynarr _daCreate(size_t initCapacity, size_t type, size_t size);
dynarr _daPush(dynarr da, void * item); dynarr _daPush(dynarr da, void * item);
void _daPop(dynarr da, void * element); void _daPop(dynarr da, void * element);
void daPopDiscard(dynarr da);
void daFree(dynarr da); void daFree(dynarr da);
size_t daSize(dynarr da); size_t daSize(dynarr da);
@ -86,6 +87,11 @@ void _daPop(dynarr da, void * elem)
memcpy(elem, (char *)da + daSize(da) * daType(da), daType(da)); memcpy(elem, (char *)da + daSize(da) * daType(da), daType(da));
} }
void daPopDiscard(dynarr da)
{
*daField(da, SIZE) -= 1;
}
size_t * daField(dynarr da, enum daFields field) size_t * daField(dynarr da, enum daFields field)
{ {
if (field < SIZE || field > TYPE) if (field < SIZE || field > TYPE)
@ -94,7 +100,8 @@ size_t * daField(dynarr da, enum daFields field)
fprintf(stderr, "ERROR: Wrong field: %d\n", field); fprintf(stderr, "ERROR: Wrong field: %d\n", field);
fprintf(stderr, "AVAILABLE: SIZE, CAPACITY, TYPE\n"); fprintf(stderr, "AVAILABLE: SIZE, CAPACITY, TYPE\n");
fprintf(stderr, "*------------------------------*\n"); fprintf(stderr, "*------------------------------*\n");
exit(1);
return NULL;
} }
return ((size_t *) da - DATA + field); return ((size_t *) da - DATA + field);
@ -138,10 +145,10 @@ void * daGetRef(dynarr da, size_t index)
{ {
if (index >= daSize(da)) if (index >= daSize(da))
{ {
fprintf(stderr, "*------------------------------*\n"); fprintf(stderr, ("*------------------------------*\n"));
fprintf(stderr, "ERROR: Access out of bounds\n"); fprintf(stderr, ("ERROR: Access out of bounds\n"));
fprintf(stderr, "*------------------------------*\n"); fprintf(stderr, ("*------------------------------*\n"));
exit(1); return NULL;
} }
return (void *)((char *)da + index * daType(da)); return (void *)((char *)da + index * daType(da));

View File

@ -64,6 +64,8 @@ int main(void)
*(char *)daGetRef(da2, 6) = '!'; *(char *)daGetRef(da2, 6) = '!';
daPopDiscard(da2);
heapstr message = daToCStr(da2); heapstr message = daToCStr(da2);
printf("%s\n", message); printf("%s\n", message);