1 /* ----------------------------------------------------------------------------- 2 * cmalloc.i 3 * 4 * SWIG library file containing macros that can be used to create objects using 5 * the C malloc function. 6 * ----------------------------------------------------------------------------- */ 7 8 %{ 9 #include <stdlib.h> 10 %} 11 12 /* %malloc(TYPE [, NAME = TYPE]) 13 %calloc(TYPE [, NAME = TYPE]) 14 %realloc(TYPE [, NAME = TYPE]) 15 %free(TYPE [, NAME = TYPE]) 16 %allocators(TYPE [,NAME = TYPE]) 17 18 Creates functions for allocating/reallocating memory. 19 20 TYPE *malloc_NAME(int nbytes = sizeof(TYPE); 21 TYPE *calloc_NAME(int nobj=1, int size=sizeof(TYPE)); 22 TYPE *realloc_NAME(TYPE *ptr, int nbytes); 23 void free_NAME(TYPE *ptr); 24 25 */ 26 27 %define %malloc(TYPE,NAME...) 28 #if #NAME != "" 29 %rename(malloc_##NAME) ::malloc(int nbytes); 30 #else 31 %rename(malloc_##TYPE) ::malloc(int nbytes); 32 #endif 33 34 #if #TYPE != "void" 35 %typemap(default) int nbytes "$1 = (int) sizeof(TYPE);" 36 #endif 37 TYPE *malloc(int nbytes); 38 %typemap(default) int nbytes; 39 %enddef 40 41 %define %calloc(TYPE,NAME...) 42 #if #NAME != "" 43 %rename(calloc_##NAME) ::calloc(int nobj, int sz); 44 #else 45 %rename(calloc_##TYPE) ::calloc(int nobj, int sz); 46 #endif 47 #if #TYPE != "void" 48 %typemap(default) int sz "$1 = (int) sizeof(TYPE);" 49 #else 50 %typemap(default) int sz "$1 = 1;" 51 #endif 52 %typemap(default) int nobj "$1 = 1;" 53 TYPE *calloc(int nobj, int sz); 54 %typemap(default) int sz; 55 %typemap(default) int nobj; 56 %enddef 57 58 %define %realloc(TYPE,NAME...) 59 %insert("header") { 60 #if #NAME != "" 61 TYPE *realloc_##NAME(TYPE *ptr, int nitems) 62 #else 63 TYPE *realloc_##TYPE(TYPE *ptr, int nitems) 64 #endif 65 { 66 #if #TYPE != "void" 67 return (TYPE *) realloc(ptr, nitems*sizeof(TYPE)); 68 #else 69 return (TYPE *) realloc(ptr, nitems); 70 #endif 71 } 72 } 73 #if #NAME != "" 74 TYPE *realloc_##NAME(TYPE *ptr, int nitems); 75 #else 76 TYPE *realloc_##TYPE(TYPE *ptr, int nitems); 77 #endif 78 %enddef 79 80 %define %free(TYPE,NAME...) 81 #if #NAME != "" 82 %rename(free_##NAME) ::free(TYPE *ptr); 83 #else 84 %rename(free_##TYPE) ::free(TYPE *ptr); 85 #endif 86 void free(TYPE *ptr); 87 %enddef 88 89 %define %sizeof(TYPE,NAME...) 90 #if #NAME != "" 91 %constant int sizeof_##NAME = sizeof(TYPE); 92 #else 93 %constant int sizeof_##TYPE = sizeof(TYPE); 94 #endif 95 %enddef 96 97 %define %allocators(TYPE,NAME...) 98 %malloc(TYPE,NAME) 99 %calloc(TYPE,NAME) 100 %realloc(TYPE,NAME) 101 %free(TYPE,NAME) 102 #if #TYPE != "void" 103 %sizeof(TYPE,NAME) 104 #endif 105 %enddef 106 107 108 109 110 111