Special functions

Sequence Protocol

Support for the sequence protocol is achieved adding functions with special names, this is done using the add-function tag.

The special function names are:

Function name

Parameters

Return type

CPython equivalent

__len__

PyObject* self

Py_ssize_t

PySequence_Size

__getitem__

PyObject* self, Py_ssize_t _i

PyObject*

PySequence_GetItem

__setitem__

PyObject* self, Py_ssize_t _i, PyObject* _value

int

PySequence_SetItem

__contains__

PyObject* self, PyObject* _value

int

PySequence_Contains

__concat__

PyObject* self, PyObject* _other

PyObject*

PySequence_Concat

You just need to inform the function name to the add-function tag, without any parameter or return type information, when you do it, Shiboken will create a C function with parameters and return type defined by the table above.

The function needs to follow the same semantics of the CPython equivalent function, the only way to do it is using the inject-code tag.

A concrete example how to add sequence protocol support to a class can be found on shiboken tests, more precisely in the definition of the Str class in tests/samplebinding/typesystem_sample.xml.

Bool Cast

Implementing bool casts enables using values which have a concept of validity in boolean expressions. In C++, this is commonly implemented as operator bool() const. In Qt, relevant classes have a bool isNull() const function.

In Python, the function __bool__ is used for this. shiboken can generate this functions depending on the command line options –use-operator-bool-as-nb_nonzero and –use-isnull-as-nb_nonzero, which can be overridden by specifying the boolean attributes isNull or operator-bool on the value-type or object-type elements in typesystem XML.