#ifndef _LL_H
#define _LL_H
#define TLL(list,e) e = list->head->next; e; e = e->next
struct _lle {
char *key;
void *data;
struct _lle *next;
};
typedef struct _lle * LLE;
struct _ll {
LLE head;
LLE curr;
void (*free_e)(void *);
int items;
};
typedef struct _ll * LL;
LL CreateLL();
void SetFreeLLE(LL List, void (*free_e)(void *));
LLE CreateLLE (char *key, void *data, LLE next);
int AddToLL(LL List, char *key, void *data);
LLE FindInLL(LL List, char *key);
void *GetDataFromLLE(LLE e);
int RemoveFromLL(LL List, LLE e);
int RemoveFromLLByKey(LL List, char *key);
LLE GetNextLLE(LL List);
void ResetLLPosition(LL List);
void FreeLLE(LLE e, void (*free_e)(void *));
void FreeLL(LL List);
#endif