diff options
-rw-r--r-- | libshiboken/CMakeLists.txt | 2 | ||||
-rw-r--r-- | libshiboken/sbkstring.cpp | 120 | ||||
-rw-r--r-- | libshiboken/sbkstring.h | 55 | ||||
-rw-r--r-- | libshiboken/shiboken.h | 1 |
4 files changed, 178 insertions, 0 deletions
diff --git a/libshiboken/CMakeLists.txt b/libshiboken/CMakeLists.txt index f42b6d925..7d8a7ded8 100644 --- a/libshiboken/CMakeLists.txt +++ b/libshiboken/CMakeLists.txt @@ -27,6 +27,7 @@ gilstate.cpp helper.cpp sbkenum.cpp sbkmodule.cpp +sbkstring.cpp bindingmanager.cpp threadstatesaver.cpp typeresolver.cpp @@ -54,6 +55,7 @@ install(FILES sbkmodule.h python25compat.h sbkdbg.h + sbkstring.h shiboken.h shibokenmacros.h threadstatesaver.h diff --git a/libshiboken/sbkstring.cpp b/libshiboken/sbkstring.cpp new file mode 100644 index 000000000..6a23511ac --- /dev/null +++ b/libshiboken/sbkstring.cpp @@ -0,0 +1,120 @@ +/* + * This file is part of the Shiboken Python Bindings Generator project. + * + * Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). + * + * Contact: PySide team <contact@pyside.org> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include "sbkstring.h" + +namespace Shiboken +{ + +namespace String +{ + +bool check(PyObject* obj) +{ + return obj == Py_None || +#if PY_MAJOR_VERSION >= 3 + PyUnicode_Check(obj); +#else + PyString_Check(obj); +#endif +} + +bool convertible(PyObject* obj) +{ + return check(obj); +} + +PyObject* fromCString(const char* value) +{ +#if PY_MAJOR_VERSION >= 3 + return PyUnicode_FromString(value); +#else + return PyBytes_FromString(value); +#endif +} + +const char* toCString(PyObject* str) +{ +#if PY_MAJOR_VERSION >= 3 + return _PyUnicode_AsString(str); +#else + return PyBytes_AS_STRING(str); +#endif +} + +bool concat(PyObject** val1, PyObject* val2) +{ +#if PY_MAJOR_VERSION >= 3 + PyObject* result = PyUnicode_Concat(*val1, val2); + Py_DECREF(*val1); + *val1 = result; + return true; +#else + return false; +#endif +} + +PyObject* fromFormat(const char* format, ...) +{ + va_list argp; + va_start(argp, format); + PyObject* result = 0; +#if PY_MAJOR_VERSION >= 3 + result = PyUnicode_FromFormatV(format, argp); +#else + result = PyString_FromFormatV(format, argp); +#endif + va_end(argp); + return result; +} + +PyObject* fromStringAndSize(const char* str, Py_ssize_t size) +{ +#if PY_MAJOR_VERSION >= 3 + return PyUnicode_FromStringAndSize(str, size); +#else + return PyString_FromStringAndSize(str, size); +#endif +} + +int compare(PyObject* val1, const char* val2) +{ +#if PY_MAJOR_VERSION >= 3 + return PyUnicode_CompareWithASCIIString(val1, val2); +#else + return strcmp(PyString_AS_STRING(X), Y); +#endif +} + +Py_ssize_t len(PyObject* str) +{ +#if PY_MAJOR_VERSION >= 3 + return PyUnicode_GET_SIZE(str); +#else + return PyString_GET_SIZE(str); +#endif + +} + +} // namespace String + +} // namespace Shiboken diff --git a/libshiboken/sbkstring.h b/libshiboken/sbkstring.h new file mode 100644 index 000000000..13aa25ef2 --- /dev/null +++ b/libshiboken/sbkstring.h @@ -0,0 +1,55 @@ +/* + * This file is part of the Shiboken Python Bindings Generator project. + * + * Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). + * + * Contact: PySide team <contact@pyside.org> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef SBKSTRING_H +#define SBKSTRING_H + +#include <Python.h> +#include "shibokenmacros.h" + +#if PY_MAJOR_VERSION >= 3 + #define SBK_STR_NAME "unicode" +#else + #define SBK_STR_NAME "str" +#endif + +namespace Shiboken +{ +namespace String +{ + LIBSHIBOKEN_API bool check(PyObject* obj); + LIBSHIBOKEN_API bool convertible(PyObject* obj); + LIBSHIBOKEN_API PyObject* fromCString(const char* value); + LIBSHIBOKEN_API const char* toCString(PyObject* str); + LIBSHIBOKEN_API bool concat(PyObject** val1, PyObject* val2); + LIBSHIBOKEN_API PyObject* fromFormat(const char* format, ...); + LIBSHIBOKEN_API PyObject* fromStringAndSize(const char* str, Py_ssize_t size); + LIBSHIBOKEN_API int compare(PyObject* val1, const char* val2); + LIBSHIBOKEN_API Py_ssize_t len(PyObject* str); + +} // namespace String +} // namespace Shiboken + + +#endif + + diff --git a/libshiboken/shiboken.h b/libshiboken/shiboken.h index d79eb84bc..269f01c90 100644 --- a/libshiboken/shiboken.h +++ b/libshiboken/shiboken.h @@ -33,6 +33,7 @@ #include "helper.h" #include "sbkenum.h" #include "sbkmodule.h" +#include "sbkstring.h" #include "shibokenmacros.h" #include "typeresolver.h" #include "shibokenbuffer.h" |