1 /** @file 2 * Public header file for a portable dynamic memory allocator. 3 * 4 * This file may be included by internal and external C files. 5 */ 6 #ifndef _macdecls_h 7 #define _macdecls_h 8 9 #ifdef __cplusplus 10 extern "C" { 11 #endif 12 13 #include "macommon.h" 14 #include "matypes.h" 15 16 /** 17 ** constants 18 **/ 19 20 /* datatypes */ 21 #define MT_CHAR MT_C_CHAR /**< char */ 22 #define MT_INT MT_C_INT /**< int */ 23 #define MT_LONGINT MT_C_LONGINT /**< long int */ 24 #define MT_LONGLONG MT_C_LONGLONG /**< long long */ 25 #define MT_REAL MT_C_FLOAT /**< float */ 26 #define MT_DBL MT_C_DBL /**< double */ 27 #define MT_LDBL MT_C_LDBL /**< long double */ 28 #define MT_SCPL MT_C_SCPL /**< single precision complex */ 29 #define MT_DCPL MT_C_DCPL /**< double precision complex */ 30 #define MT_LDCPL MT_C_LDCPL /**< long double precision complex */ 31 #define MT_C_FIRST MT_CHAR /**< first type */ 32 #define MT_C_LAST MT_LDCPL /**< last type */ 33 34 /** 35 ** function types 36 **/ 37 38 extern Boolean MA_alloc_get( 39 Integer datatype, /**< of elements in this block */ 40 Integer nelem, /**< # of elements in this block */ 41 const char *name, /**< assigned to this block by client */ 42 Integer *memhandle, /**< RETURN: handle for this block */ 43 MA_AccessIndex *index /**< RETURN: index for this block */ ); 44 extern Boolean MA_allocate_heap( 45 Integer datatype, /**< of elements in this block */ 46 Integer nelem, /**< # of elements in this block */ 47 const char *name, /**< assigned to this block by client */ 48 Integer *memhandle /**< RETURN: handle for this block */ ); 49 extern Boolean MA_chop_stack(Integer memhandle); 50 extern Boolean MA_free_heap(Integer memhandle); 51 extern Boolean MA_free_heap_piece( 52 Integer memhandle, /**< the block to deallocate a piece of */ 53 Integer nelem /**< # of elements to deallocate */); 54 extern Boolean MA_get_index( 55 Integer memhandle, /**< block to get index for */ 56 MA_AccessIndex *index /**< RETURN: base index */); 57 extern Pointer MA_get_mbase(Integer datatype); /**< to get base address of */ 58 extern Boolean MA_get_next_memhandle( 59 Integer *ithandle, /**< handle for this iterator */ 60 Integer *memhandle /**< RETURN: handle for the next block */); 61 extern Boolean MA_get_numalign(Integer *value); 62 extern Boolean MA_get_pointer( 63 Integer memhandle, /**< block to get pointer for */ 64 void *pointer /**< JN: void** = void* */ ); 65 extern Boolean MA_init( 66 Integer datatype, /**< for computing storage requirement */ 67 Integer nominal_stack, /**< # of datatype elements desired for stack */ 68 Integer nominal_heap /**< # of datatype elements desired for heap */); 69 extern Boolean MA_initialized(); 70 extern Boolean MA_init_memhandle_iterator( Integer *ithandle); 71 extern Integer MA_inquire_avail(Integer datatype); 72 extern Integer MA_inquire_heap(Integer datatype); 73 extern Integer MA_inquire_heap_check_stack(Integer datatype); 74 extern Integer MA_inquire_heap_no_partition(Integer datatype); 75 extern Integer MA_inquire_stack(Integer datatype); 76 extern Integer MA_inquire_stack_check_heap(Integer datatype); 77 extern Integer MA_inquire_stack_no_partition(Integer datatype); 78 extern Boolean MA_pop_stack(Integer memhandle); 79 extern void MA_print_stats(Boolean printroutines); 80 extern Boolean MA_push_get( 81 Integer datatype, /**< of elements in this block */ 82 Integer nelem, /**< # of elements in this block */ 83 const char *name, /**< assigned to this block by client */ 84 Integer *memhandle, /**< RETURN: handle for this block */ 85 MA_AccessIndex *index /**< RETURN: index for this block */); 86 extern Boolean MA_push_stack( 87 Integer datatype, /**< of elements in this block */ 88 Integer nelem, /**< # of elements in this block */ 89 const char *name, /**< assigned to this block by client */ 90 Integer *memhandle /**< RETURN: handle for this block */); 91 extern Boolean MA_set_auto_verify(Boolean value /* to set flag to */); 92 extern Boolean MA_set_error_print(Boolean value /* to set flag to */); 93 extern Boolean MA_set_hard_fail( Boolean value /* to set flag to */); 94 extern Boolean MA_set_numalign(Integer value); 95 extern Integer MA_sizeof( 96 Integer datatype1, /**< of source elements */ 97 Integer nelem1, /**< # of source elements */ 98 Integer datatype2 /**< of target elements */); 99 extern Integer MA_sizeof_overhead(Integer datatype); 100 extern void MA_summarize_allocated_blocks(); 101 extern void MA_trace(Boolean value); 102 extern Boolean MA_verify_allocator_stuff(); 103 extern void MA_set_error_callback(void(*func)()); 104 105 extern void ma_set_error_callback(); 106 107 /** 108 ** variables 109 **/ 110 111 /* base arrays for the C datatypes */ 112 extern char ma_cb_char[]; /**< MT_C_CHAR */ 113 extern int ma_cb_int[]; /**< MT_C_INT */ 114 extern long ma_cb_long[]; /**< MT_C_LONGINT */ 115 extern long long ma_cb_longlong[]; /**< MT_C_LONGLONG */ 116 extern float ma_cb_float[]; /**< MT_C_FLOAT */ 117 extern double ma_cb_dbl[]; /**< MT_C_DBL */ 118 extern MA_LongDouble ma_cb_ldbl[]; /**< MT_C_LDBL */ 119 extern MA_SingleComplex ma_cb_scpl[]; /**< MT_C_SCPL */ 120 extern MA_DoubleComplex ma_cb_dcpl[]; /**< MT_C_DCPL */ 121 extern MA_LongDoubleComplex ma_cb_ldcpl[]; /**< MT_C_LDCPL */ 122 123 #ifdef __cplusplus 124 } 125 #endif 126 127 #endif /* _macdecls_h */ 128