Varray.h
上传用户:blenddy
上传日期:2007-01-07
资源大小:6495k
文件大小:1k
源码类别:

数据库系统

开发平台:

Unix_Linux

  1. /* ********************************************************************
  2.  *
  3.  * Varray.h -- header file for varray.c which provides a generic
  4.  *    set of functions to handle variable sized arrays.
  5.  *
  6.  *    originally by Jiang Wu
  7.  * ********************************************************************/
  8. #ifndef _VARRAY_H_
  9. #define _VARRAY_H_
  10. typedef struct _varray
  11. {
  12. size_t nobj; /* number of objects in this array */
  13. size_t maxObj; /* max. number of objects in this array */
  14. size_t size; /* size of each element in the array */
  15. void    *val; /* array of elements */
  16. } Varray;
  17. /* type for custom copying function */
  18. typedef void (*CopyingFunct) (void *from, void *to);
  19. #define VARRAY_INITIAL_SIZE 32
  20. #define ENLARGE_VARRAY(ARRAY, INC) 
  21.   (ARRAY)->maxObj += (INC), 
  22.   (ARRAY)->val = (void *) realloc((ARRAY)->val, 
  23.   (ARRAY)->size * (ARRAY)->maxObj) 
  24. )
  25. #define VARRAY_NTH(VAL, SIZE, N) (((char *) (VAL)) + (SIZE) * (N))
  26. #define FreeVarray(ARRAY) 
  27.   if ((ARRAY) != NULL) { free((ARRAY)->val); free((ARRAY)); (ARRAY) = NULL ; }
  28. #define ModifyVarray(ARRAY, N, NEW, COPY) 
  29.   if ((N) < (ARRAY)->nobj) 
  30. (COPY)(VARRAY_NTH((ARRAY)->val, (ARRAY)->size, (N)), (NEW))
  31. #define GetVarray(ARRAY, N) 
  32.   ((N) < (ARRAY)->nobj ? VARRAY_NTH((ARRAY)->val, (ARRAY)->size, (N)) 
  33.    : NULL)
  34. extern Varray *NewVarray(size_t nobj, size_t size);
  35. extern int AppendVarray(Varray * array, void *value, CopyingFunct copy);
  36. #endif  /* _VARRAY_H_ */