]>
Commit | Line | Data |
---|---|---|
1b8c7ba6 RD |
1 | |
2 | ||
214c4fbe RD |
3 | //---------------------------------------------------------------------- |
4 | ||
5 | // The standard t_output_helper has been changed to return a list rather than | |
6 | // a tuple, we'll replace it with the old implementation here. In SWIG 1.3.27 | |
8f146d6b RD |
7 | // and earlier it is implemented as a $fragment, so it is only inserted into |
8 | // the modules that need it. For SWIG 1.3.28+ we just need to add a -D on the | |
9 | // compile command line to turn on the tuple version of the AppendOuput | |
10 | // function. | |
214c4fbe RD |
11 | #if SWIG_VERSION < 0x010328 |
12 | %fragment("t_output_helper","header") | |
13 | %{ | |
14 | static PyObject* t_output_helper(PyObject* result, PyObject* obj) | |
15 | { | |
16 | PyObject* o2; | |
17 | PyObject* o3; | |
18 | if (!result) { | |
19 | result = obj; | |
20 | } else if (result == Py_None) { | |
21 | Py_DECREF(result); | |
22 | result = obj; | |
23 | } else { | |
24 | if (!PyTuple_Check(result)) { | |
25 | o2 = result; | |
26 | result = PyTuple_New(1); | |
27 | PyTuple_SET_ITEM(result, 0, o2); | |
28 | } | |
29 | o3 = PyTuple_New(1); | |
30 | PyTuple_SetItem(o3, 0, obj); | |
31 | o2 = result; | |
32 | result = PySequence_Concat(o2, o3); | |
33 | Py_DECREF(o2); | |
34 | Py_DECREF(o3); | |
35 | } | |
36 | return result; | |
80739955 | 37 | } |
80739955 RD |
38 | %} |
39 | ||
214c4fbe RD |
40 | #endif |
41 | ||
42 | ||
80739955 RD |
43 | |
44 | ||
214c4fbe | 45 | //---------------------------------------------------------------------- |
0190c472 RD |
46 | // These fragments are inserted in modules that need to convert PyObjects to |
47 | // integer values, my versions allow any numeric type to be used, as long as | |
48 | // it can be converted to a PyInt. (Specifically, I allow floats where the | |
49 | // default SWIG_AsVal_long would just raise an exception. | |
50 | // | |
0190c472 | 51 | |
214c4fbe | 52 | #if SWIG_VERSION < 0x010328 |
0190c472 RD |
53 | |
54 | %fragment(SWIG_AsVal_frag(long), "header") { | |
1b8c7ba6 | 55 | SWIGINTERN int |
0190c472 RD |
56 | SWIG_AsVal(long)(PyObject* obj, long* val) |
57 | { | |
58 | if (PyNumber_Check(obj)) { | |
59 | if (val) *val = PyInt_AsLong(obj); | |
60 | return 1; | |
61 | } | |
62 | else { | |
214c4fbe | 63 | SWIG_Python_TypeError("number", obj); |
0190c472 RD |
64 | } |
65 | return 0; | |
66 | } | |
67 | } | |
68 | ||
69 | ||
70 | %fragment(SWIG_AsVal_frag(unsigned long), "header", | |
71 | fragment=SWIG_AsVal_frag(long)) { | |
1b8c7ba6 | 72 | SWIGINTERN int |
0190c472 RD |
73 | SWIG_AsVal(unsigned long)(PyObject* obj, unsigned long* val) |
74 | { | |
75 | long v = 0; | |
76 | if (SWIG_AsVal_long(obj, &v) && v < 0) { | |
214c4fbe | 77 | SWIG_Python_TypeError("unsigned number", obj); |
0190c472 RD |
78 | } |
79 | else if (val) | |
80 | *val = (unsigned long)v; | |
81 | return 1; | |
82 | } | |
83 | } | |
84 | ||
85 | ||
86 | %fragment(SWIG_AsVal_frag(double), "header") { | |
1b8c7ba6 | 87 | SWIGINTERN int |
0190c472 RD |
88 | SWIG_AsVal(double)(PyObject *obj, double* val) |
89 | { | |
90 | if (PyNumber_Check(obj)) { | |
91 | if (val) *val = PyFloat_AsDouble(obj); | |
92 | return 1; | |
93 | } | |
94 | else { | |
214c4fbe | 95 | SWIG_Python_TypeError("number", obj); |
0190c472 RD |
96 | } |
97 | return 0; | |
98 | } | |
99 | } | |
214c4fbe RD |
100 | |
101 | ||
102 | #else // SWIG_VERSION >= 1.3.28 | |
103 | ||
104 | %fragment(SWIG_AsVal_frag(long), "header") { | |
105 | SWIGINTERN int | |
106 | SWIG_AsVal(long)(PyObject* obj, long* val) | |
107 | { | |
108 | if (PyNumber_Check(obj)) { | |
109 | if (val) *val = PyInt_AsLong(obj); | |
110 | return SWIG_OK; | |
111 | } | |
112 | return SWIG_TypeError; | |
113 | } | |
114 | } | |
115 | ||
116 | ||
117 | %fragment(SWIG_AsVal_frag(unsigned long), "header", | |
118 | fragment=SWIG_AsVal_frag(long)) { | |
119 | SWIGINTERN int | |
120 | SWIG_AsVal(unsigned long)(PyObject* obj, unsigned long* val) | |
121 | { | |
122 | long v = 0; | |
123 | if (SWIG_AsVal_long(obj, &v) && v < 0) { | |
124 | return SWIG_TypeError; | |
125 | } | |
126 | else if (val) | |
127 | *val = (unsigned long)v; | |
128 | return SWIG_OK; | |
129 | } | |
130 | } | |
131 | ||
132 | ||
133 | %fragment(SWIG_AsVal_frag(double), "header") { | |
134 | SWIGINTERN int | |
135 | SWIG_AsVal(double)(PyObject *obj, double* val) | |
136 | { | |
137 | if (PyNumber_Check(obj)) { | |
138 | if (val) *val = PyFloat_AsDouble(obj); | |
139 | return SWIG_OK; | |
140 | } | |
141 | return SWIG_TypeError; | |
142 | } | |
143 | } | |
144 | ||
145 | ||
146 | #endif // SWIG_VERSION |