Mercurial > mm7
comparison lib/swig/swigwin-2.0.11/Lib/carrays.i @ 1899:b3009adc0e2f
Adding swig, gitignore, hgignore
author | Nomad |
---|---|
date | Mon, 21 Oct 2013 10:42:27 +0200 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
1867:eb580660bbbb | 1899:b3009adc0e2f |
---|---|
1 /* ----------------------------------------------------------------------------- | |
2 * carrays.i | |
3 * | |
4 * SWIG library file containing macros that can be used to manipulate simple | |
5 * pointers as arrays. | |
6 * ----------------------------------------------------------------------------- */ | |
7 | |
8 /* ----------------------------------------------------------------------------- | |
9 * %array_functions(TYPE,NAME) | |
10 * | |
11 * Generates functions for creating and accessing elements of a C array | |
12 * (as pointers). Creates the following functions: | |
13 * | |
14 * TYPE *new_NAME(int nelements) | |
15 * void delete_NAME(TYPE *); | |
16 * TYPE NAME_getitem(TYPE *, int index); | |
17 * void NAME_setitem(TYPE *, int index, TYPE value); | |
18 * | |
19 * ----------------------------------------------------------------------------- */ | |
20 | |
21 %define %array_functions(TYPE,NAME) | |
22 %{ | |
23 static TYPE *new_##NAME(int nelements) { %} | |
24 #ifdef __cplusplus | |
25 %{ return new TYPE[nelements]; %} | |
26 #else | |
27 %{ return (TYPE *) calloc(nelements,sizeof(TYPE)); %} | |
28 #endif | |
29 %{} | |
30 | |
31 static void delete_##NAME(TYPE *ary) { %} | |
32 #ifdef __cplusplus | |
33 %{ delete [] ary; %} | |
34 #else | |
35 %{ free(ary); %} | |
36 #endif | |
37 %{} | |
38 | |
39 static TYPE NAME##_getitem(TYPE *ary, int index) { | |
40 return ary[index]; | |
41 } | |
42 static void NAME##_setitem(TYPE *ary, int index, TYPE value) { | |
43 ary[index] = value; | |
44 } | |
45 %} | |
46 | |
47 TYPE *new_##NAME(int nelements); | |
48 void delete_##NAME(TYPE *ary); | |
49 TYPE NAME##_getitem(TYPE *ary, int index); | |
50 void NAME##_setitem(TYPE *ary, int index, TYPE value); | |
51 | |
52 %enddef | |
53 | |
54 | |
55 /* ----------------------------------------------------------------------------- | |
56 * %array_class(TYPE,NAME) | |
57 * | |
58 * Generates a class wrapper around a C array. The class has the following | |
59 * interface: | |
60 * | |
61 * struct NAME { | |
62 * NAME(int nelements); | |
63 * ~NAME(); | |
64 * TYPE getitem(int index); | |
65 * void setitem(int index, TYPE value); | |
66 * TYPE * cast(); | |
67 * static NAME *frompointer(TYPE *t); | |
68 * } | |
69 * | |
70 * ----------------------------------------------------------------------------- */ | |
71 | |
72 %define %array_class(TYPE,NAME) | |
73 %{ | |
74 typedef TYPE NAME; | |
75 %} | |
76 typedef struct { | |
77 /* Put language specific enhancements here */ | |
78 } NAME; | |
79 | |
80 %extend NAME { | |
81 | |
82 #ifdef __cplusplus | |
83 NAME(int nelements) { | |
84 return new TYPE[nelements]; | |
85 } | |
86 ~NAME() { | |
87 delete [] self; | |
88 } | |
89 #else | |
90 NAME(int nelements) { | |
91 return (TYPE *) calloc(nelements,sizeof(TYPE)); | |
92 } | |
93 ~NAME() { | |
94 free(self); | |
95 } | |
96 #endif | |
97 | |
98 TYPE getitem(int index) { | |
99 return self[index]; | |
100 } | |
101 void setitem(int index, TYPE value) { | |
102 self[index] = value; | |
103 } | |
104 TYPE * cast() { | |
105 return self; | |
106 } | |
107 static NAME *frompointer(TYPE *t) { | |
108 return (NAME *) t; | |
109 } | |
110 | |
111 }; | |
112 | |
113 %types(NAME = TYPE); | |
114 | |
115 %enddef | |
116 |