home *** CD-ROM | disk | FTP | other *** search
/ vis-ftp.cs.umass.edu / vis-ftp.cs.umass.edu.tar / vis-ftp.cs.umass.edu / pub / Software / ASCENDER / ascendMar8.tar / UMass / Triangulate / include / alloc.h next >
C/C++ Source or Header  |  1995-04-13  |  2KB  |  73 lines

  1. /* @(#)alloc.h    1.11 12/21/94 */
  2. /* Macros for allocating and freeing matrices and vectors */
  3.  
  4. #ifndef alloc_h
  5. #define alloc_h
  6.  
  7. #include "rh_util.h"
  8.  
  9. #ifdef SUN4
  10. #include <alloca.h>
  11. #endif
  12.  
  13.  
  14. #ifndef __cplusplus
  15.  
  16. #   define ALLOCA(len)                             \
  17.       (((zztchar=(char *)alloca((unsigned)len))==0)?        \
  18.        (fprintf(stderr,"ERROR ***Out of space.***\n"),(char *)bail_out(1)) \
  19.        :zztchar)
  20.  
  21.     /* Allocate temporary matrix and vector storage on the stack */
  22. #   define TVECTOR(nl, nh, type)                                    \
  23.         (type *) (ALLOCA(((nh)-(nl)+1)*sizeof(type)) - (nl)*sizeof(type))
  24.  
  25. #   define TMATRIX(xl,xh,yl,yh,type)                \
  26.         (type **) alloca_matrix ((xl), (xh), (yl), (yh), sizeof(type), \
  27.     (char **)ALLOCA(((xh)-(xl)+1)*(sizeof(char *) +     \
  28.     ((yh)-(yl)+1) * sizeof(type))))
  29.  
  30. #endif
  31.  
  32. /* Allocate storage on the heap */
  33. #define VECTOR(nl, nh, type)                                            \
  34.         (type *) (MALLOC(((nh)-(nl)+1)*sizeof(type)) - (nl)*sizeof(type))
  35.  
  36. /* Allocate storage on the heap */
  37. #define MATRIX(xl,xh,yl,yh,type)                            \
  38.         (type **) malloc_matrix ((xl), (xh), (yl), (yh), sizeof(type))
  39.  
  40. #define FREE(m,nrl)                 \
  41.    {                        \
  42.    if (m) free((char *)((m)+(nrl)));        \
  43.    m = NULL;                    \
  44.    }
  45.  
  46. #define SUBMATRIX(A,xl,yl,xdim,ydim,orgx,orgy,type)        \
  47.     (type **) submatrix (A, xl, yl, xdim, orgx, orgy, sizeof(type))
  48.  
  49. #define ARRAY(n,p) VECTOR (0, (n)-1, p)
  50.  
  51. /*--------------------------------------------------------------------
  52.  * These macros should be used instead of VECTOR and FREE, when
  53.  * we mant to make vectors of class members.
  54.  * The difference is that in C++ we will call the empty constructor
  55.  * methods for vectors of class members, such as VECTOR (1, 3, Vector).
  56.  *-------------------------------------------------------------------*/
  57.  
  58. #ifdef __cplusplus
  59.  
  60. #   define GVECTOR(nl, nh, type) ((new type [(nh)-(nl)+1]) - (nl))
  61. #   define GVFREE(m,nrl) delete [] ((m) + (nrl))
  62.  
  63. #else
  64.  
  65. /* Included just in case we use this with ordinary data types in a c program */
  66. #   define GVECTOR(nl, nh, type) VECTOR(nl, nh, type)
  67. #   define GVFREE(m,nrl) FREE(m,nrl)
  68.  
  69. #endif
  70.  
  71.  
  72. #endif
  73.