parent
5dd538ded0
commit
ae2cdde4d2
|
@ -61,6 +61,16 @@ typedef gint pyg_flags_type;
|
||||||
typedef guint pyg_flags_type;
|
typedef guint pyg_flags_type;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if PY_VERSION_HEX >= 0x03000000
|
||||||
|
#define string_check PyUnicode_Check
|
||||||
|
#define string_from_python PyUnicode_AsUTF8
|
||||||
|
#define string_to_python PyUnicode_FromString
|
||||||
|
#else
|
||||||
|
#define string_check PyString_Check
|
||||||
|
#define string_from_python PyString_AsString
|
||||||
|
#define string_to_python PyString_FromString
|
||||||
|
#endif
|
||||||
|
|
||||||
%}
|
%}
|
||||||
|
|
||||||
%init %{
|
%init %{
|
||||||
|
@ -117,7 +127,7 @@ typedef guint pyg_flags_type;
|
||||||
auto log_obj = SWIG_NewPointerObj(
|
auto log_obj = SWIG_NewPointerObj(
|
||||||
SWIG_as_voidptr(loglevel), SWIGTYPE_p_sigrok__LogLevel, 0);
|
SWIG_as_voidptr(loglevel), SWIGTYPE_p_sigrok__LogLevel, 0);
|
||||||
|
|
||||||
auto string_obj = PyString_FromString(message.c_str());
|
auto string_obj = string_to_python(message.c_str());
|
||||||
|
|
||||||
auto arglist = Py_BuildValue("(OO)", log_obj, string_obj);
|
auto arglist = Py_BuildValue("(OO)", log_obj, string_obj);
|
||||||
|
|
||||||
|
@ -298,12 +308,12 @@ std::map<std::string, std::string> dict_to_map_string(PyObject *dict)
|
||||||
Py_ssize_t pos = 0;
|
Py_ssize_t pos = 0;
|
||||||
|
|
||||||
while (PyDict_Next(dict, &pos, &py_key, &py_value)) {
|
while (PyDict_Next(dict, &pos, &py_key, &py_value)) {
|
||||||
if (!PyString_Check(py_key))
|
if (!string_check(py_key))
|
||||||
throw sigrok::Error(SR_ERR_ARG);
|
throw sigrok::Error(SR_ERR_ARG);
|
||||||
if (!PyString_Check(py_value))
|
if (!string_check(py_value))
|
||||||
throw sigrok::Error(SR_ERR_ARG);
|
throw sigrok::Error(SR_ERR_ARG);
|
||||||
auto key = PyString_AsString(py_key);
|
auto key = string_from_python(py_key);
|
||||||
auto value = PyString_AsString(py_value);
|
auto value = string_from_python(py_value);
|
||||||
output[key] = value;
|
output[key] = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -319,8 +329,8 @@ Glib::VariantBase python_to_variant_by_key(PyObject *input, const sigrok::Config
|
||||||
return Glib::Variant<guint64>::create(PyInt_AsLong(input));
|
return Glib::Variant<guint64>::create(PyInt_AsLong(input));
|
||||||
if (type == SR_T_UINT64 && PyLong_Check(input))
|
if (type == SR_T_UINT64 && PyLong_Check(input))
|
||||||
return Glib::Variant<guint64>::create(PyLong_AsLong(input));
|
return Glib::Variant<guint64>::create(PyLong_AsLong(input));
|
||||||
else if (type == SR_T_STRING && PyString_Check(input))
|
else if (type == SR_T_STRING && string_check(input))
|
||||||
return Glib::Variant<Glib::ustring>::create(PyString_AsString(input));
|
return Glib::Variant<Glib::ustring>::create(string_from_python(input));
|
||||||
else if (type == SR_T_BOOL && PyBool_Check(input))
|
else if (type == SR_T_BOOL && PyBool_Check(input))
|
||||||
return Glib::Variant<bool>::create(input == Py_True);
|
return Glib::Variant<bool>::create(input == Py_True);
|
||||||
else if (type == SR_T_FLOAT && PyFloat_Check(input))
|
else if (type == SR_T_FLOAT && PyFloat_Check(input))
|
||||||
|
@ -341,8 +351,8 @@ Glib::VariantBase python_to_variant_by_option(PyObject *input,
|
||||||
return Glib::Variant<guint64>::create(PyInt_AsLong(input));
|
return Glib::Variant<guint64>::create(PyInt_AsLong(input));
|
||||||
if (type == G_VARIANT_TYPE_UINT64 && PyLong_Check(input))
|
if (type == G_VARIANT_TYPE_UINT64 && PyLong_Check(input))
|
||||||
return Glib::Variant<guint64>::create(PyLong_AsLong(input));
|
return Glib::Variant<guint64>::create(PyLong_AsLong(input));
|
||||||
else if (type == G_VARIANT_TYPE_STRING && PyString_Check(input))
|
else if (type == G_VARIANT_TYPE_STRING && string_check(input))
|
||||||
return Glib::Variant<Glib::ustring>::create(PyString_AsString(input));
|
return Glib::Variant<Glib::ustring>::create(string_from_python(input));
|
||||||
else if (type == G_VARIANT_TYPE_BOOLEAN && PyBool_Check(input))
|
else if (type == G_VARIANT_TYPE_BOOLEAN && PyBool_Check(input))
|
||||||
return Glib::Variant<bool>::create(input == Py_True);
|
return Glib::Variant<bool>::create(input == Py_True);
|
||||||
else if (type == G_VARIANT_TYPE_DOUBLE && PyFloat_Check(input))
|
else if (type == G_VARIANT_TYPE_DOUBLE && PyFloat_Check(input))
|
||||||
|
@ -366,9 +376,9 @@ std::map<std::string, Glib::VariantBase> dict_to_map_options(PyObject *dict,
|
||||||
Py_ssize_t pos = 0;
|
Py_ssize_t pos = 0;
|
||||||
|
|
||||||
while (PyDict_Next(dict, &pos, &py_key, &py_value)) {
|
while (PyDict_Next(dict, &pos, &py_key, &py_value)) {
|
||||||
if (!PyString_Check(py_key))
|
if (!string_check(py_key))
|
||||||
throw sigrok::Error(SR_ERR_ARG);
|
throw sigrok::Error(SR_ERR_ARG);
|
||||||
auto key = PyString_AsString(py_key);
|
auto key = string_from_python(py_key);
|
||||||
auto value = python_to_variant_by_option(py_value, options[key]);
|
auto value = python_to_variant_by_option(py_value, options[key]);
|
||||||
output[key] = value;
|
output[key] = value;
|
||||||
}
|
}
|
||||||
|
@ -443,9 +453,9 @@ std::map<std::string, Glib::VariantBase> dict_to_map_options(PyObject *dict,
|
||||||
|
|
||||||
while (PyDict_Next(dict, &pos, &py_key, &py_value))
|
while (PyDict_Next(dict, &pos, &py_key, &py_value))
|
||||||
{
|
{
|
||||||
if (!PyString_Check(py_key))
|
if (!string_check(py_key))
|
||||||
throw sigrok::Error(SR_ERR_ARG);
|
throw sigrok::Error(SR_ERR_ARG);
|
||||||
auto key = sigrok::ConfigKey::get_by_identifier(PyString_AsString(py_key));
|
auto key = sigrok::ConfigKey::get_by_identifier(string_from_python(py_key));
|
||||||
auto value = python_to_variant_by_key(py_value, key);
|
auto value = python_to_variant_by_key(py_value, key);
|
||||||
options[key] = value;
|
options[key] = value;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue