diff options
author | William S Fulton <wsf@fultondesigns.co.uk> | 2018-01-04 07:00:26 +0000 |
---|---|---|
committer | William S Fulton <wsf@fultondesigns.co.uk> | 2018-01-04 07:00:26 +0000 |
commit | cd9b7c3c34def07db975a2b706e425afc6500adb (patch) | |
tree | 569db5d665504a4d06d381f43adcd8914d78bf69 /Lib/octave | |
parent | 0beec3cf7306d7b9d6fe771012bb9421877a9a82 (diff) | |
download | swig-cd9b7c3c34def07db975a2b706e425afc6500adb.tar.gz |
std_basic_string.i fixes
- Remove python code from octave's std_basic_string.i
- Correctly return an error to fix error handling when using std::basic_string in
overloaded methods - issue #1171.
Diffstat (limited to 'Lib/octave')
-rw-r--r-- | Lib/octave/std_basic_string.i | 47 |
1 files changed, 11 insertions, 36 deletions
diff --git a/Lib/octave/std_basic_string.i b/Lib/octave/std_basic_string.i index 19712e8d0..01a2c34a2 100644 --- a/Lib/octave/std_basic_string.i +++ b/Lib/octave/std_basic_string.i @@ -10,24 +10,20 @@ %fragment(SWIG_AsPtr_frag(std::basic_string<char>),"header", fragment="SWIG_AsCharPtrAndSize") { SWIGINTERN int -SWIG_AsPtr(std::basic_string<char>)(octave_value obj, std::string **val) -{ +SWIG_AsPtr(std::basic_string<char>)(octave_value obj, std::string **val) { if (obj.is_string()) { if (val) *val = new std::string(obj.string_value()); return SWIG_NEWOBJ; } - if (val) - error("a string is expected"); - return 0; + return SWIG_ERROR; } } %fragment(SWIG_From_frag(std::basic_string<char>),"header", fragment="SWIG_FromCharPtrAndSize") { SWIGINTERNINLINE octave_value - SWIG_From(std::basic_string<char>)(const std::string& s) - { + SWIG_From(std::basic_string<char>)(const std::string& s) { return SWIG_FromCharPtrAndSize(s.data(), s.size()); } } @@ -45,41 +41,20 @@ SWIGINTERNINLINE octave_value %fragment(SWIG_AsPtr_frag(std::basic_string<wchar_t>),"header", fragment="SWIG_AsWCharPtrAndSize") { SWIGINTERN int - SWIG_AsPtr(std::basic_string<wchar_t>)(PyObject* obj, std::wstring **val) - { - static swig_type_info* string_info = - SWIG_TypeQuery("std::basic_string<wchar_t> *"); - std::wstring *vptr; - if (SWIG_ConvertPtr(obj, (void**)&vptr, string_info, 0) == SWIG_OK) { - if (val) *val = vptr; - return SWIG_OLDOBJ; - } else { - PyErr_Clear(); - wchar_t *buf = 0 ; size_t size = 0; int alloc = 0; - if (SWIG_AsWCharPtrAndSize(obj, &buf, &size, &alloc) == SWIG_OK) { - if (buf) { - if (val) *val = new std::wstring(buf, size - 1); - if (alloc == SWIG_NEWOBJ) %delete_array(buf); - return SWIG_NEWOBJ; - } - } else { - PyErr_Clear(); - } - if (val) { - SWIG_PYTHON_THREAD_BEGIN_BLOCK; - PyErr_SetString(PyExc_TypeError,"a wstring is expected"); - SWIG_PYTHON_THREAD_END_BLOCK; - } - return 0; - } +SWIG_AsPtr(std::basic_string<wchar_t>)(octave_value obj, std::wstring **val) { + if (obj.is_string()) { + if (val) + *val = new std::wstring(obj.string_value()); + return SWIG_NEWOBJ; } + return SWIG_ERROR; +} } %fragment(SWIG_From_frag(std::basic_string<wchar_t>),"header", fragment="SWIG_FromWCharPtrAndSize") { SWIGINTERNINLINE PyObject* - SWIG_From(std::basic_string<wchar_t>)(const std::wstring& s) - { + SWIG_From(std::basic_string<wchar_t>)(const std::wstring& s) { return SWIG_FromWCharPtrAndSize(s.data(), s.size()); } } |