genlist.h

来自「在ARM7和UC/OSII的平台上实现了GPS自动报站的功能,涉及GPS模块LE」· C头文件 代码 · 共 141 行

H
141
字号
/*
 * FILENAME: GENLIST.H
 *
 * Copyright 1999-2002 By InterNiche Technologies Inc. All rights reserved
 *
 * MODULE: MISCLIB
 *
 * ROUTINES:
 *
 * PORTABLE: yes
 */

/* Additional Copyrights: */

/* 
 * GENERIC Implementation of a list. 
 *
 * 1999      - Implemented for use with SNMPv3 tables -AT-
 * 2/21/2002 - Added niche_add_sorted() and moved from snmpv3 to h -AT-
 */


#ifndef GENLIST_H    /* Make sure the header file is included only once */
#define  GENLIST_H            1

#include "ipport.h"

/* Generic list is used by SNMPv3 code and IPFILTER code. */
#if (defined(INCLUDE_SNMPV3) || defined(USE_IPFILTER))
#define USE_GENLIST
#endif

/* #define MAX_NAME_LEN   50 ** defined in SNMPPORT.h as 64 */
#define  GEN_MAX_ARRAY  10

#ifndef GEN_ALLOC
#define GEN_ALLOC(size)    calloc(1,size)
#endif
#ifndef GEN_FREE
#define GEN_FREE(ptr)      free(ptr)    
#endif

#ifndef MEMCMP
#define MEMCMP   memcmp
#endif
#ifndef MEMCPY
#define MEMCPY   memcpy
#endif

#ifndef SUCCESS
#define SUCCESS  0
#endif
#ifndef FAILURE
#define FAILURE  1
#endif


#ifndef MAX_NAME_LEN      /* usually defined in snmpport.h */
#define MAX_NAME_LEN  64  /* max number of subid's in a objid */
#endif

/* NicheElement had two members. One is a pointer to the DATA and the 
 * other is a pointer to the next element. If there is no next 
 * element, the pointer is NULL. GEN_STRUCT can be anything. 
 * Following are some thoughts on the way things are declared and 
 * intended. 1. If there is only one list, GEN_STRUCT can be 
 * explicitly named to the STRUCT/CLASS 2. If there are multiple 
 * lists, then GEN_STRUCT can be "void*" and casting can be done 
 * whenever we are using it 3. If we need a CLASS implementation, all 
 * the functions can be made as interfaces of the CLASS. So we just 
 * need a class wrapper. Further, it is assumed that GEN_STRUCT has 
 * two members defined as follows "long id;" and "char 
 * name[MAX_NAME_LEN];" The list can be a singly indexed list ( that 
 * is all elements can be uniquely identified by their IDs ). Or it 
 * can be doubly indexed list (all elements can be uniquely 
 * identified by their ID and name combined). Lookup and deletion 
 * from the list has been provided for this use. 
 */
struct TemplateStruct
{
   long     id;
   char     name[MAX_NAME_LEN];
};

typedef struct TemplateStruct * GEN_STRUCT ;

struct NicheElement
{
   GEN_STRUCT  p_data;           /* Pointer to element/data */       
   struct     NicheElement *  next; /* Pointer to next data element */
};

typedef struct NicheElement * NICHE_ELE;


struct NicheList
{
   NICHE_ELE   head  ;     /* First element of the list */
   int         len_of_element;/* Len   of the   struct representing  element/data*/
};

typedef struct NicheList * NICHELIST;


int         niche_list_constructor  (NICHELIST  list, int len_of_ele);
int         niche_list_destructor   (NICHELIST  list);
int         niche_add               (NICHELIST  list, GEN_STRUCT ptr_data);
int         niche_add_sorted        (NICHELIST  list, GEN_STRUCT ptr_data);
int         niche_add_id_and_name   (NICHELIST  list, long id, char * name);
int         niche_del               (NICHELIST  list, GEN_STRUCT ptr_data);
int         niche_del_id            (NICHELIST  list, long id);
int         niche_del_name          (NICHELIST  list, char * name);
int         niche_del_id_and_name   (NICHELIST  list, long id, char * name);
GEN_STRUCT  niche_lookup_id         (NICHELIST  list,long id);
GEN_STRUCT  niche_lookup_name       (NICHELIST  list,char *name);
GEN_STRUCT  niche_lookup_id_and_name(NICHELIST  list,long id,char *name);
int         niche_lookup_multi_match(NICHELIST  list, long id, char * name, 
   GEN_STRUCT matches[]);
int         niche_list_show         (NICHELIST  list);
int         niche_list_len          (NICHELIST  list); 
GEN_STRUCT  niche_list_getat        (NICHELIST  list,int index); 

int         niche_element_show      (GEN_STRUCT ptr_data);



#define  NICHE_ERRBASE                    2000

#define  NICHE_NO_MEM                     (NICHE_ERRBASE+1)
#define  NICHE_NO_MEM_FOR_DATA            (NICHE_ERRBASE+2)
#define  NICHE_ADD_NOT_ENOUGH_MEMORY      (NICHE_ERRBASE+3)
#define  NICHE_DEL_LIST_EMPTY             (NICHE_ERRBASE+4)
#define  NICHE_DEL_NOT_FOUND              (NICHE_ERRBASE+5)
#define  NICHE_DEL_NOT_ENOUGH_MEMORY      (NICHE_ERRBASE+6)
#define  NICHE_LISTPTR_INVALID            (NICHE_ERRBASE+7)
#define  NICHE_DUP_ENTRY                  (NICHE_ERRBASE+8)


#endif   /*  GENLIST_H */

⌨️ 快捷键说明

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