#ifndef _LIST_H_ #define _LIST_H_ #include "global.h" /* * Class List * * This is a generic linked list class. * */ #define HASH_SIZE 64 #define HASH(x) ((x>>2)&63) typedef struct _l_elem { void *data; struct _l_elem *next; struct _l_elem *prev; } l_elem; typedef struct _h_elem { void *data; l_elem *elem; struct _h_elem *next; } h_elem; class List { public: List(); ~List(); void InsertBefore(void *new_elem, void *where); void InsertAfter(void *new_elem, void *where); void Append(void *new_elem); void Delete(void *elem); void *CircularNext(void *elem); void *Next(void *elem); void *CircularPrev(void *elem); void *Prev(void *elem); void *Number(int num); void *First(); void *Last(); int GetNum(void *elem); int Size() {return size;} private: l_elem *find(void *elem); void hash_insert(l_elem *elem, void *data); void List::hash_delete(void *data); l_elem *list; l_elem *last; h_elem **hash; int size; }; #endif /* _LIST_H_ */