[ create a new paste ] login | about

Link: http://codepad.org/3d0mzVeQ    [ raw code | fork ]

C, pasted on Aug 24:
#include "generic_sllist.h"

void init_sllist(sllist * list, int type_size)
{
    list->first = NULL;
    list->last = NULL;
    list->type_size = type_size;
}

void push_back(sllist * list, void * val)
{
    if(list->first == NULL)
    {
        list->first = malloc(sizeof(struct sllist_node_t));
        list->first->value = malloc(list->type_size);
        memcpy(list->first->value, val, list->type_size);
        list->first->next = NULL;

        list->last = list->first;
    }
    else
    {
        list->last->next = malloc(sizeof(struct sllist_node_t));

        list->last = list->last->next;
        list->last->next = NULL;
        list->last->value = malloc(list->type_size);
        memcpy(list->last->value, val, list->type_size);
    }
}

void free_list(sllist * list)
{
    pnode iter = list->first;
    pnode prev = iter;
    while(iter->next != NULL)
    {
        iter = iter->next;
        free(prev->value);
        free(prev);
        prev = iter;
    }

    free(iter->value);
    free(iter);
}

int iterate(sllist * list, pnode * iter, void * value)
{
    if((*iter) == NULL)
        return false;

    memcpy(value, (*iter)->value, list->type_size);

    (*iter) = (*iter)->next;
    return true;
}


Create a new paste based on this one


Comments: