You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

115 lines
4.6 KiB
C

1 year ago
/************************************************************************/
/* SISCO SOFTWARE MODULE HEADER *****************************************/
/************************************************************************/
/* (c) Copyright Systems Integration Specialists Company, Inc., */
/* 1988-2000, All Rights Reserved */
/* */
/* MODULE NAME : gen_list.h */
/* PRODUCT(S) : General Use */
/* */
/* MODULE DESCRIPTION : */
/* This module contains the definitions as required for */
/* manipulation of double-linked circular lists */
/* */
/* MODIFICATION LOG : */
/* Date Who Rev Comments */
/* -------- --- ------ ------------------------------------------- */
/* 04/20/00 JRB 03 Del (ST_VOID **) protos. ANSI doesn't like. */
/* 10/09/98 JRB 02 Add list_find_prev, list_find_last. */
/* 08/25/98 EJV 01 Use non-relaxed protos for __hpux. */
/* 04/02/97 DTL 7.00 MMSEASE 7.0 release. See MODL70.DOC for */
/* history. */
/************************************************************************/
#ifndef GEN_LIST_INCLUDED
#define GEN_LIST_INCLUDED
#ifdef __cplusplus
extern "C" {
#endif
/*#define FASTLIST */
/************************************************************************/
/* LINKED LIST MECHANISM */
/************************************************************************/
/* This following structure is used in all doubly linked circular lists */
/* as the first component in the structure. This allows one set of list*/
/* manipulation primitives to be used with any linked structure */
/* containing it. */
typedef struct dbl_lnk
{
struct dbl_lnk *next;
struct dbl_lnk *prev;
} DBL_LNK;
/************************************************************************/
/* The variable below can be used to do integrity checking of any list */
/* manipulated in the generic queuing functions by setting it to SD_TRUE */
extern ST_BOOLEAN list_debug_sel;
/* For compatibility with older code only */
#define list_sLogCtrl sLogCtrl
/************************************************************************/
#ifdef FASTLIST
#define list_get_next(h,p) (((DBL_LNK *)p)->next == (DBL_LNK *)h ? NULL : ((DBL_LNK *)p)->next)
#define list_get_first(h) *(h);list_unlink (h,*h)
#else
/* NOTE: I_AM_THE_TRUE_GEN_LIST is only defined in the module */
/* genlists.c so it will compile. */
#if defined(I_AM_THE_TRUE_GEN_LIST)
ST_VOID *list_get_first (DBL_LNK **);
ST_VOID *list_get_next (DBL_LNK *, DBL_LNK *);
#else
ST_VOID *list_get_first (ST_VOID *);
ST_VOID *list_get_next (ST_VOID *, ST_VOID *);
#endif
#endif /* FASTLIST */
/************************************************************************/
/* Primitive functions for generic queue handling */
#if defined(I_AM_THE_TRUE_GEN_LIST)
ST_RET list_unlink (DBL_LNK **, DBL_LNK *);
ST_RET list_add_first (DBL_LNK **, DBL_LNK *);
ST_RET list_add_last (DBL_LNK **, DBL_LNK *);
ST_RET list_move_to_first (DBL_LNK **, DBL_LNK **, DBL_LNK *);
ST_RET list_find_node (DBL_LNK *, DBL_LNK *);
ST_RET list_add_node_after (DBL_LNK *, DBL_LNK *);
ST_INT list_get_sizeof (DBL_LNK *);
ST_VOID *list_get_last (DBL_LNK **);
#else
/* NOTE: these prototypes provide very little argument type checking. */
/* They allow you to pass almost any argument without casting. */
/* ANSI compilers automatically cast the arguments to (ST_VOID *). */
/* This is not a great loss, because if the "real" prototypes were */
/* used, most code would have to cast arguments to (DBL_LNK *) or */
/* (DBL_LNK **), which would disable the argument type checking anyway. */
ST_RET list_unlink (ST_VOID *pphol, ST_VOID *pnode);
ST_RET list_add_first (ST_VOID *pphol, ST_VOID *pnode);
ST_RET list_add_last (ST_VOID *pphol, ST_VOID *pnode);
ST_RET list_move_to_first (ST_VOID *pphol1, ST_VOID *pphol2, ST_VOID *pnode);
ST_RET list_find_node (ST_VOID *pphol, ST_VOID *pnode);
ST_RET list_add_node_after (ST_VOID *pnode1, ST_VOID *pnode2);
ST_INT list_get_sizeof (ST_VOID *phol);
ST_VOID *list_get_last (ST_VOID *pphol);
#endif
/* New functions. Abandon the "I_AM_THE_TRUE_GEN_LIST" casting business.*/
DBL_LNK *list_find_prev (DBL_LNK *list_head_ptr, DBL_LNK *cur_node);
DBL_LNK *list_find_last (DBL_LNK *list_head_ptr);
#ifdef __cplusplus
}
#endif
#endif