From 767b0622d95ac03625768dda17416d45fb661a66 Mon Sep 17 00:00:00 2001 From: Michael Hansen Date: Thu, 17 Jan 2013 21:09:21 -0800 Subject: [PATCH] More efficient form for PyString_AsStringEx --- .../FeatureLib/pfPython/pyGlueHelpers.cpp | 20 +++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/Sources/Plasma/FeatureLib/pfPython/pyGlueHelpers.cpp b/Sources/Plasma/FeatureLib/pfPython/pyGlueHelpers.cpp index 97c75486..b651b3c0 100644 --- a/Sources/Plasma/FeatureLib/pfPython/pyGlueHelpers.cpp +++ b/Sources/Plasma/FeatureLib/pfPython/pyGlueHelpers.cpp @@ -49,14 +49,18 @@ plString PyString_AsStringEx(PyObject* obj) { if (PyString_Check(obj)) return plString::FromUtf8(PyString_AsString(obj)); - else if (PyUnicode_Check(obj)) - { - PyObject* utf8 = PyUnicode_AsUTF8String(obj); - plString str = plString::FromUtf8(PyString_AsString(utf8)); - Py_DECREF(utf8); - return str; - } else - return plString::Null; + + if (PyUnicode_Check(obj)) { +#if (Py_UNICODE_SIZE == 2) + return plString::FromUtf16(reinterpret_cast(PyUnicode_AsUnicode(obj))); +#elif (Py_UNICODE_SIZE == 4) + return plString::FromUtf32(reinterpret_cast(PyUnicode_AsUnicode(obj))); +#else +# error "Py_UNICODE is an unexpected size" +#endif + } + + return plString::Null; } bool PyString_CheckEx(PyObject* obj)