1358ae72d314bf9df7050908541f30b78a2871c8aDmitry Shmidt/*-------------------------------------------------------------------*/
2358ae72d314bf9df7050908541f30b78a2871c8aDmitry Shmidt/*                         List  Functionality                       */
3358ae72d314bf9df7050908541f30b78a2871c8aDmitry Shmidt/*-------------------------------------------------------------------*/
4358ae72d314bf9df7050908541f30b78a2871c8aDmitry Shmidt#ifndef _SHLIST_H_
5358ae72d314bf9df7050908541f30b78a2871c8aDmitry Shmidt#define _SHLIST_H_
6358ae72d314bf9df7050908541f30b78a2871c8aDmitry Shmidt
7358ae72d314bf9df7050908541f30b78a2871c8aDmitry Shmidttypedef struct SHLIST_STRUC {
8358ae72d314bf9df7050908541f30b78a2871c8aDmitry Shmidt  void *data;
9358ae72d314bf9df7050908541f30b78a2871c8aDmitry Shmidt  struct SHLIST_STRUC *next;
10358ae72d314bf9df7050908541f30b78a2871c8aDmitry Shmidt  struct SHLIST_STRUC *prev;
11358ae72d314bf9df7050908541f30b78a2871c8aDmitry Shmidt} SHLIST;
12358ae72d314bf9df7050908541f30b78a2871c8aDmitry Shmidt
13358ae72d314bf9df7050908541f30b78a2871c8aDmitry Shmidttypedef int (*shListCmp)( void *valo, void *valn, void *etalon );
14358ae72d314bf9df7050908541f30b78a2871c8aDmitry Shmidttypedef int (*shListPrint)( void *val );
15358ae72d314bf9df7050908541f30b78a2871c8aDmitry Shmidttypedef void (*shListFree)( void *val );
16358ae72d314bf9df7050908541f30b78a2871c8aDmitry Shmidttypedef int (*shListEqual)( void *val,  void *idata );
17358ae72d314bf9df7050908541f30b78a2871c8aDmitry Shmidt
18358ae72d314bf9df7050908541f30b78a2871c8aDmitry Shmidtvoid shListInitList( SHLIST *listPtr );
19358ae72d314bf9df7050908541f30b78a2871c8aDmitry ShmidtSHLIST *shListFindItem( SHLIST *head, void *val, shListEqual func );
20358ae72d314bf9df7050908541f30b78a2871c8aDmitry ShmidtSHLIST *shListGetFirstItem( SHLIST *head );
21358ae72d314bf9df7050908541f30b78a2871c8aDmitry ShmidtSHLIST *shListGetNItem( SHLIST *head, unsigned long num );
22358ae72d314bf9df7050908541f30b78a2871c8aDmitry ShmidtSHLIST *shListGetLastItem( SHLIST *head );
23358ae72d314bf9df7050908541f30b78a2871c8aDmitry ShmidtSHLIST *shListGetNextItem( SHLIST *head, SHLIST *item );
24358ae72d314bf9df7050908541f30b78a2871c8aDmitry ShmidtSHLIST *shListGetPrevItem( SHLIST *head, SHLIST *item );
25358ae72d314bf9df7050908541f30b78a2871c8aDmitry Shmidtvoid shListDelItem( SHLIST *head, SHLIST *item, shListFree func );
26358ae72d314bf9df7050908541f30b78a2871c8aDmitry Shmidtvoid shListInsFirstItem( SHLIST *head, void *val );
27358ae72d314bf9df7050908541f30b78a2871c8aDmitry Shmidtvoid shListInsBeforeItem( SHLIST *head, void *val, void *etalon,
28358ae72d314bf9df7050908541f30b78a2871c8aDmitry Shmidt                          shListCmp func );
29358ae72d314bf9df7050908541f30b78a2871c8aDmitry Shmidtvoid shListInsLastItem( SHLIST *head, void *val );
30358ae72d314bf9df7050908541f30b78a2871c8aDmitry Shmidtvoid shListDelAllItems( SHLIST *head, shListFree func );
31358ae72d314bf9df7050908541f30b78a2871c8aDmitry Shmidtvoid shListPrintAllItems( SHLIST *head, shListPrint func );
32358ae72d314bf9df7050908541f30b78a2871c8aDmitry Shmidtunsigned long shListGetCount( SHLIST *head );
33358ae72d314bf9df7050908541f30b78a2871c8aDmitry Shmidt
34358ae72d314bf9df7050908541f30b78a2871c8aDmitry Shmidt#endif
35