/* $Id: linked_list.h,v 1.2 2001/02/06 03:33:42 darkwing Exp $ */

/* Copyright 1990, 1991, 1999 by the Massachusetts Institute of
 * Technology.
 *
 * Permission to use, copy, modify, and distribute this
 * software and its documentation for any purpose and without
 * fee is hereby granted, provided that the above copyright
 * notice appear in all copies and that both that copyright
 * notice and this permission notice appear in supporting
 * documentation, and that the name of M.I.T. not be used in
 * advertising or publicity pertaining to distribution of the
 * software without specific, written prior permission.
 * M.I.T. makes no representations about the suitability of
 * this software for any purpose.  It is provided "as is"
 * without express or implied warranty.
 */

#ifndef AKLOG__LINKED_LIST_H
#define AKLOG__LINKED_LIST_H

#define LL_SUCCESS 0
#define LL_FAILURE -1

typedef struct _ll_node {
    struct _ll_node *prev;
    struct _ll_node *next;
    void *data;
} ll_node;

typedef struct {
    ll_node *first;
    ll_node *last;
    int nelements;
} linked_list;

typedef enum {ll_head, ll_tail} ll_end;


/* ll_add_data just assigns the data field of node to be d. */
#define ll_add_data(n,d) (((n)->data)=(d))

void ll_init(linked_list *list);
ll_node *ll_add_node(linked_list *list, ll_end which_end);
int ll_delete_node(linked_list *list, ll_node *node);
int ll_string_check(linked_list *, char *);
int ll_add_string(linked_list *, char *);

#endif /* AKLOG__LINKED_LIST_H */
