mirror of
https://github.com/shlomif/PySolFC.git
synced 2025-04-05 00:02:29 -04:00
93 lines
3.8 KiB
XML
93 lines
3.8 KiB
XML
<?xml version="1.0"?>
|
|
<typesystem package="minimal">
|
|
<primitive-type name="bool"/>
|
|
<primitive-type name="int"/>
|
|
|
|
<primitive-type name="MinBool" target-lang-api-name="PyBool" default-constructor="MinBool(false)">
|
|
<include file-name="minbool.h" location="global"/>
|
|
<conversion-rule>
|
|
<native-to-target>
|
|
return PyBool_FromLong(%in.value());
|
|
</native-to-target>
|
|
<target-to-native>
|
|
<add-conversion type="PyBool" check="PyBool_Check(%in)">
|
|
%out = %OUTTYPE(%in == Py_True);
|
|
</add-conversion>
|
|
</target-to-native>
|
|
</conversion-rule>
|
|
</primitive-type>
|
|
|
|
<container-type name="std::list" type="list">
|
|
<include file-name="list" location="global"/>
|
|
<conversion-rule>
|
|
<native-to-target>
|
|
PyObject* %out = PyList_New((int) %in.size());
|
|
%INTYPE::const_iterator it = %in.begin();
|
|
for (int idx = 0; it != %in.end(); ++it, ++idx) {
|
|
%INTYPE_0 cppItem(*it);
|
|
PyList_SET_ITEM(%out, idx, %CONVERTTOPYTHON[%INTYPE_0](cppItem));
|
|
}
|
|
return %out;
|
|
</native-to-target>
|
|
<target-to-native>
|
|
<add-conversion type="PySequence">
|
|
Shiboken::AutoDecRef seq(PySequence_Fast(%in, 0));
|
|
for (int i = 0; i < PySequence_Fast_GET_SIZE(seq.object()); i++) {
|
|
PyObject* pyItem = PySequence_Fast_GET_ITEM(seq.object(), i);
|
|
%OUTTYPE_0 cppItem = %CONVERTTOCPP[%OUTTYPE_0](pyItem);
|
|
%out.push_back(cppItem);
|
|
}
|
|
</add-conversion>
|
|
</target-to-native>
|
|
</conversion-rule>
|
|
</container-type>
|
|
|
|
<object-type name="Obj"/>
|
|
<value-type name="Val">
|
|
<enum-type name="ValEnum"/>
|
|
</value-type>
|
|
<value-type name="ListUser"/>
|
|
<value-type name="MinBoolUser"/>
|
|
|
|
<container-type name="std::vector" type="vector">
|
|
<include file-name="vector" location="global"/>
|
|
<conversion-rule>
|
|
<native-to-target>
|
|
%INTYPE::size_type vectorSize = %in.size();
|
|
PyObject* %out = PyList_New((int) vectorSize);
|
|
for (%INTYPE::size_type idx = 0; idx < vectorSize; ++idx) {
|
|
%INTYPE_0 cppItem(%in[idx]);
|
|
PyList_SET_ITEM(%out, idx, %CONVERTTOPYTHON[%INTYPE_0](cppItem));
|
|
}
|
|
return %out;
|
|
</native-to-target>
|
|
<target-to-native>
|
|
<add-conversion type="PySequence">
|
|
Shiboken::AutoDecRef seq(PySequence_Fast(%in, 0));
|
|
int vectorSize = PySequence_Fast_GET_SIZE(seq.object());
|
|
%out.reserve(vectorSize);
|
|
for (int idx = 0; idx < vectorSize; ++idx ) {
|
|
PyObject* pyItem = PySequence_Fast_GET_ITEM(seq.object(), idx);
|
|
%OUTTYPE_0 cppItem = %CONVERTTOCPP[%OUTTYPE_0](pyItem);
|
|
%out.push_back(cppItem);
|
|
}
|
|
</add-conversion>
|
|
</target-to-native>
|
|
</conversion-rule>
|
|
</container-type>
|
|
<!-- Test wrapping of a typedef -->
|
|
<function signature="arrayFuncInt(std::vector<int>)" />
|
|
<!-- Note manual expansion of the typedef -->
|
|
<function signature="arrayFuncIntTypedef(std::vector<int>)" />
|
|
|
|
<function signature="arrayFuncIntReturn(int)" />
|
|
<function signature="arrayFuncIntReturnTypedef(int)" />
|
|
|
|
<!-- Test wrapping of a typedef of a typedef -->
|
|
<function signature="arrayFunc(std::vector<int>)" />
|
|
<!-- Note manual expansion of the typedef -->
|
|
<function signature="arrayFuncTypedef(std::vector<int>)" />
|
|
|
|
<function signature="arrayFuncReturn(int)" />
|
|
<function signature="arrayFuncReturnTypedef(int)" />
|
|
</typesystem>
|