Fixed floating point number support
This commit is contained in:
parent
f9fa4ce612
commit
df957fa078
56
da.h
56
da.h
|
@ -19,6 +19,7 @@ enum daFields {
|
||||||
typedef void * dynarr;
|
typedef void * dynarr;
|
||||||
GenericReturn _daCreate(size_t initCapacity, size_t type, size_t size);
|
GenericReturn _daCreate(size_t initCapacity, size_t type, size_t size);
|
||||||
GenericReturn _daPushLit(dynarr * da, size_t item);
|
GenericReturn _daPushLit(dynarr * da, size_t item);
|
||||||
|
GenericReturn _daPushFlt(dynarr * da, float item);
|
||||||
GenericReturn _daPushStr(dynarr * da, const char * str);
|
GenericReturn _daPushStr(dynarr * da, const char * str);
|
||||||
GenericReturn daCopy(dynarr da);
|
GenericReturn daCopy(dynarr da);
|
||||||
GenericReturn daResize(dynarr da);
|
GenericReturn daResize(dynarr da);
|
||||||
|
@ -44,9 +45,12 @@ void daBzero(dynarr da);
|
||||||
#define daCreate(type, cap) _daCreate(cap, sizeof(type), 0)
|
#define daCreate(type, cap) _daCreate(cap, sizeof(type), 0)
|
||||||
#define daPush(da, item) _Generic((item), \
|
#define daPush(da, item) _Generic((item), \
|
||||||
char *: _daPushStr, \
|
char *: _daPushStr, \
|
||||||
|
float: _daPushFlt, \
|
||||||
|
double: _daPushFlt, \
|
||||||
default: _daPushLit \
|
default: _daPushLit \
|
||||||
)((void *)&da, item)
|
)((void *)&da, item)
|
||||||
#define daPop(da, item) _daPop(da, &item)
|
#define daPop(da, item) _daPop(da, &item)
|
||||||
|
#define daGet(da, index) (da[index])
|
||||||
|
|
||||||
#endif // DA_H_
|
#endif // DA_H_
|
||||||
|
|
||||||
|
@ -106,23 +110,6 @@ GenericReturn daResize(dynarr da)
|
||||||
return ehanValue(newArr);
|
return ehanValue(newArr);
|
||||||
}
|
}
|
||||||
|
|
||||||
GenericReturn _daPush(dynarr * da, void * item)
|
|
||||||
{
|
|
||||||
if (daSize(*da) >= daCap(*da))
|
|
||||||
{
|
|
||||||
GenericReturn temp = daResize(*da);
|
|
||||||
|
|
||||||
if (ehanCheck(temp))
|
|
||||||
return ehanError(resultError(temp));
|
|
||||||
|
|
||||||
*da = resultGeneric(dynarr, temp);
|
|
||||||
}
|
|
||||||
|
|
||||||
memcpy((char *)(*da) + daSize(*da) * daType(*da), item, daType(*da));
|
|
||||||
*daField(*da, SIZE) += 1;
|
|
||||||
return ehanValue(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
GenericReturn _daPushLit(dynarr * da, size_t item)
|
GenericReturn _daPushLit(dynarr * da, size_t item)
|
||||||
{
|
{
|
||||||
if (daSize(*da) >= daCap(*da))
|
if (daSize(*da) >= daCap(*da))
|
||||||
|
@ -135,7 +122,6 @@ GenericReturn _daPushLit(dynarr * da, size_t item)
|
||||||
*da = resultGeneric(dynarr, temp);
|
*da = resultGeneric(dynarr, temp);
|
||||||
}
|
}
|
||||||
|
|
||||||
//TODO: Rewrite this
|
|
||||||
switch (daType(*da))
|
switch (daType(*da))
|
||||||
{
|
{
|
||||||
case 1: {
|
case 1: {
|
||||||
|
@ -154,10 +140,44 @@ GenericReturn _daPushLit(dynarr * da, size_t item)
|
||||||
*(long long int *)((char *)*da + daType(*da) * daSize(*da)) = item;
|
*(long long int *)((char *)*da + daType(*da) * daSize(*da)) = item;
|
||||||
} break;
|
} break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
return ehanError("Wrong type size");
|
||||||
|
}
|
||||||
|
*daField(*da, SIZE) += 1;
|
||||||
|
|
||||||
|
return ehanValue(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
GenericReturn _daPushFlt(dynarr * da, float item)
|
||||||
|
{
|
||||||
|
if (daSize(*da) >= daCap(*da))
|
||||||
|
{
|
||||||
|
GenericReturn temp = daResize(*da);
|
||||||
|
|
||||||
|
if (ehanCheck(temp))
|
||||||
|
return ehanError(resultError(temp));
|
||||||
|
|
||||||
|
*da = resultGeneric(dynarr, temp);
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (daType(*da))
|
||||||
|
{
|
||||||
|
case 4: {
|
||||||
|
*(float *)((char *)*da + daType(*da) * daSize(*da)) = item;
|
||||||
|
} break;
|
||||||
|
|
||||||
|
case 8: {
|
||||||
|
*(double *)((char *)*da + daType(*da) * daSize(*da)) = item;
|
||||||
|
} break;
|
||||||
|
|
||||||
case 16: {
|
case 16: {
|
||||||
*(long double *)((char *)*da + daType(*da) * daSize(*da)) = item;
|
*(long double *)((char *)*da + daType(*da) * daSize(*da)) = item;
|
||||||
} break;
|
} break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
return ehanError("Wrong type size");
|
||||||
}
|
}
|
||||||
|
|
||||||
*daField(*da, SIZE) += 1;
|
*daField(*da, SIZE) += 1;
|
||||||
|
|
||||||
return ehanValue(0);
|
return ehanValue(0);
|
||||||
|
|
22
example.c
22
example.c
|
@ -1,3 +1,4 @@
|
||||||
|
#include <stdio.h>
|
||||||
#define DA_IMPLEMENTATION
|
#define DA_IMPLEMENTATION
|
||||||
#include "da.h"
|
#include "da.h"
|
||||||
|
|
||||||
|
@ -101,8 +102,29 @@ int main(void)
|
||||||
daPop(da3, str);
|
daPop(da3, str);
|
||||||
printf("%s\n", str);
|
printf("%s\n", str);
|
||||||
|
|
||||||
|
printf("----------\n");
|
||||||
|
printf("DA4\n");
|
||||||
|
printf("----------\n");
|
||||||
|
|
||||||
|
dynarr(double) da4 = daCreate(double, 1).val;
|
||||||
|
|
||||||
|
daPush(da4, 69.692343);
|
||||||
|
printf("float: %F\n", da4[0]);
|
||||||
|
|
||||||
|
printf("----------\n");
|
||||||
|
printf("DA5\n");
|
||||||
|
printf("----------\n");
|
||||||
|
|
||||||
|
dynarr(char *) da5 = daCreate(char *, 1).val;
|
||||||
|
|
||||||
|
daPush(da5, "Hello, ");
|
||||||
|
daPush(da5, "World!");
|
||||||
|
|
||||||
|
DLog("%s%s\n", da5[0], da5[1]);
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
|
daFree(da5);
|
||||||
|
daFree(da4);
|
||||||
daFree(da3);
|
daFree(da3);
|
||||||
free(message);
|
free(message);
|
||||||
daFree(da2);
|
daFree(da2);
|
||||||
|
|
Loading…
Reference in New Issue