45#ifndef LASS_GUARDIAN_OF_INCLUSION_UTIL_PYOBJECT_UTIL_H
46#define LASS_GUARDIAN_OF_INCLUSION_UTIL_PYOBJECT_UTIL_H
58 inline bool isOfType(PyObject* iObject, PyTypeObject* iTypeObject)
60 return (iObject->ob_type == iTypeObject);
63 template<
typename ForwardIterator>
64 TPyObjPtr pyBuildTuple(ForwardIterator iB, ForwardIterator iE )
66 LockGIL LASS_UNUSED(lock);
67 const Py_ssize_t size =
static_cast<Py_ssize_t
>(std::distance(iB, iE));
68 LASS_ASSERT(size >= 0);
72 for (Py_ssize_t i = 0; iB != iE; ++iB, ++i)
74 PyObject* item = pyBuildSimpleObject(*iB);
79 PyTuple_SET_ITEM(r.get(), i, item);
85 template<
typename ForwardIterator>
86 TPyObjPtr pyBuildList(ForwardIterator iB, ForwardIterator iE )
88 LockGIL LASS_UNUSED(lock);
89 const Py_ssize_t size =
static_cast<Py_ssize_t
>(std::distance(iB, iE));
90 LASS_ASSERT(size >= 0);
94 for (Py_ssize_t i = 0; iB != iE; ++iB, ++i)
96 PyObject* item = pyBuildSimpleObject(*iB);
101 PyList_SET_ITEM(r.get(), i, item);
107 template<
typename InputIterator>
108 TPyObjPtr pyBuildMap(InputIterator iB, InputIterator iE )
110 LockGIL LASS_UNUSED(lock);
116 TPyObjPtr key(pyBuildSimpleObject(iB->first));
121 TPyObjPtr value(pyBuildSimpleObject(iB->second));
126 if (PyDict_SetItem(r.get(), key.get(), value.get()) != 0)
PyObjectPtr< PyObject >::Type TPyObjPtr
PyObjectPtr to a PyObject.
Comprehensive C++ to Python binding library.
Library for Assembled Shared Sources.