Added floating point number support

This commit is contained in:
Maciej Samborski 2024-10-31 18:09:30 +01:00
parent a83400bfdf
commit 43a96d3865
2 changed files with 36 additions and 33 deletions

View File

@ -3,13 +3,6 @@
#define LL_IMPLEMENTATION #define LL_IMPLEMENTATION
#include "ll.h" #include "ll.h"
#define llPrint(type, format, list) do { \
for (size_t i = 0; i < llLen(list); ++i) \
{ \
printf(format"\n", llGet(type, list, i)); \
} \
} while (0)
int main(void) int main(void)
{ {
llList list = llCreateList(); llList list = llCreateList();
@ -26,9 +19,21 @@ int main(void)
float * y = llGetRef(float, list, 1); float * y = llGetRef(float, list, 1);
printf("*y: %f\n", *y); printf("*y: %f\n", *y);
llInsert(list, 3, 42.0f);
printf("%zu\n", llLen(list)); printf("%zu\n", llLen(list));
llPrint(int, "%d", list); for (size_t i = 0; i < llLen(list); ++i)
{
printf("%f\n", llGet(float, list, i));
}
printf("\n");
for (size_t i = 0; i < llLen(list); ++i)
{
printf("%d\n", llGet(int, list, i));
}
llList list2 = llCreateList(); llList list2 = llCreateList();

48
ll.h
View File

@ -24,16 +24,34 @@ void _llAppend(llList * list, void * value);
llList * _llPrepend(llList * list, void * value); llList * _llPrepend(llList * list, void * value);
llList * _llInsert(llList * list, size_t id, void * value); llList * _llInsert(llList * list, size_t id, void * value);
llList * _llDelete(llList * list, size_t id); llList * _llDelete(llList * list, size_t id);
size_t _llGet(llList * list, size_t id); void * _llGet(llList * list, size_t id);
void * _llGetRef(llList * list, size_t id); void * _llGetRef(llList * list, size_t id);
size_t llLen(llList list); size_t llLen(llList list);
#define llAppend(list, value) _llAppend(&list, (void *)(uintptr_t) value) #define llAppend(list, value) \
#define llPrepend(list, value) list = *_llPrepend(&list, (void *)(uintptr_t) value) do { \
#define llInsert(list, id, value) list = *_llInsert(&list, id, (void *)(uintptr_t) value) typeof(value) v1 = value; \
void * v2 = (void *)*(uintptr_t *) &v1; \
_llAppend(&list, v2); \
} while (0)
#define llPrepend(list, value) \
do { \
typeof(value) v1 = value; \
void * v2 = (void *)*(uintptr_t *) &v1; \
list = *_llPrepend(&list, v2); \
} while (0)
#define llInsert(list, id, value) \
do { \
typeof(value) v1 = value; \
void * v2 = (void *)*(uintptr_t *) &v1; \
list = *_llInsert(&list, id, v2); \
} while (0)
#define llDelete(list, id) list = *_llDelete(&list, id) #define llDelete(list, id) list = *_llDelete(&list, id)
#define llGet(type, list, id) (type) _llGet(&list, id)
#define llGetRef(type, list, id) (type *) (_llGetRef(&list, id)) #define llGetRef(type, list, id) (type *) (_llGetRef(&list, id))
#define llGet(type, list, id) *(type *) (_llGetRef(&list, id))
#define llCreateNode(value) _llCreateNode((void *)(uintptr_t) value) #define llCreateNode(value) _llCreateNode((void *)(uintptr_t) value)
#ifdef LL_IMPLEMENTATION #ifdef LL_IMPLEMENTATION
@ -168,26 +186,6 @@ llList * _llDelete(llList * list, size_t id)
return list; return list;
} }
size_t _llGet(llList * list, size_t id)
{
llNode * node = list->nodes;
while (id > 0)
{
if (node->next == NULL)
{
fprintf(stderr, "ERROR: Index out of bounds\n");
llFree(list);
exit(1);
}
node = node->next;
--id;
}
return (size_t) node->data;
}
//Todo fix with floating points //Todo fix with floating points
void * _llGetRef(llList * list, size_t id) void * _llGetRef(llList * list, size_t id)
{ {