1
/* ------------------------------------------------------------
3
* ------------------------------------------------------------ */
6
Define the SWIGAs/From methods for the basic types. In many
7
cases, these method are just aliases of the original python As/From
8
methods. In the other cases, some extra work is needed.
13
SWIG_define(SWIG_From(signed char), PyInt_FromLong)
14
SWIG_define(SWIG_From(unsigned char), PyInt_FromLong)
15
SWIG_define(SWIG_From(short), PyInt_FromLong)
16
SWIG_define(SWIG_From(unsigned short), PyInt_FromLong)
17
SWIG_define(SWIG_From(int), PyInt_FromLong)
18
SWIG_define(SWIG_From(long), PyInt_FromLong)
19
SWIG_define(SWIG_From(float), PyFloat_FromDouble)
20
SWIG_define(SWIG_From(double), PyFloat_FromDouble)
23
%fragment("<limits.h>","header") %{
27
%fragment(SWIG_AsVal_frag(unsigned long),"header") {
29
SWIG_AsVal(unsigned long)(PyObject * obj, unsigned long *val)
31
if (PyInt_Check(obj)) {
32
long v = PyInt_AS_LONG(obj);
38
if (PyLong_Check(obj)) {
39
unsigned long v = PyLong_AsUnsignedLong(obj);
40
if (!PyErr_Occurred()) {
44
if (!val) PyErr_Clear();
49
PyErr_SetString(PyExc_TypeError, "an unsigned long is expected");
55
%fragment("SWIG_CheckLongInRange","header",
56
fragment="<limits.h>") {
58
SWIG_CheckLongInRange(long value, long min_value, long max_value,
61
if (value < min_value) {
63
PyErr_Format(PyExc_OverflowError,
64
"value %ld is less than '%s' minimum %ld",
65
value, errmsg, min_value);
68
} else if (value > max_value) {
70
PyErr_Format(PyExc_OverflowError,
71
"value %ld is greater than '%s' maximum %ld",
72
value, errmsg, max_value);
80
%fragment("SWIG_CheckUnsignedLongInRange","header",
81
fragment="<limits.h>") {
83
SWIG_CheckUnsignedLongInRange(unsigned long value,
84
unsigned long max_value,
87
if (value > max_value) {
89
PyErr_Format(PyExc_OverflowError,
90
"value %ld is greater than '%s' minimum %ld",
91
value, errmsg, max_value);
100
%fragment(SWIG_AsVal_frag(double),"header") {
101
SWIGSTATICINLINE(int)
102
SWIG_AsVal(double)(PyObject *obj, double *val)
104
if (PyFloat_Check(obj)) {
105
if (val) *val = PyFloat_AS_DOUBLE(obj);
108
if (PyInt_Check(obj)) {
109
if (val) *val = PyInt_AS_LONG(obj);
112
if (PyLong_Check(obj)) {
113
double v = PyLong_AsDouble(obj);
114
if (!PyErr_Occurred()) {
118
if (!val) PyErr_Clear();
123
PyErr_SetString(PyExc_TypeError, "a double is expected");
129
%fragment(SWIG_AsVal_frag(long),"header") {
130
SWIGSTATICINLINE(int)
131
SWIG_AsVal(long)(PyObject * obj, long* val)
133
if (PyInt_Check(obj)) {
134
if (val) *val = PyInt_AS_LONG(obj);
137
if (PyLong_Check(obj)) {
138
long v = PyLong_AsLong(obj);
139
if (!PyErr_Occurred()) {
143
if (!val) PyErr_Clear();
148
PyErr_SetString(PyExc_TypeError, "a long is expected");
155
%fragment(SWIG_From_frag(long long),"header",
156
fragment="<limits.h>") {
157
SWIGSTATICINLINE(PyObject* )
158
SWIG_From(long long)(long long value)
160
return ((value < LONG_MIN) || (value > LONG_MAX)) ?
161
PyLong_FromLongLong(value)
162
: PyInt_FromLong(swig_numeric_cast(value,long));
167
%fragment(SWIG_From_frag(unsigned long long),"header",
168
fragment="<limits.h>") {
169
SWIGSTATICINLINE(PyObject* )
170
SWIG_From(unsigned long long)(unsigned long long value)
172
return (value > LONG_MAX) ?
173
PyLong_FromUnsignedLongLong(value) :
174
PyInt_FromLong(swig_numeric_cast(value,long));
178
%fragment(SWIG_AsVal_frag(long long),"header") {
179
SWIGSTATICINLINE(int)
180
SWIG_AsVal(long long)(PyObject *obj, long long *val)
182
if (PyLong_Check(obj)) {
183
long long v = PyLong_AsLongLong(obj);
184
if (!PyErr_Occurred()) {
188
if (!val) PyErr_Clear();
192
if (PyInt_Check(obj)) {
193
if (val) *val = PyInt_AS_LONG(obj);
197
PyErr_SetString(PyExc_TypeError, "a long long is expected");
203
%fragment(SWIG_AsVal_frag(unsigned long long),"header",
204
fragment=SWIG_AsVal_frag(unsigned long)) {
205
SWIGSTATICINLINE(int)
206
SWIG_AsVal(unsigned long long)(PyObject *obj, unsigned long long *val)
208
if (PyLong_Check(obj)) {
209
unsigned long long v = PyLong_AsUnsignedLongLong(obj);
210
if (!PyErr_Occurred()) {
214
if (!val) PyErr_Clear();
219
if (SWIG_AsVal(unsigned long)(obj,&v)) {
226
PyErr_SetString(PyExc_TypeError, "an unsigned long long is expected");
232
%fragment(SWIG_From_frag(unsigned long),"header") {
233
SWIGSTATICINLINE(PyObject* )
234
SWIG_From(unsigned long)(unsigned long value)
236
return (value > LONG_MAX) ?
237
PyLong_FromUnsignedLong(value)
238
: PyInt_FromLong(swig_numeric_cast(value,long));
242
%fragment(SWIG_AsVal_frag(signed char),"header",
243
fragment="SWIG_CheckLongInRange",
244
fragment=SWIG_AsVal_frag(long)) {
245
SWIGSTATICINLINE(int)
246
SWIG_AsVal(signed char)(PyObject *obj, signed char *val)
248
const char* errmsg = val ? "signed char" : 0;
250
if (SWIG_AsVal(long)(obj, &v)) {
251
if (SWIG_CheckLongInRange(v, SCHAR_MIN, SCHAR_MAX, errmsg)) {
252
if (val) *val = swig_numeric_cast(v, signed char);
261
PyErr_SetString(PyExc_TypeError, "a signed char is expected");
267
%fragment(SWIG_AsVal_frag(short),"header",
268
fragment="SWIG_CheckLongInRange",
269
fragment=SWIG_AsVal_frag(long)) {
270
SWIGSTATICINLINE(int)
271
SWIG_AsVal(short)(PyObject *obj, short *val)
273
const char* errmsg = val ? "short" : 0;
275
if (SWIG_AsVal(long)(obj, &v)) {
276
if (SWIG_CheckLongInRange(v, SHRT_MIN, SHRT_MAX, errmsg)) {
277
if (val) *val = swig_numeric_cast(v, short);
286
PyErr_SetString(PyExc_TypeError, "a short is expected");
292
/* need range checks */
294
%fragment(SWIG_AsVal_frag(int),"header",
295
fragment="SWIG_CheckLongInRange",
296
fragment=SWIG_AsVal_frag(long)) {
297
%#if INT_MAX != LONG_MAX
298
SWIGSTATICINLINE(int)
299
SWIG_AsVal(int)(PyObject *obj, int *val)
301
const char* errmsg = val ? "int" : 0;
303
if (SWIG_AsVal(long)(obj, &v)) {
304
if (SWIG_CheckLongInRange(v, INT_MIN,INT_MAX, errmsg)) {
305
if (val) *val = swig_numeric_cast(v, int);
314
PyErr_SetString(PyExc_TypeError, "an int is expected");
319
SWIGSTATICINLINE(int)
320
SWIG_AsVal(int)(PyObject *obj, int *val)
322
return SWIG_AsVal(long)(obj,(long*)val);
327
%fragment(SWIG_AsVal_frag(unsigned int),"header",
328
fragment="SWIG_CheckUnsignedLongInRange",
329
fragment=SWIG_AsVal_frag(unsigned long)) {
330
%#if UINT_MAX != ULONG_MAX
331
SWIGSTATICINLINE(int)
332
SWIG_AsVal(unsigned int)(PyObject *obj, unsigned int *val)
334
const char* errmsg = val ? "unsigned int" : 0;
336
if (SWIG_AsVal(unsigned long)(obj, &v)) {
337
if (SWIG_CheckUnsignedLongInRange(v, INT_MAX, errmsg)) {
338
if (val) *val = swig_numeric_cast(v, unsigned int);
345
PyErr_SetString(PyExc_TypeError, "an unsigned int is expected");
350
SWIGSTATICINLINE(unsigned int)
351
SWIG_AsVal(unsigned int)(PyObject *obj, unsigned int *val)
353
return SWIG_AsVal(unsigned long)(obj,(unsigned long *)val);
358
%fragment(SWIG_From_frag(unsigned int),"header",
359
fragment=SWIG_From_frag(long),
360
fragment=SWIG_From_frag(unsigned long)) {
361
%#if UINT_MAX < LONG_MAX
362
SWIG_define(SWIG_From(unsigned int), SWIG_From(long))
364
SWIG_define(SWIG_From(unsigned int), SWIG_From(unsigned long))
368
%fragment(SWIG_AsVal_frag(unsigned char),"header",
369
fragment=SWIG_AsVal_frag(unsigned long),
370
fragment="SWIG_CheckUnsignedLongInRange") {
371
SWIGSTATICINLINE(int)
372
SWIG_AsVal(unsigned char)(PyObject *obj, unsigned char *val)
374
const char* errmsg = val ? "unsigned char" : 0;
376
if (SWIG_AsVal(unsigned long)(obj, &v)) {
377
if (SWIG_CheckUnsignedLongInRange(v, UCHAR_MAX,errmsg)) {
378
if (val) *val = swig_numeric_cast(v, unsigned char);
387
PyErr_SetString(PyExc_TypeError, "an unsigned char is expected");
393
%fragment(SWIG_AsVal_frag(unsigned short),"header",
394
fragment="SWIG_CheckUnsignedLongInRange",
395
fragment=SWIG_AsVal_frag(unsigned long)) {
396
SWIGSTATICINLINE(int)
397
SWIG_AsVal(unsigned short)(PyObject *obj, unsigned short *val)
399
const char* errmsg = val ? "unsigned short" : 0;
401
if (SWIG_AsVal(unsigned long)(obj, &v)) {
402
if (SWIG_CheckUnsignedLongInRange(v, USHRT_MAX, errmsg)) {
403
if (val) *val = swig_numeric_cast(v, unsigned short);
412
PyErr_SetString(PyExc_TypeError, "an unsigned short is expected");
419
%fragment("SWIG_CheckDoubleInRange","header") {
421
SWIGSTATICINLINE(int)
422
SWIG_CheckDoubleInRange(double value, double min_value,
423
double max_value, const char* errmsg)
425
if (value < min_value) {
427
PyErr_Format(PyExc_OverflowError,
428
"value %g is less than %s minimum %g",
429
value, errmsg, min_value);
432
} else if (value > max_value) {
434
PyErr_Format(PyExc_OverflowError,
435
"value %g is greater than %s maximum %g",
436
value, errmsg, max_value);
444
%fragment(SWIG_AsVal_frag(float),"header",
445
fragment="SWIG_CheckDoubleInRange",
446
fragment=SWIG_AsVal_frag(double)) {
447
SWIGSTATICINLINE(int)
448
SWIG_AsVal(float)(PyObject *obj, float *val)
450
const char* errmsg = val ? "float" : 0;
452
if (SWIG_AsVal(double)(obj, &v)) {
453
if (SWIG_CheckDoubleInRange(v, -FLT_MAX, FLT_MAX, errmsg)) {
463
PyErr_SetString(PyExc_TypeError, "a float is expected");
469
%fragment(SWIG_From_frag(char),"header") {
470
SWIGSTATICINLINE(PyObject*)
471
SWIG_From(char)(char c)
473
return PyString_FromStringAndSize(&c,1);
477
%fragment(SWIG_AsVal_frag(char),"header",
478
fragment="SWIG_AsCharArray",
479
fragment="SWIG_CheckLongInRange",
480
fragment=SWIG_AsVal_frag(long)) {
481
SWIGSTATICINLINE(int)
482
SWIG_AsVal(char)(PyObject *obj, char *val)
484
const char* errmsg = val ? "char" : 0;
486
if (SWIG_AsVal(long)(obj, &v)) {
487
if (SWIG_CheckLongInRange(v, CHAR_MIN,CHAR_MAX, errmsg)) {
495
return SWIG_AsCharArray(obj, val, 1);
500
%fragment(SWIG_From_frag(wchar_t),"header") {
501
SWIGSTATICINLINE(PyObject*)
502
SWIG_From(wchar_t)(wchar_t c)
504
return PyUnicode_FromWideChar(&c, 1);
508
%fragment(SWIG_AsVal_frag(wchar_t),"header",
509
fragment="SWIG_AsWCharArray",
510
fragment="SWIG_CheckLongInRange",
511
fragment=SWIG_AsVal_frag(long)) {
513
SWIGSTATICINLINE(int)
514
SWIG_AsVal(wchar_t)(PyObject *obj, wchar_t *val)
516
const char* errmsg = val ? "wchar_t" : 0;
518
if (SWIG_AsVal(long)(obj, &v)) {
519
if (SWIG_CheckLongInRange(v, WCHAR_MIN, WCHAR_MAX, errmsg)) {
527
return SWIG_AsWCharArray(obj, val, 1);
532
%fragment(SWIG_From_frag(bool),"header") {
533
SWIGSTATICINLINE(PyObject*)
534
SWIG_From(bool)(bool value)
536
PyObject *obj = value ? Py_True : Py_False;
542
%fragment(SWIG_AsVal_frag(bool),"header",
543
fragment=SWIG_AsVal_frag(int)) {
544
SWIGSTATICINLINE(int)
545
SWIG_AsVal(bool)(PyObject *obj, bool *val)
547
/* if (val) *val = PyObject_IsTrue(obj); return 1; */
548
if (obj == Py_True) {
549
if (val) *val = true;
552
if (obj == Py_False) {
553
if (val) *val = false;
557
if (SWIG_AsVal(int)(obj, &res)) {
558
if (val) *val = (bool)res;
562
PyErr_SetString(PyExc_TypeError, "a bool is expected");
569
/* ------------------------------------------------------------
570
* typemap for primitive type with no pointer representation
571
* ------------------------------------------------------------ */
573
%define %typemap_primitive(Code, ...)
574
%typemap_asvalfromn(SWIG_arg(Code), __VA_ARGS__);
579
/* ------------------------------------------------------------
580
* Primitive Type Macros
581
* ------------------------------------------------------------ */
583
/* useful macros to derive typemap declarations from primitive types */
585
%define _apply_macro(macro, arg, ...)
586
#if #__VA_ARGS__ != ""
587
macro(__VA_ARGS__,arg);
593
/* Apply macro to the order types */
594
%define %apply_ctypes(Macro,...)
595
_apply_macro(Macro, bool , __VA_ARGS__);
596
_apply_macro(Macro, signed char , __VA_ARGS__);
597
_apply_macro(Macro, unsigned char , __VA_ARGS__);
598
_apply_macro(Macro, short , __VA_ARGS__);
599
_apply_macro(Macro, unsigned short , __VA_ARGS__);
600
_apply_macro(Macro, int , __VA_ARGS__);
601
_apply_macro(Macro, unsigned int , __VA_ARGS__);
602
_apply_macro(Macro, long , __VA_ARGS__);
603
_apply_macro(Macro, unsigned long , __VA_ARGS__);
604
_apply_macro(Macro, long long , __VA_ARGS__);
605
_apply_macro(Macro, unsigned long long , __VA_ARGS__);
606
_apply_macro(Macro, float , __VA_ARGS__);
607
_apply_macro(Macro, double , __VA_ARGS__);
608
_apply_macro(Macro, char , __VA_ARGS__);
609
_apply_macro(Macro, wchar_t , __VA_ARGS__);
612
/* apply the Macro(Type) to all the C++ types */
613
%define %apply_cpptypes(Macro,...)
614
%apply_ctypes(Macro, __VA_ARGS__)
615
_apply_macro(Macro, std::string, __VA_ARGS__);
616
_apply_macro(Macro, std::complex<float> , __VA_ARGS__);
617
_apply_macro(Macro, std::complex<double> , __VA_ARGS__);
620
/* apply the Macro2(Type1, Type2) to all the C++ types */
621
%define %apply_cpptypes_2(Macro2)
622
%apply_cpptypes(%apply_cpptypes, Macro2)
625
%define %apply_checkctypes(Macro)
626
Macro(SWIG_CCode(BOOL), bool);
627
Macro(SWIG_CCode(INT8), signed char);
628
Macro(SWIG_CCode(UINT8), unsigned char);
629
Macro(SWIG_CCode(INT16), short);
630
Macro(SWIG_CCode(UINT16), unsigned short);
631
Macro(SWIG_CCode(INT32), int);
632
Macro(SWIG_CCode(UINT32), unsigned int);
633
Macro(SWIG_CCode(INT64), long);
634
Macro(SWIG_CCode(UINT64), unsigned long);
635
Macro(SWIG_CCode(INT128), long long);
636
Macro(SWIG_CCode(UINT128), unsigned long long);
637
Macro(SWIG_CCode(FLOAT), float);
638
Macro(SWIG_CCode(DOUBLE), double);
639
Macro(SWIG_CCode(CHAR), char);
640
Macro(SWIG_CCode(UNICHAR), wchar_t);
643
/* ------------------------------------------------------------
644
* Apply the primitive typemap for all the types with checkcode
645
* ------------------------------------------------------------ */
647
%apply_checkctypes(%typemap_primitive)