home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / extra18 / ctricks / dynarray / array.h < prev    next >
Encoding:
C/C++ Source or Header  |  1992-01-29  |  2.0 KB  |  61 lines

  1. /* ------------------------------------------------- */
  2. /*                      ARRAY.H                      */
  3. /*             Verwaltung dynamischer Arrays         */
  4. /*          (c) 1992 Thomas Lach & DMV-Verlag        */
  5. /* ------------------------------------------------- */
  6.  
  7. #ifndef _ARRAY_H
  8. #define _ARRAY_H
  9.  
  10. #include <alloc.h>
  11.  
  12. #define ARR_NOERR    0
  13. #define ARR_MEMERR  -100     /* out of mem on malloc */
  14. #define ARR_LIMERR  -101     /* array size > 64k     */
  15. #define ARR_MAXERR  -102     /* tried to locate
  16.                                 element > ArrCount   */
  17.  
  18. typedef struct {
  19.  
  20.   unsigned  ArrSize,        /* current alloced amount
  21.                                of elements           */
  22.             ArrCount;       /* current amount of
  23.                                elements in array     */
  24.  
  25.   size_t    ItemSize,        /* size of one item in
  26.                                 array                */
  27.             AllocSize;       /* current alloced
  28.                                 bytes                */
  29.  
  30.   char      *Arr,            /* ptr to array         */
  31.             *Tmp;            /* temp ptr             */
  32.  
  33.   int       ErrCode;         /* error code           */
  34.  
  35. } _Array;
  36.  
  37. #define NULLARRAY  ((_Array *)0)
  38.  
  39. #define ArrayGetwoErr(arr, x)                \
  40.   ((x >= ArrayElemNum(arr) ?                 \
  41.     (char*)0 :                               \
  42.     (char*)&(arr->Arr[((x+1)*arr->ItemSize)  \
  43.              -arr->ItemSize])))
  44.  
  45. #define ArrayElemNum(arr)      (arr->ArrCount)
  46. #define ArrayChgAlloc(arr,siz)               \
  47.   (arr->AllocSize = ((siz>0) ? siz : MinArr)))
  48. #define ArrayErr(arr)          (arr->ErrCode)
  49. #define ArrayData(arr)         ((char *)(arr->Arr))
  50.  
  51. _Array * ArrayStart(size_t size);
  52. _Array * ArrayAdd(_Array *arr, char *data);
  53. void   * ArrayChg(_Array *arr, void *data, size_t pos);
  54. void   * ArrayGet(_Array *arr, size_t pos);
  55. void     ArrayKill(_Array *arr);
  56.  
  57. #endif
  58. /* ------------------------------------------------- */
  59. /*             Ende von ARRAY.H                      */
  60.  
  61.