From 0e6d4cc1d151724f56c6ccf8c431077e2c778b26 Mon Sep 17 00:00:00 2001 From: Hugo Parente Lima Date: Wed, 25 May 2011 16:23:22 -0300 Subject: Added Shiboken buffer interface. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This interface is just a wrapper to the differents API's provided by Python to deal with memory buffers in various versions of Python, so is recommended to use this API to deal with Python memory buffers instead of the CPython API. If you want to have a Python buffer as argument of any function just change the argument type to "PyBuffer" and the generator will handle it right regarding to type checking. Reviewer: Renato Araújo Luciano Wolf --- generator/overloaddata.cpp | 11 ++++++++++- generator/shibokengenerator.cpp | 2 ++ 2 files changed, 12 insertions(+), 1 deletion(-) (limited to 'generator') diff --git a/generator/overloaddata.cpp b/generator/overloaddata.cpp index 6bb06fe57..7ec8cf07f 100644 --- a/generator/overloaddata.cpp +++ b/generator/overloaddata.cpp @@ -163,6 +163,8 @@ void OverloadData::sortNextOverloads() int qstringIndex = 0; bool checkQVariant = false; int qvariantIndex = 0; + bool checkPyBuffer = false; + int pyBufferIndex = 0; // Primitive types that are not int, long, short, // char and their respective unsigned counterparts. @@ -194,6 +196,9 @@ void OverloadData::sortNextOverloads() } else if (!checkPySequence && typeName == "PySequence") { checkPySequence = true; pySeqIndex = sortData.lastProcessedItemId(); + } else if (!checkPyBuffer && typeName == "PyBuffer") { + checkPyBuffer = true; + pyBufferIndex = sortData.lastProcessedItemId(); } else if (!checkQVariant && typeName == "QVariant") { checkQVariant = true; qvariantIndex = sortData.lastProcessedItemId(); @@ -315,12 +320,16 @@ void OverloadData::sortNextOverloads() } - if ((checkPySequence || checkPyObject) + if ((checkPySequence || checkPyObject || checkPyBuffer) && !targetTypeEntryName.contains("PyObject") + && !targetTypeEntryName.contains("PyBuffer") && !targetTypeEntryName.contains("PySequence")) { if (checkPySequence) { // PySequence will be checked after all more specific types, but before PyObject. graph.addEdge(targetTypeId, pySeqIndex); + } else if (checkPyBuffer) { + // PySequence will be checked after all more specific types, but before PyObject. + graph.addEdge(targetTypeId, pyBufferIndex); } else { // Add dependency on PyObject, so its check is the last one (too generic). graph.addEdge(targetTypeId, pyobjectIndex); diff --git a/generator/shibokengenerator.cpp b/generator/shibokengenerator.cpp index de96d03ac..8d98869d7 100644 --- a/generator/shibokengenerator.cpp +++ b/generator/shibokengenerator.cpp @@ -865,6 +865,8 @@ QString ShibokenGenerator::guessCPythonCheckFunction(const QString& type) metaType = 0; } else if (type == "PyTypeObject") { retval = "PyType_Check"; + } else if (type == "PyBuffer") { + retval = "Shiboken::Buffer::checkType"; } else { retval = QString("%1_Check").arg(type); } -- cgit v1.2.3