#ifndef	ISET_H
#define	ISET_H

#include <v_lib.h>
#include "config.h"

#define	ISET_FLAG_TYPE	u8_t
#define	ISET_LIST_TYPE	u32_t

typedef struct iset_s
{
	ISET_LIST_TYPE	num_elems;
	ISET_LIST_TYPE	max_elems;
	ISET_FLAG_TYPE	*in;
	ISET_LIST_TYPE	*list; /* delayed update */
} iset_t, *iset_p;


iset_p isetAlloc(ISET_LIST_TYPE max_elems);
iset_p *isetsAlloc(ISET_LIST_TYPE num_isets,ISET_LIST_TYPE max_elems);
void isetFree(iset_p set);
void isetsFree(iset_p *sets,ISET_LIST_TYPE num_isets);
void isetClear(iset_p set);
void isetsClear(iset_p *sets,ISET_LIST_TYPE num_isets);

void isetAdd(iset_p set,ISET_LIST_TYPE elem_n);
void isetDel(iset_p set,ISET_LIST_TYPE elem);
vboolean isetGetNext(iset_p set,ISET_LIST_TYPE *ret_val);
void isetUpdateList(iset_p set);
void isetPrintList(iset_p set);


#endif	/* ISET_H */
