Added floating point number support
This commit is contained in:
parent
a83400bfdf
commit
43a96d3865
21
example.c
21
example.c
|
@ -3,13 +3,6 @@
|
|||
#define LL_IMPLEMENTATION
|
||||
#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)
|
||||
{
|
||||
llList list = llCreateList();
|
||||
|
@ -26,9 +19,21 @@ int main(void)
|
|||
float * y = llGetRef(float, list, 1);
|
||||
printf("*y: %f\n", *y);
|
||||
|
||||
llInsert(list, 3, 42.0f);
|
||||
|
||||
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();
|
||||
|
||||
|
|
48
ll.h
48
ll.h
|
@ -24,16 +24,34 @@ void _llAppend(llList * list, void * value);
|
|||
llList * _llPrepend(llList * list, void * value);
|
||||
llList * _llInsert(llList * list, size_t id, void * value);
|
||||
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);
|
||||
size_t llLen(llList list);
|
||||
|
||||
#define llAppend(list, value) _llAppend(&list, (void *)(uintptr_t) value)
|
||||
#define llPrepend(list, value) list = *_llPrepend(&list, (void *)(uintptr_t) value)
|
||||
#define llInsert(list, id, value) list = *_llInsert(&list, id, (void *)(uintptr_t) value)
|
||||
#define llAppend(list, value) \
|
||||
do { \
|
||||
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 llGet(type, list, id) (type) _llGet(&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)
|
||||
|
||||
#ifdef LL_IMPLEMENTATION
|
||||
|
@ -168,26 +186,6 @@ llList * _llDelete(llList * list, size_t id)
|
|||
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
|
||||
void * _llGetRef(llList * list, size_t id)
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue