annotate DEPENDENCIES/generic/include/boost/python/suite/indexing/container_utils.hpp @ 125:34e428693f5d vext

Vext -> Repoint
author Chris Cannam
date Thu, 14 Jun 2018 11:15:39 +0100
parents 2665513ce2d3
children
rev   line source
Chris@16 1
Chris@16 2 // (C) Copyright Joel de Guzman 2003.
Chris@16 3 // Distributed under the Boost Software License, Version 1.0. (See
Chris@16 4 // accompanying file LICENSE_1_0.txt or copy at
Chris@16 5 // http://www.boost.org/LICENSE_1_0.txt)
Chris@16 6
Chris@16 7 #ifndef PY_CONTAINER_UTILS_JDG20038_HPP
Chris@16 8 # define PY_CONTAINER_UTILS_JDG20038_HPP
Chris@16 9
Chris@16 10 # include <utility>
Chris@16 11 # include <boost/foreach.hpp>
Chris@16 12 # include <boost/python/object.hpp>
Chris@16 13 # include <boost/python/handle.hpp>
Chris@16 14 # include <boost/python/extract.hpp>
Chris@16 15 # include <boost/python/stl_iterator.hpp>
Chris@16 16
Chris@16 17 namespace boost { namespace python { namespace container_utils {
Chris@16 18
Chris@16 19 template <typename Container>
Chris@16 20 void
Chris@16 21 extend_container(Container& container, object l)
Chris@16 22 {
Chris@16 23 typedef typename Container::value_type data_type;
Chris@16 24
Chris@16 25 // l must be iterable
Chris@16 26 BOOST_FOREACH(object elem,
Chris@16 27 std::make_pair(
Chris@16 28 boost::python::stl_input_iterator<object>(l),
Chris@16 29 boost::python::stl_input_iterator<object>()
Chris@16 30 ))
Chris@16 31 {
Chris@16 32 extract<data_type const&> x(elem);
Chris@16 33 // try if elem is an exact data_type type
Chris@16 34 if (x.check())
Chris@16 35 {
Chris@16 36 container.push_back(x());
Chris@16 37 }
Chris@16 38 else
Chris@16 39 {
Chris@16 40 // try to convert elem to data_type type
Chris@16 41 extract<data_type> x(elem);
Chris@16 42 if (x.check())
Chris@16 43 {
Chris@16 44 container.push_back(x());
Chris@16 45 }
Chris@16 46 else
Chris@16 47 {
Chris@16 48 PyErr_SetString(PyExc_TypeError, "Incompatible Data Type");
Chris@16 49 throw_error_already_set();
Chris@16 50 }
Chris@16 51 }
Chris@16 52 }
Chris@16 53 }
Chris@16 54
Chris@16 55 }}} // namespace boost::python::container_utils
Chris@16 56
Chris@16 57 #endif