Merge branch 'ehan'

This commit is contained in:
Maciej Samborski 2024-10-01 22:16:05 +02:00
commit ae489f5cc4
3 changed files with 39 additions and 6 deletions

3
.gitignore vendored
View File

@ -1,3 +1,6 @@
.ctags
main
valgrind-out.txt
*.orig
test
test.c

11
da.h
View File

@ -50,9 +50,11 @@ void daBzero(dynarr da);
GenericReturn _daCreate(size_t cap, size_t type, size_t size)
{
if (cap == 0) cap = 1;
size_t * da = (size_t *) malloc(type * cap + DATA * sizeof(size_t));
if (da == NULL)
ehanError("Failed to allocate resources for a dynamic array!");
return ehanError("Failed to allocate resources for a dynamic array!");
da[SIZE] = size;
da[CAPACITY] = cap;
@ -63,13 +65,14 @@ GenericReturn _daCreate(size_t cap, size_t type, size_t size)
void daFree(dynarr da)
{
if (da == NULL) return;
free((size_t *) da - DATA);
}
GenericReturn daCopy(dynarr da)
{
if (da == NULL)
ehanError("Expected: 'dynarr' got 'NULL'");
return ehanError("Expected: 'dynarr' got 'NULL'");
GenericReturn temp = _daCreate(daCap(da), daType(da), daSize(da));
@ -85,7 +88,7 @@ GenericReturn daCopy(dynarr da)
GenericReturn daResize(dynarr da)
{
if (da == NULL)
ehanError("Expected: 'dynarr' got 'NULL'");
return ehanError("Expected: 'dynarr' got 'NULL'");
GenericReturn temp = _daCreate(daCap(da) * 2, daType(da), daSize(da));
@ -166,6 +169,8 @@ void daForeach(dynarr da, func f)
heapstr daToCStr(dynarr da)
{
char * buffer = (char *) calloc(1, daSize(da) + 1);
if (buffer == NULL) return NULL;
memcpy(buffer, da, daSize(da) * daType(da));
return buffer;
}

View File

@ -22,7 +22,14 @@ int main(void)
printf("DA1\n");
printf("----------\n");
dynarr(unsigned short) da = daCreate(unsigned short, 1).val;
GenericReturn gr = daCreate(unsigned short, 1);
if (ehanCheck(gr))
{
ELog("%s\n", resultError(gr));
exit(1);
}
dynarr(unsigned short) da = resultGeneric(dynarr(unsigned short), gr);
unsigned short x = 69;
daPush(da, x);
@ -74,8 +81,26 @@ int main(void)
heapstr message = daToCStr(da2);
printf("%s\n", message);
free(message);
daFree(da);
printf("----------\n");
printf("DA3\n");
printf("----------\n");
dynarr(char *) da3 = daCreate(char *, 1).val;
const char * someString = "Test";
for (size_t i = 0; i < 100000000; ++i) {
daPush(da3, someString);
}
char * str;
daPop(da3, str);
printf("%s\n", str);
daFree(da3);
free(message);
daFree(da2);
daFree(da);
return 0;
}