/*Generic Linked List Definitions. */

#ifndef drwllh_H
 #define drwllh_H

#include "DRW/drwGPdef.h"

#if defined NAMESPACE_DRWIMPC
  namespace DrWimpC {
#endif

#if defined NAMESPACE_OSLIB
  using namespace OSLib;
#endif

#define DRW_SET_STOP_AFTER_FIND 0x80
#define DRW_CLEAR_STOP_AFTER_FIND  0x100


typedef struct drw_ll_hdr          drw_ll_hdr;
typedef struct drw_node1           drw_node1;
typedef struct drw_node2           drw_node2;
typedef struct drw_ll_item_ptrs    drw_ll_item_ptrs;


struct drw_ll_item_ptrs {

drwGP Pfitem;
drwGP Plitem;
drwGP Pcitem;
int curritemno;

};


struct drw_ll_hdr {

drwGP hval;
int listorder;
drw_ll_item_ptrs iptrs;
size_t itemcount;

};


struct drw_node1 {

drwGP val;
drwGP Pnitem;

};


struct drw_node2 {

drwGP val;
drwGP Pnitem;
drwGP Ppitem;

};

typedef drwGP (*drw_ll_walk_fn)(drwGP Phdr, drwGP Pptrin);
typedef int (*drw_ll_find_fn)(void *listval, void *findval);
typedef void (*drw_ll_walk_user_fn)(void *userfndata, void *userval);


#define llorder1    1
#define llorder2    2

#define llfirst     1
#define llnext      2
#define llprior     3
#define lllast      4

#define ll_is_hdr   1
#define ll_is_item  2

#if defined NAMESPACE_DRWIMPC
  }
#endif

#ifndef drwalloc_H
 #include "DRW/drwalloch.h"
#endif

#endif


/* End of Generic Linked List Definitions. */


