home *** CD-ROM | disk | FTP | other *** search
/ QBasic & Borland Pascal & C / Delphi5.iso / C / Samples / CSAPE32.ARJ / INCLUDE / JADECL.H < prev    next >
C/C++ Source or Header  |  1990-09-24  |  3KB  |  108 lines

  1. /*
  2.     jadecl.h  4/14/89
  3.  
  4.     % jarray (jeneric arrays)
  5.  
  6.     originally written by stephen ng and Joe DeSantis.
  7.  
  8.     OWL 1.2
  9.     Copyright (c) 1986-1989, by Oakland Group, Inc.
  10.     ALL RIGHTS RESERVED.
  11.  
  12.     Revision History:
  13.     -----------------
  14.      9/01/87 jmd     added NO_PROTO option
  15.      6/01/88 jmd      added iarray, changed char *'s to VOID *'s
  16.      6/01/88 jmd      changed growth strategy
  17.      6/01/88 jmd      changed some names
  18.      6/24/88 jmd      moved to oaklib
  19.     10/17/88 jmd      added _arg()
  20.  
  21.      4/14/89 jmd    combined into one new super thingy
  22.  
  23.      3/28/90 jmd    ansi-fied
  24.      9/24/90 jmd    added ja_Ok
  25. */
  26.  
  27. #define JA_GROW    1024
  28.  
  29. /* The jarray structure. */
  30.  
  31. typedef struct jarray_struct {
  32.     VOID        *array;
  33.     unsigned     size;
  34.     SIZE_T        eltsize;
  35.  
  36. } *jarray;
  37.  
  38. /* Jarray macros. */
  39.  
  40. /* ja_Get copies the data from the array into your slot */
  41. /* ja_GetPtr returns a pointer to the data */
  42.  
  43. #define ja_GetPtr(ja, eltno)    \
  44.     (VOID *) ((char *) (ja)->array + (eltno * (ja)->eltsize))
  45.  
  46. #define ja_size(ja) ((ja)->size)
  47.  
  48. #define    ja_Ok(ja)    ((ja)->array != NULL)
  49.  
  50. /* Jarray declarations. */
  51.  
  52. /* JARRAY.C */
  53. extern jarray    ja_Open(unsigned size, SIZE_T eltsize);
  54. extern void        ja_Close(jarray ja);
  55. extern int        ja_Put(jarray ja, unsigned eltno, VOID *elt);
  56. extern boolean    ja_Resize(jarray ja, unsigned newsize);
  57. extern VOID       *ja_Get(jarray ja, unsigned eltno, VOID *out);
  58.  
  59. /* JAINS.C */
  60. extern boolean    ja_Ins(jarray ja, unsigned eltno, unsigned count, unsigned isize);
  61. extern void        ja_Del(jarray ja, unsigned eltno, unsigned count);
  62.  
  63. /* Xarray macros. (for pointers) */
  64.  
  65. typedef jarray xarray;
  66.  
  67. #define xa_Open(start)        ja_Open(start, 0)
  68. #define xa_Close(xa)        ja_Close(xa)
  69.  
  70. #define xa_Get(xa, eltno) (((eltno) >= (xa)->size) ? \
  71.     (NULL) : ((VOID **)(xa)->array)[(eltno)])
  72.  
  73. #define xa_Put(xa, eltno, elt) (((eltno) >= (xa)->size) ? \
  74.     ja_Put(xa, eltno, (VOID *) elt) : (((VOID **)(xa)->array)[(eltno)] = (elt), TRUE))
  75.  
  76. #define xa_size(xa) ja_size(xa)
  77.  
  78. /* Larray macros. (for longs) */
  79.  
  80. typedef jarray larray;
  81.  
  82. #define la_Open(start)        ja_Open(start, sizeof(long))
  83. #define la_Close(la)        ja_Close(la)
  84.  
  85. #define la_Get(la, eltno) (((eltno) >= (la)->size) ? \
  86.     (0L) : ((long *)(la)->array)[(eltno)])
  87.  
  88. #define la_Put(la, eltno, elt) (((eltno) >= (la)->size) ? \
  89.     ja_Put(la, eltno, (VOID *) &elt) : (((long *)(la)->array)[(eltno)] = (elt), TRUE))
  90.  
  91. #define la_size(la) ja_size(la)
  92.  
  93. /* Iarray macros. (for ints) */
  94.  
  95. typedef jarray iarray;
  96.  
  97. #define ia_Open(start)        ja_Open(start, sizeof(int))
  98. #define ia_Close(ia)        ja_Close(ia)
  99.  
  100. #define ia_Get(ia, eltno) (((eltno) >= (ia)->size) ? \
  101.     (0) : ((int *)(ia)->array)[(eltno)])
  102.  
  103. #define ia_Put(ia, eltno, elt) (((eltno) >= (ia)->size) ? \
  104.     ja_Put(ia, eltno, (VOID *) &elt) : (((int *)(ia)->array)[(eltno)] = (elt), TRUE))
  105.  
  106. #define ia_size(ia) ja_size(ia)
  107.  
  108.