|
19 | 19 | */ |
20 | 20 |
|
21 | 21 |
|
| 22 | +// Macro to add mp_ass_subscript slot and functions |
| 23 | +%define MP_ASS_SUBSCRIPT(type, item_type, setfunc, delfunc) |
| 24 | +// Use %inline so SWIG generates wrappers with type conversions. |
| 25 | +// Names start with '_' so it's invisible in normal use. |
| 26 | +%noexception __setitem__%mangle(type); |
| 27 | +%noexception __delitem__%mangle(type); |
| 28 | +%inline %{ |
| 29 | +static PyObject* __setitem__%mangle(type)( |
| 30 | + type* self, char* key, item_type value) { |
| 31 | + setfunc; |
| 32 | + return SWIG_Py_Void(); |
| 33 | +}; |
| 34 | +static PyObject* __delitem__%mangle(type)(type* self, char* key) { |
| 35 | + delfunc; |
| 36 | + return SWIG_Py_Void(); |
| 37 | +}; |
| 38 | +%} |
| 39 | +%fragment("__setitem__"{type}, "header") { |
| 40 | +extern "C" { |
| 41 | +static PyObject* _wrap___setitem__%mangle(type)(PyObject*, PyObject*); |
| 42 | +static PyObject* _wrap___delitem__%mangle(type)(PyObject*, PyObject*); |
| 43 | +} |
| 44 | +static int __setitem__%mangle(type)_closure( |
| 45 | + PyObject* self, PyObject* key, PyObject* value) { |
| 46 | + PyObject* args; |
| 47 | + PyObject* result; |
| 48 | + if (value) { |
| 49 | + args = Py_BuildValue("(OOO)", self, key, value); |
| 50 | + result = _wrap___setitem__%mangle(type)(self, args); |
| 51 | + } else { |
| 52 | + args = Py_BuildValue("(OO)", self, key); |
| 53 | + result = _wrap___delitem__%mangle(type)(self, args); |
| 54 | + } |
| 55 | + Py_DECREF(args); |
| 56 | + if (!result) |
| 57 | + return -1; |
| 58 | + Py_DECREF(result); |
| 59 | + return 0; |
| 60 | +}; |
| 61 | +} |
| 62 | +%fragment("__setitem__"{type}); |
| 63 | +%feature("python:mp_ass_subscript") type QUOTE(__setitem__%mangle(type)_closure); |
| 64 | +%enddef // MP_ASS_SUBSCRIPT |
| 65 | + |
| 66 | + |
22 | 67 | // Macro to add mp_subscript slot and functions |
23 | 68 | %define MP_SUBSCRIPT(type, item_type, func) |
24 | 69 | // Use %inline so SWIG generates a wrapper with type conversions. |
@@ -50,16 +95,17 @@ static PyObject* __getitem__%mangle(type)_closure( |
50 | 95 | %define SQ_ASS_ITEM(type, item_type, setfunc, delfunc) |
51 | 96 | // Use %inline so SWIG generates wrappers with type conversions. |
52 | 97 | // Names start with '_' so it's invisible in normal use. |
53 | | -%noexception __setitem__%mangle(Exiv2::ValueType<item_type>); |
54 | | -%noexception __delitem__%mangle(Exiv2::ValueType<item_type>); |
| 98 | +%noexception __setitem__%mangle(type); |
| 99 | +%noexception __delitem__%mangle(type); |
55 | 100 | %inline %{ |
56 | | -static void __setitem__%mangle(Exiv2::ValueType<item_type>)( |
57 | | - Exiv2::ValueType<item_type>* self, size_t idx, item_type value) { |
| 101 | +static PyObject* __setitem__%mangle(type)( |
| 102 | + type* self, size_t idx, item_type value) { |
58 | 103 | setfunc; |
| 104 | + return SWIG_Py_Void(); |
59 | 105 | }; |
60 | | -static void __delitem__%mangle(Exiv2::ValueType<item_type>)( |
61 | | - Exiv2::ValueType<item_type>* self, size_t idx) { |
| 106 | +static PyObject* __delitem__%mangle(type)(type* self, size_t idx) { |
62 | 107 | delfunc; |
| 108 | + return SWIG_Py_Void(); |
63 | 109 | }; |
64 | 110 | %} |
65 | 111 | %fragment("__setitem__"{type}, "header") { |
|
0 commit comments