/tags/rel-1.3.35/Lib/cffi/cffi.swg
Unknown | 284 lines | 231 code | 53 blank | 0 comment | 0 complexity | a2b21977c14cab0e41b5a1819acd2450 MD5 | raw file
Possible License(s): LGPL-2.1, Cube, GPL-3.0, 0BSD, GPL-2.0
1/* Define a C preprocessor symbol that can be used in interface files
2 to distinguish between the SWIG language modules. */
3
4#define SWIG_CFFI
5
6/* Typespecs for basic types. */
7
8%typemap(cin) void ":void";
9
10%typemap(cin) char ":char";
11%typemap(cin) char * ":string";
12%typemap(cin) unsigned char ":unsigned-char";
13%typemap(cin) signed char ":char";
14
15%typemap(cin) short ":short";
16%typemap(cin) signed short ":short";
17%typemap(cin) unsigned short ":unsigned-short";
18
19%typemap(cin) int ":int";
20%typemap(cin) signed int ":int";
21%typemap(cin) unsigned int ":unsigned-int";
22
23%typemap(cin) long ":long";
24%typemap(cin) signed long ":long";
25%typemap(cin) unsigned long ":unsigned-long";
26
27%typemap(cin) long long ":long-long";
28%typemap(cin) signed long long ":long-long";
29%typemap(cin) unsigned long long ":unsigned-long-long";
30
31%typemap(cin) float ":float";
32%typemap(cin) double ":double";
33%typemap(cin) SWIGTYPE ":pointer";
34
35%typemap(cout) void ":void";
36
37%typemap(cout) char ":char";
38%typemap(cout) char * ":string";
39%typemap(cout) unsigned char ":unsigned-char";
40%typemap(cout) signed char ":char";
41
42%typemap(cout) short ":short";
43%typemap(cout) signed short ":short";
44%typemap(cout) unsigned short ":unsigned-short";
45
46%typemap(cout) int ":int";
47%typemap(cout) signed int ":int";
48%typemap(cout) unsigned int ":unsigned-int";
49
50%typemap(cout) long ":long";
51%typemap(cout) signed long ":long";
52%typemap(cout) unsigned long ":unsigned-long";
53
54%typemap(cout) long long ":long-long";
55%typemap(cout) signed long long ":long-long";
56%typemap(cout) unsigned long long ":unsigned-long-long";
57
58%typemap(cout) float ":float";
59%typemap(cout) double ":double";
60%typemap(cout) SWIGTYPE ":pointer";
61
62
63%typemap(ctype) bool "int";
64%typemap(ctype) char, unsigned char, signed char,
65 short, signed short, unsigned short,
66 int, signed int, unsigned int,
67 long, signed long, unsigned long,
68 float, double, long double, char *, void *, void,
69 enum SWIGTYPE, SWIGTYPE *,
70 SWIGTYPE[ANY], SWIGTYPE & "$1_ltype";
71%typemap(ctype) SWIGTYPE "$&1_type";
72
73%typemap(in) bool "$1 = (bool)$input;";
74%typemap(in) char, unsigned char, signed char,
75 short, signed short, unsigned short,
76 int, signed int, unsigned int,
77 long, signed long, unsigned long,
78 float, double, long double, char *, void *, void,
79 enum SWIGTYPE, SWIGTYPE *,
80 SWIGTYPE[ANY], SWIGTYPE & "$1 = $input;";
81%typemap(in) SWIGTYPE "$1 = *$input;";
82
83%typemap(out) bool "$result = (int)$1;";
84%typemap(out) char, unsigned char, signed char,
85 short, signed short, unsigned short,
86 int, signed int, unsigned int,
87 long, signed long, unsigned long,
88 float, double, long double, char *, void *, void,
89 enum SWIGTYPE, SWIGTYPE *,
90 SWIGTYPE[ANY], SWIGTYPE & "$result = $1;";
91#ifdef __cplusplus
92%typemap(out) SWIGTYPE "$result = new $1_type($1);";
93#else
94%typemap(out) SWIGTYPE {
95 $result = ($&1_ltype) malloc(sizeof($1_type));
96 memmove($result, &$1, sizeof($1_type));
97}
98#endif
99
100%typecheck(SWIG_TYPECHECK_BOOL) bool { $1 = 1; };
101%typecheck(SWIG_TYPECHECK_CHAR) char { $1 = 1; };
102%typecheck(SWIG_TYPECHECK_FLOAT) float { $1 = 1; };
103%typecheck(SWIG_TYPECHECK_DOUBLE) double { $1 = 1; };
104%typecheck(SWIG_TYPECHECK_STRING) char * { $1 = 1; };
105%typecheck(SWIG_TYPECHECK_INTEGER)
106 unsigned char, signed char,
107 short, signed short, unsigned short,
108 int, signed int, unsigned int,
109 long, signed long, unsigned long,
110 enum SWIGTYPE { $1 = 1; };
111%typecheck(SWIG_TYPECHECK_POINTER) SWIGTYPE *, SWIGTYPE &,
112 SWIGTYPE[ANY], SWIGTYPE { $1 = 1; };
113/* This maps C/C++ types to Lisp classes for overload dispatch */
114
115%typemap(lisptype) bool "cl:boolean";
116%typemap(lisptype) char "cl:character";
117%typemap(lisptype) unsigned char "cl:integer";
118%typemap(lisptype) signed char "cl:integer";
119
120%typemap(lispclass) bool "t";
121%typemap(lispclass) char "cl:character";
122%typemap(lispclass) unsigned char, signed char,
123 short, signed short, unsigned short,
124 int, signed int, unsigned int,
125 long, signed long, unsigned long,
126 enum SWIGTYPE "cl:integer";
127%typemap(lispclass) float "cl:single-float";
128%typemap(lispclass) double "cl:double-float";
129%typemap(lispclass) char * "cl:string";
130
131
132%{
133
134#ifdef __cplusplus
135# define EXTERN extern "C"
136#else
137# define EXTERN extern
138#endif
139
140#define EXPORT EXTERN SWIGEXPORT
141
142#include <string.h>
143%}
144
145%insert("swiglisp") %{
146;;;SWIG wrapper code starts here
147
148(cl:defmacro defanonenum (&body enums)
149 "Converts anonymous enums to defconstants."
150 `(cl:progn ,@(cl:loop for value in enums
151 for index = 0 then (cl:1+ index)
152 when (cl:listp value) do (cl:setf index (cl:second value)
153 value (cl:first value))
154 collect `(cl:defconstant ,value ,index))))
155
156(cl:eval-when (:compile-toplevel :load-toplevel)
157 (cl:unless (cl:fboundp 'swig-lispify)
158 (cl:defun swig-lispify (name flag cl:&optional (package cl:*package*))
159 (cl:labels ((helper (lst last rest cl:&aux (c (cl:car lst)))
160 (cl:cond
161 ((cl:null lst)
162 rest)
163 ((cl:upper-case-p c)
164 (helper (cl:cdr lst) 'upper
165 (cl:case last
166 ((lower digit) (cl:list* c #\- rest))
167 (cl:t (cl:cons c rest)))))
168 ((cl:lower-case-p c)
169 (helper (cl:cdr lst) 'lower (cl:cons (cl:char-upcase c) rest)))
170 ((cl:digit-char-p c)
171 (helper (cl:cdr lst) 'digit
172 (cl:case last
173 ((upper lower) (cl:list* c #\- rest))
174 (cl:t (cl:cons c rest)))))
175 ((cl:char-equal c #\_)
176 (helper (cl:cdr lst) '_ (cl:cons #\- rest)))
177 (cl:t
178 (cl:error "Invalid character: ~A" c)))))
179 (cl:let ((fix (cl:case flag
180 ((constant enumvalue) "+")
181 (variable "*")
182 (cl:t ""))))
183 (cl:intern
184 (cl:concatenate
185 'cl:string
186 fix
187 (cl:nreverse (helper (cl:concatenate 'cl:list name) cl:nil cl:nil))
188 fix)
189 package))))))
190
191;;;SWIG wrapper code ends here
192%}
193
194#ifdef __cplusplus
195%typemap(out) SWIGTYPE "$result = new $1_type($1);";
196#else
197%typemap(out) SWIGTYPE {
198 $result = ($&1_ltype) malloc(sizeof($1_type));
199 memmove($result, &$1, sizeof($1_type));
200}
201#endif
202
203//////////////////////////////////////////////////////////////
204
205/* name conversion for overloaded operators. */
206#ifdef __cplusplus
207%rename(__add__) *::operator+;
208%rename(__pos__) *::operator+();
209%rename(__pos__) *::operator+() const;
210
211%rename(__sub__) *::operator-;
212%rename(__neg__) *::operator-() const;
213%rename(__neg__) *::operator-();
214
215%rename(__mul__) *::operator*;
216%rename(__deref__) *::operator*();
217%rename(__deref__) *::operator*() const;
218
219%rename(__div__) *::operator/;
220%rename(__mod__) *::operator%;
221%rename(__logxor__) *::operator^;
222%rename(__logand__) *::operator&;
223%rename(__logior__) *::operator|;
224%rename(__lognot__) *::operator~();
225%rename(__lognot__) *::operator~() const;
226
227%rename(__not__) *::operator!();
228%rename(__not__) *::operator!() const;
229
230%rename(__assign__) *::operator=;
231
232%rename(__add_assign__) *::operator+=;
233%rename(__sub_assign__) *::operator-=;
234%rename(__mul_assign__) *::operator*=;
235%rename(__div_assign__) *::operator/=;
236%rename(__mod_assign__) *::operator%=;
237%rename(__logxor_assign__) *::operator^=;
238%rename(__logand_assign__) *::operator&=;
239%rename(__logior_assign__) *::operator|=;
240
241%rename(__lshift__) *::operator<<;
242%rename(__lshift_assign__) *::operator<<=;
243%rename(__rshift__) *::operator>>;
244%rename(__rshift_assign__) *::operator>>=;
245
246%rename(__eq__) *::operator==;
247%rename(__ne__) *::operator!=;
248%rename(__lt__) *::operator<;
249%rename(__gt__) *::operator>;
250%rename(__lte__) *::operator<=;
251%rename(__gte__) *::operator>=;
252
253%rename(__and__) *::operator&&;
254%rename(__or__) *::operator||;
255
256%rename(__preincr__) *::operator++();
257%rename(__postincr__) *::operator++(int);
258%rename(__predecr__) *::operator--();
259%rename(__postdecr__) *::operator--(int);
260
261%rename(__comma__) *::operator,();
262%rename(__comma__) *::operator,() const;
263
264%rename(__member_ref__) *::operator->;
265%rename(__member_func_ref__) *::operator->*;
266
267%rename(__funcall__) *::operator();
268%rename(__aref__) *::operator[];
269#endif
270
271
272%{
273
274#ifdef __cplusplus
275# define EXTERN extern "C"
276#else
277# define EXTERN extern
278#endif
279
280#define EXPORT EXTERN SWIGEXPORT
281
282#include <string.h>
283#include <stdlib.h>
284%}