diff options
author | Renato Filho <renato.filho@openbossa.org> | 2011-09-28 15:45:27 -0300 |
---|---|---|
committer | Hugo Parente Lima <hugo.pl@gmail.com> | 2012-03-08 16:18:17 -0300 |
commit | c6b9bb836c98a6bcf922ad6ad4dda60e3383d41b (patch) | |
tree | 7a0fda82af6f26548110ddd8dc07ef5f64fe6ad1 /libshiboken/sbkstring.cpp | |
parent | 26672bda4a67e69c81b8a385d222d56419f286ff (diff) |
Created Shiboken::String API to support py3k.
Diffstat (limited to 'libshiboken/sbkstring.cpp')
-rw-r--r-- | libshiboken/sbkstring.cpp | 120 |
1 files changed, 120 insertions, 0 deletions
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 |