aboutsummaryrefslogtreecommitdiffstats
path: root/tests/samplebinding/list_conversions.h
diff options
context:
space:
mode:
Diffstat (limited to 'tests/samplebinding/list_conversions.h')
-rw-r--r--tests/samplebinding/list_conversions.h29
1 files changed, 29 insertions, 0 deletions
diff --git a/tests/samplebinding/list_conversions.h b/tests/samplebinding/list_conversions.h
new file mode 100644
index 000000000..f512f98ad
--- /dev/null
+++ b/tests/samplebinding/list_conversions.h
@@ -0,0 +1,29 @@
+template <typename StdList>
+struct Converter_std_list
+{
+ static PyObject* toPython(ValueHolder<StdList> holder)
+ {
+ PyObject* result = PyList_New((int) holder.value.size());
+ typedef typename StdList::iterator IT;
+ IT it;
+ int idx = 0;
+ for (it = holder.value.begin(); it != holder.value.end(); it++) {
+ ValueHolder<typename StdList::value_type> vh(*it);
+ PyList_SET_ITEM(result, idx, Converter<typename StdList::value_type>::toPython(vh));
+ idx++;
+ }
+ return result;
+ }
+ static StdList toCpp(PyObject* pyobj)
+ {
+ StdList result;
+ for (int i = 0; i < PyTuple_GET_SIZE(pyobj); i++) {
+ PyObject* pyItem = PyTuple_GET_ITEM(pyobj, i);
+ result.push_back(Converter<typename StdList::value_type>::toCpp(pyItem));
+ }
+ return result;
+ }
+};
+
+template<typename T>
+struct Converter<std::list<T> > : Converter_std_list<std::list<T> > {};