#ifndef H_ED_GLL_20050826132958
#define H_ED_GLL_20050826132958

#ifdef __cplusplus
extern "C"
{
#endif

/* ---------------------------------------------------------------------
   (c) ED 2005-2007
   Project      : CLIB
   Function     : Generic Linked list (interface)
   Module       : GLL
   File         : gll.h
   Created      : 26-08-2005
   Modified     : 15-04-2007
   --------------------------------------------------------------------- */

/* ---------------------------------------------------------------------
   Log

   1.2 15-04-2007 cancellation of the constanteness for data
   1.1 27-10-2005 Enhanced instrumentation
   1.0 28-08-2005 Intial version
   0.0 26-08-2005 Created

   --------------------------------------------------------------------- */

/* macros ============================================================== */

/* constants =========================================================== */

   typedef enum
   {
      GLL_OK,

#define ITEM(n_, s_)\
   GLL_ERR_##n_,

#include "ed/inc/gll_err.itm"

#undef ITEM

      GLL_ERR_NB
   }
   gll_err_e;

/* types =============================================================== */

#if 0
   typedef int gll_out_f (void *p_usr, void const * p_data);
#endif


/* structures ========================================================== */

   typedef struct gll gll_s;

/* functions =========================================================== */

/* Identification */
   char const *gll_sid (void);
   char const *gll_sver (void);
   char const *gll_serr (gll_err_e err);

/* Dynamic constructor / destructor */
   gll_s *gll_create (void);
   void gll_delete (gll_s * self);


#if 0
/* Initialisation */
   gll_err_e gll_init (gll_s * self);
   gll_err_e gll_install_out (gll_s * self, gll_out_f * pf, void *p_data);
#endif

/* status */
   int gll_is_empty (gll_s * self, gll_err_e * p_err);

/* data */
   gll_err_e gll_goto_head (gll_s * self);
   gll_err_e gll_goto_tail (gll_s * self);
   gll_err_e gll_next (gll_s * self);
   gll_err_e gll_prev (gll_s * self);
   gll_err_e gll_insert_left (gll_s * self, void * p_data);
   gll_err_e gll_insert_right (gll_s * self, void * p_data);
   void *gll_remove (gll_s * self, gll_err_e * p_err);
   void *gll_read_data (gll_s * self, gll_err_e * p_err);
   gll_err_e gll_clear (gll_s * self);

#ifdef __cplusplus
}
#endif

/* ---------------------------------------------------------------------
   Generated by NEW (c) ED 2.8
   Powered by C-code generator library  1.2
   --------------------------------------------------------------------- */

#endif                          /* guard */
