nakedmudv3.3/
nakedmudv3.3/lib/
nakedmudv3.3/lib/logs/
nakedmudv3.3/lib/misc/
nakedmudv3.3/lib/players/
nakedmudv3.3/lib/txt/
nakedmudv3.3/lib/world/
nakedmudv3.3/lib/world/examples/
nakedmudv3.3/lib/world/examples/mproto/
nakedmudv3.3/lib/world/examples/oproto/
nakedmudv3.3/lib/world/examples/reset/
nakedmudv3.3/lib/world/examples/rproto/
nakedmudv3.3/lib/world/examples/trigger/
nakedmudv3.3/lib/world/limbo/
nakedmudv3.3/lib/world/limbo/room/
nakedmudv3.3/lib/world/limbo/rproto/
nakedmudv3.3/src/alias/
nakedmudv3.3/src/char_vars/
nakedmudv3.3/src/editor/
nakedmudv3.3/src/example_module/
nakedmudv3.3/src/help/
nakedmudv3.3/src/set_val/
nakedmudv3.3/src/socials/
nakedmudv3.3/src/time/
#ifndef SET_H
#define SET_H
//*****************************************************************************
//
// set.h
//
// a non-ordered container that has constant lookup time.
//
//*****************************************************************************

typedef struct set_data                   SET;
typedef struct set_iterator               SET_ITERATOR;

SET  *newSet         (void);
void  deleteSet      (SET *set);
void  setPut         (SET *set, void *elem);
void  setRemove      (SET *set, void *elem);
int   setIn          (SET *set, const void *elem);
int   setSize        (SET *set);
LIST *setCollect     (SET *set);
SET  *setCopy        (SET *set);
SET  *setUnion       (SET *set1, SET *set2);
SET  *setIntersection(SET *set1, SET *set2);
void setChangeHashing(SET *set, void *cmp_func, void *hash_func);



//*****************************************************************************
//
// set iterator
//
// we may sometimes want to iterate across all of the elements in a set.
// this lets us do so.
//
//*****************************************************************************

// iterate across all the elements in a set
#define ITERATE_SET(elem, it) \
  for(elem = setIteratorCurrent(it); \
      elem != NULL; \
      setIteratorNext(it), elem = setIteratorCurrent(it))


SET_ITERATOR *newSetIterator    (SET *S);
void          deleteSetIterator (SET_ITERATOR *I);
void          setIteratorReset  (SET_ITERATOR *I);
void         *setIteratorNext   (SET_ITERATOR *I);
void         *setIteratorCurrent(SET_ITERATOR *I);

#endif // SET_H