PageRenderTime 62ms CodeModel.GetById 44ms app.highlight 16ms RepoModel.GetById 0ms app.codeStats 0ms

/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%}