| /* ----------------------------------------------------------------------------- |
| * cmalloc.i |
| * |
| * SWIG library file containing macros that can be used to create objects using |
| * the C malloc function. |
| * ----------------------------------------------------------------------------- */ |
| |
| %{ |
| #include <stdlib.h> |
| %} |
| |
| /* %malloc(TYPE [, NAME = TYPE]) |
| %calloc(TYPE [, NAME = TYPE]) |
| %realloc(TYPE [, NAME = TYPE]) |
| %free(TYPE [, NAME = TYPE]) |
| %allocators(TYPE [,NAME = TYPE]) |
| |
| Creates functions for allocating/reallocating memory. |
| |
| TYPE *malloc_NAME(int nbytes = sizeof(TYPE); |
| TYPE *calloc_NAME(int nobj=1, int size=sizeof(TYPE)); |
| TYPE *realloc_NAME(TYPE *ptr, int nbytes); |
| void free_NAME(TYPE *ptr); |
| |
| */ |
| |
| %define %malloc(TYPE,NAME...) |
| #if #NAME != "" |
| %rename(malloc_##NAME) ::malloc(int nbytes); |
| #else |
| %rename(malloc_##TYPE) ::malloc(int nbytes); |
| #endif |
| |
| #if #TYPE != "void" |
| %typemap(default) int nbytes "$1 = (int) sizeof(TYPE);" |
| #endif |
| TYPE *malloc(int nbytes); |
| %typemap(default) int nbytes; |
| %enddef |
| |
| %define %calloc(TYPE,NAME...) |
| #if #NAME != "" |
| %rename(calloc_##NAME) ::calloc(int nobj, int sz); |
| #else |
| %rename(calloc_##TYPE) ::calloc(int nobj, int sz); |
| #endif |
| #if #TYPE != "void" |
| %typemap(default) int sz "$1 = (int) sizeof(TYPE);" |
| #else |
| %typemap(default) int sz "$1 = 1;" |
| #endif |
| %typemap(default) int nobj "$1 = 1;" |
| TYPE *calloc(int nobj, int sz); |
| %typemap(default) int sz; |
| %typemap(default) int nobj; |
| %enddef |
| |
| %define %realloc(TYPE,NAME...) |
| %insert("header") { |
| #if #NAME != "" |
| TYPE *realloc_##NAME(TYPE *ptr, int nitems) |
| #else |
| TYPE *realloc_##TYPE(TYPE *ptr, int nitems) |
| #endif |
| { |
| #if #TYPE != "void" |
| return (TYPE *) realloc(ptr, nitems*sizeof(TYPE)); |
| #else |
| return (TYPE *) realloc(ptr, nitems); |
| #endif |
| } |
| } |
| #if #NAME != "" |
| TYPE *realloc_##NAME(TYPE *ptr, int nitems); |
| #else |
| TYPE *realloc_##TYPE(TYPE *ptr, int nitems); |
| #endif |
| %enddef |
| |
| %define %free(TYPE,NAME...) |
| #if #NAME != "" |
| %rename(free_##NAME) ::free(TYPE *ptr); |
| #else |
| %rename(free_##TYPE) ::free(TYPE *ptr); |
| #endif |
| void free(TYPE *ptr); |
| %enddef |
| |
| %define %sizeof(TYPE,NAME...) |
| #if #NAME != "" |
| %constant int sizeof_##NAME = sizeof(TYPE); |
| #else |
| %constant int sizeof_##TYPE = sizeof(TYPE); |
| #endif |
| %enddef |
| |
| %define %allocators(TYPE,NAME...) |
| %malloc(TYPE,NAME) |
| %calloc(TYPE,NAME) |
| %realloc(TYPE,NAME) |
| %free(TYPE,NAME) |
| #if #TYPE != "void" |
| %sizeof(TYPE,NAME) |
| #endif |
| %enddef |
| |
| |
| |
| |
| |