/*--------------------------------------------------------------------------
                     C I R C U L A R

  This is the implementation of a general purpose circular buffer facility.
  
  Mark Koennecke, October 1999
  --------------------------------------------------------------------------*/
#ifndef CIRCULAR
#define CIRCULAR

  typedef struct __CIRCULAR *pCircular;
  typedef void (*CirKillFunc)(void *pData);

/* ----------------- birth and death -----------------------------------*/
  pCircular createCircular(int iSize,CirKillFunc kf);
  /*
    iSize is the size of the circular Buffer.
    KillFunc is a function which can safely delete the data item held
    as content of the circular buffer.
  */
  void deleteCircular(pCircular self);

/*-------------- access and modify data item at current position ----------*/
  void setCircular(pCircular self, void *pData);
  void *getCircular(pCircular self);

/*---------------- pointer movement --------------------------------------*/
  void nextCircular(pCircular self);
  void previousCircular(pCircular self);

#endif
