| Index: swig/Lib/typemaps/carrays.swg
|
| ===================================================================
|
| --- swig/Lib/typemaps/carrays.swg (revision 0)
|
| +++ swig/Lib/typemaps/carrays.swg (revision 0)
|
| @@ -0,0 +1,117 @@
|
| +/* -----------------------------------------------------------------------------
|
| + * 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.
|
| + *
|
| + * carrays.swg
|
| + *
|
| + * This library file contains macros that can be used to manipulate simple
|
| + * pointers as arrays.
|
| + * ----------------------------------------------------------------------------- */
|
| +
|
| +/* -----------------------------------------------------------------------------
|
| + * %array_functions(TYPE,NAME)
|
| + *
|
| + * Generates functions for creating and accessing elements of a C array
|
| + * (as pointers). Creates the following functions:
|
| + *
|
| + * TYPE *new_NAME(int nelements)
|
| + * void delete_NAME(TYPE *);
|
| + * TYPE NAME_getitem(TYPE *, int index);
|
| + * void NAME_setitem(TYPE *, int index, TYPE value);
|
| + *
|
| + * ----------------------------------------------------------------------------- */
|
| +
|
| +%define %array_functions(TYPE,NAME)
|
| +%{
|
| + static TYPE *new_##NAME(size_t nelements) {
|
| + return %new_array(nelements, TYPE);
|
| + }
|
| +
|
| + static void delete_##NAME(TYPE *ary) {
|
| + %delete_array(ary);
|
| + }
|
| +
|
| + static TYPE NAME##_getitem(TYPE *ary, size_t index) {
|
| + return ary[index];
|
| + }
|
| + static void NAME##_setitem(TYPE *ary, size_t index, TYPE value) {
|
| + ary[index] = value;
|
| + }
|
| +%}
|
| +
|
| +TYPE *new_##NAME(size_t nelements);
|
| +void delete_##NAME(TYPE *ary);
|
| +TYPE NAME##_getitem(TYPE *ary, size_t index);
|
| +void NAME##_setitem(TYPE *ary, size_t index, TYPE value);
|
| +
|
| +%enddef
|
| +
|
| +
|
| +/* -----------------------------------------------------------------------------
|
| + * %array_class(TYPE,NAME)
|
| + *
|
| + * Generates a class wrapper around a C array. The class has the following
|
| + * interface:
|
| + *
|
| + * struct NAME {
|
| + * NAME(int nelements);
|
| + * ~NAME();
|
| + * TYPE getitem(int index);
|
| + * void setitem(int index, TYPE value);
|
| + * TYPE * cast();
|
| + * static NAME *frompointer(TYPE *t);
|
| + * }
|
| + *
|
| + * Use
|
| + *
|
| + * %array_class_wrap(TYPE,NAME,GET,SET)
|
| + *
|
| + * if you want different names for the get/set methods.
|
| + * ----------------------------------------------------------------------------- */
|
| +
|
| +%define %array_class_wrap(TYPE,NAME,getitem,setitem)
|
| +%{
|
| +typedef TYPE NAME;
|
| +%}
|
| +
|
| +
|
| +typedef struct NAME {
|
| +} NAME;
|
| +
|
| +%extend NAME {
|
| +
|
| + NAME(size_t nelements) {
|
| + return %new_array(nelements, TYPE);
|
| + }
|
| +
|
| + ~NAME() {
|
| + %delete_array(self);
|
| + }
|
| +
|
| + TYPE getitem(size_t index) {
|
| + return self[index];
|
| + }
|
| +
|
| + void setitem(size_t index, TYPE value) {
|
| + self[index] = value;
|
| + }
|
| +
|
| + TYPE * cast() {
|
| + return self;
|
| + }
|
| +
|
| + static NAME *frompointer(TYPE *t) {
|
| + return %static_cast(t, NAME *);
|
| + }
|
| +};
|
| +
|
| +%types(NAME = TYPE);
|
| +
|
| +%enddef
|
| +
|
| +
|
| +#ifndef %array_class
|
| +%define %array_class(TYPE,NAME)
|
| + %array_class_wrap(TYPE,NAME,getitem,setitem)
|
| +%enddef
|
| +#endif
|
|
|