You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
120 lines
2.7 KiB
120 lines
2.7 KiB
/* ----------------------------------------------------------------------------- |
|
* 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.i |
|
* |
|
* SWIG library file containing 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(int nelements) { %} |
|
#ifdef __cplusplus |
|
%{ return new TYPE[nelements]; %} |
|
#else |
|
%{ return (TYPE *) calloc(nelements,sizeof(TYPE)); %} |
|
#endif |
|
%{} |
|
|
|
static void delete_##NAME(TYPE *ary) { %} |
|
#ifdef __cplusplus |
|
%{ delete [] ary; %} |
|
#else |
|
%{ free(ary); %} |
|
#endif |
|
%{} |
|
|
|
static TYPE NAME##_getitem(TYPE *ary, int index) { |
|
return ary[index]; |
|
} |
|
static void NAME##_setitem(TYPE *ary, int index, TYPE value) { |
|
ary[index] = value; |
|
} |
|
%} |
|
|
|
TYPE *new_##NAME(int nelements); |
|
void delete_##NAME(TYPE *ary); |
|
TYPE NAME##_getitem(TYPE *ary, int index); |
|
void NAME##_setitem(TYPE *ary, int 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); |
|
* } |
|
* |
|
* ----------------------------------------------------------------------------- */ |
|
|
|
%define %array_class(TYPE,NAME) |
|
%{ |
|
typedef TYPE NAME; |
|
%} |
|
typedef struct NAME { |
|
/* Put language specific enhancements here */ |
|
|
|
} NAME; |
|
|
|
%extend NAME { |
|
|
|
#ifdef __cplusplus |
|
NAME(int nelements) { |
|
return new TYPE[nelements]; |
|
} |
|
~NAME() { |
|
delete [] self; |
|
} |
|
#else |
|
NAME(int nelements) { |
|
return (TYPE *) calloc(nelements,sizeof(TYPE)); |
|
} |
|
~NAME() { |
|
free(self); |
|
} |
|
#endif |
|
|
|
TYPE getitem(int index) { |
|
return self[index]; |
|
} |
|
void setitem(int index, TYPE value) { |
|
self[index] = value; |
|
} |
|
TYPE * cast() { |
|
return self; |
|
} |
|
static NAME *frompointer(TYPE *t) { |
|
return (NAME *) t; |
|
} |
|
|
|
}; |
|
|
|
%types(NAME = TYPE); |
|
|
|
%enddef |
|
|
|
|