mirror of https://github.com/swig/swig
Fix for using more than one std::string_view type in a method
Fixes #2844
This commit is contained in:
parent
3d46896e1a
commit
6226d58065
|
@ -7,6 +7,9 @@ the issue number to the end of the URL: https://github.com/swig/swig/issues/
|
|||
Version 4.3.0 (in progress)
|
||||
===========================
|
||||
|
||||
2024-03-27: wsfulton
|
||||
[Python] #2844 Fix for using more than one std::string_view type in a method.
|
||||
|
||||
2024-03-27: wsfulton
|
||||
[R] #2847 Add missing std::vector<long> and std::vector<long long> typemaps
|
||||
which were missing depending on whether or not SWIGWORDSIZE64 was defined.
|
||||
|
|
|
@ -52,6 +52,9 @@ std::string_view test_reference_input(std::string_view &input) {
|
|||
return input;
|
||||
}
|
||||
|
||||
void test_multiple(std::string_view aa, std::string_view bb, const std::string_view &cc, const std::string_view &dd) {
|
||||
}
|
||||
|
||||
void test_throw() TESTCASE_THROW1(std::string_view){
|
||||
static std::string_view x = "test_throw message";
|
||||
throw x;
|
||||
|
|
|
@ -35,6 +35,8 @@ stringPtr = cpp17_string_view.test_reference_out()
|
|||
|
||||
cpp17_string_view.test_reference(stringPtr)
|
||||
|
||||
cpp17_string_view.test_multiple("fee", "fi", "fo", "fum")
|
||||
|
||||
# Global variables
|
||||
s = "initial string"
|
||||
if cpp17_string_view.ConstGlobalString != "const global string":
|
||||
|
|
|
@ -28,13 +28,13 @@ namespace std {
|
|||
#endif
|
||||
%}
|
||||
|
||||
%typemap(in) string_view (PyObject *bytes = NULL) %{
|
||||
%typemap(in) string_view (PyObject *bytes = NULL) {
|
||||
Py_ssize_t len;
|
||||
#ifdef SWIG_PYTHON_STRICT_BYTE_CHAR
|
||||
%#ifdef SWIG_PYTHON_STRICT_BYTE_CHAR
|
||||
const char *p = PyBytes_AsString($input);
|
||||
if (!p) SWIG_fail;
|
||||
len = PyBytes_Size($input);
|
||||
#else
|
||||
%#else
|
||||
const char *p;
|
||||
if (PyUnicode_Check($input)) {
|
||||
p = SWIG_PyUnicode_AsUTF8AndSize($input, &len, &bytes);
|
||||
|
@ -44,21 +44,21 @@ namespace std {
|
|||
if (!p) SWIG_fail;
|
||||
len = PyBytes_Size($input);
|
||||
}
|
||||
#endif
|
||||
%#endif
|
||||
$1 = std::string_view(p, len);
|
||||
%}
|
||||
}
|
||||
|
||||
%typemap(freearg) string_view %{
|
||||
SWIG_Py_XDECREF(bytes$argnum);
|
||||
%}
|
||||
|
||||
%typemap(in) const string_view & ($*1_ltype temp, PyObject *bytes = NULL) %{
|
||||
%typemap(in) const string_view & ($*1_ltype temp, PyObject *bytes = NULL) {
|
||||
Py_ssize_t len;
|
||||
#ifdef SWIG_PYTHON_STRICT_BYTE_CHAR
|
||||
%#ifdef SWIG_PYTHON_STRICT_BYTE_CHAR
|
||||
const char *p = PyBytes_AsString($input);
|
||||
if (!p) SWIG_fail;
|
||||
len = PyBytes_Size($input);
|
||||
#else
|
||||
%#else
|
||||
const char *p;
|
||||
if (PyUnicode_Check($input)) {
|
||||
p = SWIG_PyUnicode_AsUTF8AndSize($input, &len, &bytes);
|
||||
|
@ -68,10 +68,10 @@ namespace std {
|
|||
if (!p) SWIG_fail;
|
||||
len = PyBytes_Size($input);
|
||||
}
|
||||
#endif
|
||||
%#endif
|
||||
temp = std::string_view(p, len);
|
||||
$1 = &temp;
|
||||
%}
|
||||
}
|
||||
|
||||
%typemap(freearg) const string_view & %{
|
||||
SWIG_Py_XDECREF(bytes$argnum);
|
||||
|
|
Loading…
Reference in New Issue