⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gen_list.h

📁 XML文件解析器
💻 H
字号:
/************************************************************************/
/* 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

#include "glbtypes.h"

#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

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -