#ifndef MY_LIST_LIBRARY 
#define MY_LIST_LIBRARY

/* Määritellään listatyypit */

typedef struct listitem
{
    struct listitem *Next; /* Seuraava alkio listassa  */
    struct listitem *Prev; /* Edellinen alkio listassa */
    void *Data;            /* Tietoalkio               */
    unsigned long Size;    /* Tietoalkion koko         */
} ListItem;

typedef struct
{
    ListItem *Head;        /* Listan alku              */
    ListItem *Tail;        /* Listan loppu             */
    unsigned long Items;   /* Listan alkioiden lkm     */
} List;

/* Listakirjaston tukemat funktiot */

/* Luo uusi lista */
extern List *CreateList(void);

/* Luo lista-alkio */
extern ListItem *CreateItem(void *Data,unsigned long Size);

/* Lisää listan loppuun */
extern int AddTail(List *,ListItem *);

/* Lisää listan alkuun */
extern int AddHead(List *,ListItem *);

/* Laske listan pituus */
extern unsigned long ListLength(List *);

/* Tuhoa lista */
extern void DeleteList(List *);

/* Tulosta listan sisältö */
extern void PrintList(List *);

/* Tarkista onko lista tyhjä */

extern int EmptyList(List *);

#endif

