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