|
Packit |
78deda |
/*
|
|
Packit |
78deda |
* list.h
|
|
Packit |
78deda |
*
|
|
Packit |
78deda |
* Written by: Ullrich Hafner
|
|
Packit |
78deda |
*
|
|
Packit |
78deda |
* This file is part of FIASCO (Fractal Image And Sequence COdec)
|
|
Packit |
78deda |
* Copyright (C) 1994-2000 Ullrich Hafner
|
|
Packit |
78deda |
*/
|
|
Packit |
78deda |
|
|
Packit |
78deda |
/*
|
|
Packit |
78deda |
* $Date: 2000/06/14 20:49:37 $
|
|
Packit |
78deda |
* $Author: hafner $
|
|
Packit |
78deda |
* $Revision: 5.1 $
|
|
Packit |
78deda |
* $State: Exp $
|
|
Packit |
78deda |
*/
|
|
Packit |
78deda |
|
|
Packit |
78deda |
#ifndef _LIST_H
|
|
Packit |
78deda |
#define _LIST_H
|
|
Packit |
78deda |
|
|
Packit |
78deda |
#include <stdio.h>
|
|
Packit |
78deda |
#include <stddef.h>
|
|
Packit |
78deda |
|
|
Packit |
78deda |
typedef struct node
|
|
Packit |
78deda |
{
|
|
Packit |
78deda |
struct node *prev; /* pointer to prev list element */
|
|
Packit |
78deda |
struct node *next; /* pointer to next list element */
|
|
Packit |
78deda |
void *value; /* pointer to value of node */
|
|
Packit |
78deda |
} node_t;
|
|
Packit |
78deda |
|
|
Packit |
78deda |
typedef struct list
|
|
Packit |
78deda |
{
|
|
Packit |
78deda |
node_t *head;
|
|
Packit |
78deda |
node_t *tail;
|
|
Packit |
78deda |
size_t size_of_element; /* number of bytes to store value */
|
|
Packit |
78deda |
} list_t;
|
|
Packit |
78deda |
|
|
Packit |
78deda |
typedef enum {TAIL, HEAD} pos_e;
|
|
Packit |
78deda |
|
|
Packit |
78deda |
/*
|
|
Packit |
78deda |
* Alias definitions for queue and stack
|
|
Packit |
78deda |
*/
|
|
Packit |
78deda |
|
|
Packit |
78deda |
typedef list_t lqueue_t ;
|
|
Packit |
78deda |
#define alloc_queue alloc_list
|
|
Packit |
78deda |
#define free_queue free_list
|
|
Packit |
78deda |
#define queue_append(q, d) (list_insert ((q), TAIL, (d)))
|
|
Packit |
78deda |
#define queue_remove(q, d) (list_remove ((q), HEAD, (d)))
|
|
Packit |
78deda |
|
|
Packit |
78deda |
typedef list_t lstack_t ;
|
|
Packit |
78deda |
#define alloc_stack alloc_list
|
|
Packit |
78deda |
#define free_stack free_list
|
|
Packit |
78deda |
#define stack_push(q, d) (list_insert ((q), TAIL, (d)))
|
|
Packit |
78deda |
#define stack_pop(q, d) (list_remove ((q), TAIL, (d)))
|
|
Packit |
78deda |
|
|
Packit |
78deda |
list_t *
|
|
Packit |
78deda |
alloc_list (size_t size_of_element);
|
|
Packit |
78deda |
void
|
|
Packit |
78deda |
free_list (list_t *list);
|
|
Packit |
78deda |
bool_t
|
|
Packit |
78deda |
list_element_n (const list_t *list, pos_e pos, unsigned n, void *data);
|
|
Packit |
78deda |
void
|
|
Packit |
78deda |
list_foreach (const list_t *list, void (*function)(void *, void *),
|
|
Packit |
78deda |
void *data);
|
|
Packit |
78deda |
void
|
|
Packit |
78deda |
list_insert (list_t *list, pos_e pos, const void *data);
|
|
Packit |
78deda |
bool_t
|
|
Packit |
78deda |
list_remove (list_t *list, pos_e pos, void *data);
|
|
Packit |
78deda |
unsigned
|
|
Packit |
78deda |
list_sizeof (const list_t *list);
|
|
Packit |
78deda |
|
|
Packit |
78deda |
#endif /* not _LIST_H */
|
|
Packit |
78deda |
|