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