diff --git a/include/boost/python/indexing/py_container_utils.hpp b/include/boost/python/indexing/py_container_utils.hpp new file mode 100644 index 00000000..9758fe78 --- /dev/null +++ b/include/boost/python/indexing/py_container_utils.hpp @@ -0,0 +1,53 @@ + +// (C) Copyright Joel de Guzman 2003. +// Permission to copy, use, modify, sell and distribute this software +// is granted provided this copyright notice appears in all copies. This +// software is provided "as is" without express or implied warranty, and +// with no claim as to its suitability for any purpose. + +#ifndef PY_CONTAINER_UTILS_JDG20038_HPP +# define PY_CONTAINER_UTILS_JDG20038_HPP + +# include +# include +# include + +namespace boost { namespace python { namespace container_utils { + + template + void + extend_container(Container& container, object l) + { + typedef typename Container::value_type element_t; + + // l must be a list or some container + + for (int i = 0; i < l.attr("__len__")(); i++) + { + object elem(l[i]); + extract x(elem); + // try if elem is an exact element_t type + if (x.check()) + { + container.push_back(x()); + } + else + { + // try to convert elem to element_t type + extract x(elem); + if (x.check()) + { + container.push_back(x()); + } + else + { + PyErr_SetString(PyExc_TypeError, "Incompatible Element Type"); + throw_error_already_set(); + } + } + } + } + +}}} // namespace boost::python::container_utils + +#endif