aboutsummaryrefslogtreecommitdiffstats
path: root/sources/shiboken2/shibokenmodule/typesystem_shiboken.xml
blob: 18ab52e80c86de2fbea47c467f4f170c38bbbf1a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
<?xml version="1.0" ?>
<typesystem package="shiboken2">
    <custom-type name="PyObject" />
    <custom-type name="PyType" />
    <primitive-type name="bool" />
    <primitive-type name="unsigned long" />
    <primitive-type name="size_t" />
    <add-function signature="isValid(PyObject*)" return-type="bool">
        <inject-code>
            bool isValid = Shiboken::Object::isValid(%1, false);
            %PYARG_0 = %CONVERTTOPYTHON[bool](isValid);
        </inject-code>
    </add-function>

    <add-function signature="invalidate(PyObject*)">
        <inject-code>
            Shiboken::Object::invalidate(%1);
        </inject-code>
    </add-function>

    <add-function signature="wrapInstance(size_t, PyType)" return-type="PyObject*">
        <inject-code>
            if (Shiboken::ObjectType::checkType((PyTypeObject*)%2))
                %PYARG_0 = Shiboken::Object::newObject((SbkObjectType*)%2, (void*)%1, false, true);
            else
                PyErr_SetString(PyExc_TypeError, "You need a shiboken-based type.");
        </inject-code>
    </add-function>

   <add-function signature="getCppPointer(PyObject*)" return-type="PyObject*">
        <inject-code>
            if (Shiboken::Object::checkType(%1)) {
                std::vector&lt;void*> ptrs = Shiboken::Object::cppPointers((SbkObject*)%1);
                %PYARG_0 = PyTuple_New(ptrs.size());
                for (std::size_t i = 0; i &lt; ptrs.size(); ++i)
                    PyTuple_SET_ITEM(%PYARG_0, i, PyLong_FromVoidPtr(ptrs[i]));
            } else {
                PyErr_SetString(PyExc_TypeError, "You need a shiboken-based type.");
            }
        </inject-code>
   </add-function>

   <add-function signature="delete(PyObject*)">
        <inject-code>
            if (Shiboken::Object::checkType(%1)) {
                Shiboken::Object::callCppDestructors((SbkObject*)%1);
            } else {
                PyErr_SetString(PyExc_TypeError, "You need a shiboken-based type.");
            }
        </inject-code>
   </add-function>

    <add-function signature="ownedByPython(PyObject*)" return-type="bool">
        <inject-code>
            if (Shiboken::Object::checkType(%1)) {
                bool hasOwnership = Shiboken::Object::hasOwnership((SbkObject*)%1);
                %PYARG_0 = %CONVERTTOPYTHON[bool](hasOwnership);
            } else {
                PyErr_SetString(PyExc_TypeError, "You need a shiboken-based type.");
            }
        </inject-code>
    </add-function>

   <add-function signature="createdByPython(PyObject*)" return-type="bool">
        <inject-code>
            if (Shiboken::Object::checkType(%1)) {
                bool wasCreatedByPython = Shiboken::Object::wasCreatedByPython((SbkObject*)%1);
                %PYARG_0 = %CONVERTTOPYTHON[bool](wasCreatedByPython);
            } else {
                PyErr_SetString(PyExc_TypeError, "You need a shiboken-based type.");
            }
        </inject-code>
   </add-function>

    <add-function signature="dump(PyObject*)" return-type="PyObject*">
        <inject-code>
            if (!Shiboken::Object::checkType(%1)) {
                %PYARG_0 = Shiboken::String::fromCString("Ordinary Python type.");
            } else {
                std::string str = Shiboken::Object::info((SbkObject*)%1);
                %PYARG_0 = Shiboken::String::fromCString(str.c_str());
            }
        </inject-code>
    </add-function>

    <add-function signature="getAllValidWrappers(void)" return-type="PyObject*">
        <inject-code>
            std::set&lt;PyObject*&gt; setAll = Shiboken::BindingManager::instance().getAllPyObjects();
            PyObject* listAll = PyList_New(0);
            if (listAll == NULL)
                return NULL;

            const std::set&lt;PyObject*&gt;::iterator end = setAll.end();
            for (std::set&lt;PyObject*&gt;::iterator iter = setAll.begin(); iter != end; ++iter) {
                if (*iter != NULL) {
                    if (PyList_Append(listAll, *iter) != 0) {
                        Py_DECREF(listAll);
                        return NULL;
                    }
                }
            }
            return listAll;
        </inject-code>
    </add-function>

    <extra-includes>
        <include file-name="sbkversion.h" location="local"/>
    </extra-includes>
    <inject-code position="end">
        // Add __version__ and __version_info__ attributes to the module
        PyObject* version = PyTuple_New(5);
        PyTuple_SET_ITEM(version, 0, PyInt_FromLong(SHIBOKEN_MAJOR_VERSION));
        PyTuple_SET_ITEM(version, 1, PyInt_FromLong(SHIBOKEN_MINOR_VERSION));
        PyTuple_SET_ITEM(version, 2, PyInt_FromLong(SHIBOKEN_MICRO_VERSION));
        PyTuple_SET_ITEM(version, 3, Shiboken::String::fromCString(SHIBOKEN_RELEASE_LEVEL));
        PyTuple_SET_ITEM(version, 4, PyInt_FromLong(SHIBOKEN_SERIAL));
        PyModule_AddObject(module, "__version_info__", version);
        PyModule_AddStringConstant(module, "__version__", SHIBOKEN_VERSION);
    </inject-code>
</typesystem>