Index: swig/Lib/typemaps/cmalloc.swg |
=================================================================== |
--- swig/Lib/typemaps/cmalloc.swg (revision 0) |
+++ swig/Lib/typemaps/cmalloc.swg (revision 0) |
@@ -0,0 +1,113 @@ |
+/* ----------------------------------------------------------------------------- |
+ * See the LICENSE file for information on copyright, usage and redistribution |
+ * of SWIG, and the README file for authors - http://www.swig.org/release.html. |
+ * |
+ * cmalloc.swg |
+ * |
+ * This library file contains 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(size_t nbytes = sizeof(TYPE); |
+ TYPE *calloc_NAME(size_t nobj=1, size_t size=sizeof(TYPE)); |
+ TYPE *realloc_NAME(TYPE *ptr, size_t nbytes); |
+ void free_NAME(TYPE *ptr); |
+ |
+*/ |
+ |
+%define %malloc(TYPE,NAME...) |
+#if #NAME != "" |
+%rename(malloc_##NAME) ::malloc(size_t nbytes); |
+#else |
+%rename(malloc_##TYPE) ::malloc(size_t nbytes); |
+#endif |
+ |
+#if #TYPE != "void" |
+%typemap(default) size_t nbytes "$1 = (size_t) sizeof(TYPE);" |
+#endif |
+TYPE *malloc(size_t nbytes); |
+%typemap(default) size_t nbytes; |
+%enddef |
+ |
+%define %calloc(TYPE,NAME...) |
+#if #NAME != "" |
+%rename(calloc_##NAME) ::calloc(size_t nobj, size_t sz); |
+#else |
+%rename(calloc_##TYPE) ::calloc(size_t nobj, size_t sz); |
+#endif |
+#if #TYPE != "void" |
+%typemap(default) size_t sz "$1 = (size_t) sizeof(TYPE);" |
+#else |
+%typemap(default) size_t sz "$1 = 1;" |
+#endif |
+%typemap(default) size_t nobj "$1 = 1;" |
+TYPE *calloc(size_t nobj, size_t sz); |
+%typemap(default) size_t sz; |
+%typemap(default) size_t nobj; |
+%enddef |
+ |
+%define %realloc(TYPE,NAME...) |
+%insert("header") { |
+#if #NAME != "" |
+TYPE *realloc_##NAME(TYPE *ptr, size_t nitems) |
+#else |
+TYPE *realloc_##TYPE(TYPE *ptr, size_t 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, size_t nitems); |
+#else |
+TYPE *realloc_##TYPE(TYPE *ptr, size_t 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 size_t sizeof_##NAME = sizeof(TYPE); |
+#else |
+%constant size_t 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 |
+ |
+ |
+ |
+ |
+ |