home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 7 / 07.iso / c / c185 / 2.ddi / OWLSRC.EXE / CSCAPE / SOURCE / JADECL.H < prev    next >
Encoding:
C/C++ Source or Header  |  1989-09-07  |  2.6 KB  |  100 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.1
  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.  
  24. #define JA_GROW    1024
  25.  
  26. /* The jarray structure. */
  27.  
  28. typedef struct jarray_struct {
  29.     VOID        *array;
  30.     unsigned     size;
  31.     SIZE_T        eltsize;
  32.  
  33. } *jarray;
  34.  
  35. /* Jarray macros. */
  36.  
  37. /* ja_Get copies the data from the array into your slot */
  38. /* ja_GetPtr returns a pointer to the data */
  39.  
  40. #define ja_GetPtr(ja, eltno)    \
  41.     (VOID *) ((char *) (ja)->array + (eltno * (ja)->eltsize))
  42.  
  43. #define ja_size(ja) ((ja)->size)
  44.  
  45. /* Jarray declarations. */
  46. extern jarray    ja_Open(_arg2(unsigned int, SIZE_T));
  47. extern void        ja_Close(_arg1(jarray));
  48. extern int        ja_Put(_arg3(jarray, unsigned int, VOID *));
  49. extern VOID       *ja_Get(_arg3(jarray, unsigned int, VOID *));
  50. extern boolean  ja_Resize(_arg2(jarray, unsigned int));
  51.  
  52. extern boolean    ja_Ins(_arg4(jarray, unsigned int, unsigned int, unsigned int));
  53. extern void        ja_Del(_arg3(jarray, unsigned int, unsigned int));
  54.  
  55. /* Xarray macros. (for pointers) */
  56.  
  57. typedef jarray xarray;
  58.  
  59. #define xa_Open(start)        ja_Open(start, 0)
  60. #define xa_Close(xa)        ja_Close(xa)
  61.  
  62. #define xa_Get(xa, eltno) (((eltno) >= (xa)->size) ? \
  63.     (NULL) : ((VOID **)(xa)->array)[(eltno)])
  64.  
  65. #define xa_Put(xa, eltno, elt) (((eltno) >= (xa)->size) ? \
  66.     ja_Put(xa, eltno, (VOID *) elt) : (((VOID **)(xa)->array)[(eltno)] = (elt), TRUE))
  67.  
  68. #define xa_size(xa) ja_size(xa)
  69.  
  70. /* Larray macros. (for longs) */
  71.  
  72. typedef jarray larray;
  73.  
  74. #define la_Open(start)        ja_Open(start, sizeof(long))
  75. #define la_Close(la)        ja_Close(la)
  76.  
  77. #define la_Get(la, eltno) (((eltno) >= (la)->size) ? \
  78.     (0L) : ((long *)(la)->array)[(eltno)])
  79.  
  80. #define la_Put(la, eltno, elt) (((eltno) >= (la)->size) ? \
  81.     ja_Put(la, eltno, (VOID *) &elt) : (((long *)(la)->array)[(eltno)] = (elt), TRUE))
  82.  
  83. #define la_size(la) ja_size(la)
  84.  
  85. /* Iarray macros. (for ints) */
  86.  
  87. typedef jarray iarray;
  88.  
  89. #define ia_Open(start)        ja_Open(start, sizeof(int))
  90. #define ia_Close(ia)        ja_Close(ia)
  91.  
  92. #define ia_Get(ia, eltno) (((eltno) >= (ia)->size) ? \
  93.     (0) : ((int *)(ia)->array)[(eltno)])
  94.  
  95. #define ia_Put(ia, eltno, elt) (((eltno) >= (ia)->size) ? \
  96.     ja_Put(ia, eltno, (VOID *) &elt) : (((int *)(ia)->array)[(eltno)] = (elt), TRUE))
  97.  
  98. #define ia_size(ia) ja_size(ia)
  99.  
  100.