87 lines
2.3 KiB
C
87 lines
2.3 KiB
C
#include <stdlib.h>
|
|
#include <stdio.h>
|
|
#include <stddef.h>
|
|
#include <stdint.h>
|
|
#include <stdbool.h>
|
|
#include <time.h>
|
|
|
|
#include "nickel/linkedlist.h"
|
|
|
|
// helper function to format bytes out.
|
|
char* get_bytes_f(long bytes, char* str) {
|
|
if(str != NULL) {
|
|
if (bytes > 0)
|
|
{
|
|
if (bytes < 1024) {
|
|
sprintf(str, "%ld bytes", bytes);
|
|
}
|
|
if ((bytes >= 1024) & (bytes < 1024*1024)) {
|
|
sprintf(str, "%.3f Kbytes", ((double)bytes/(double)1024.00));
|
|
}
|
|
if (bytes >= 1024*1024) {
|
|
sprintf(str, "%.3f Mbytes",(double)bytes/(double)(1024*1024));
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
return NULL;
|
|
}
|
|
return str;
|
|
}
|
|
|
|
typedef struct test_data {
|
|
uint64_t data1;
|
|
uint64_t data2;
|
|
uint64_t data3;
|
|
uint64_t data4;
|
|
|
|
ni_list_node link;
|
|
} test_data;
|
|
|
|
int main (void)
|
|
{
|
|
time_t time_now;
|
|
srand(time(&time_now));
|
|
|
|
ni_list data_instances;
|
|
ni_list__init(&data_instances);
|
|
|
|
printf("list is allocated at %p\n", (void*)&data_instances);
|
|
size_t test_size = 10;
|
|
for(size_t i = 0; i < test_size; i++) {
|
|
test_data* t = malloc(sizeof(test_data));
|
|
printf("n = %d allocated data at %p...test_data.link at %p...\n", i, &t, &t->link);
|
|
|
|
t->data1 = rand() % UINT64_MAX;
|
|
t->data2 = rand() % UINT64_MAX;
|
|
t->data3 = rand() % UINT64_MAX;
|
|
t->data4 = rand() % UINT64_MAX;
|
|
|
|
ni_list__push_back(&data_instances, &(t->link));
|
|
|
|
printf("write: n = %d: %ld %ld %ld %ld \n\tnext: %p\n\tprev: %p\n",
|
|
i, t->data1, t->data2, t->data3, t->data4, t->link.next, t->link.prev);
|
|
}
|
|
|
|
printf("Inserted %d count entries into test list...\n", data_instances.count);
|
|
|
|
{ // scope for access to iter and list
|
|
size_t i = 0;
|
|
NI_LIST__FOREACH(&data_instances) {
|
|
test_data* t = NI_LIST_CONTAINER_OF(it, test_data, link);
|
|
printf("read: %d: %ld %ld %ld %ld \n\tnext: %p\n\tprev: %p\n",
|
|
i, t->data1, t->data2, t->data3, t->data4, (void*)it->next, (void*)it->prev);
|
|
i++;
|
|
}
|
|
}
|
|
|
|
while (!ni_list__is_empty(&data_instances)) {
|
|
ni_list_node* tail = ni_list__get_back(&data_instances);
|
|
ni_list__remove(&data_instances, tail);
|
|
|
|
test_data* t = NI_LIST_CONTAINER_OF(tail, test_data, link);
|
|
free(t);
|
|
}
|
|
|
|
/* all done! */
|
|
} |