Home | History | Annotate | Download | only in 2.0.11
      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