source: NonGTP/Boost/boost/python/suite/indexing/container_utils.hpp @ 857

Revision 857, 1.5 KB checked in by igarcia, 19 years ago (diff)
Line 
1
2//  (C) Copyright Joel de Guzman 2003.
3//  Distributed under the Boost Software License, Version 1.0. (See
4//  accompanying file LICENSE_1_0.txt or copy at
5//  http://www.boost.org/LICENSE_1_0.txt)
6
7#ifndef PY_CONTAINER_UTILS_JDG20038_HPP
8# define PY_CONTAINER_UTILS_JDG20038_HPP
9
10# include <boost/python/object.hpp>
11# include <boost/python/handle.hpp>
12# include <boost/python/extract.hpp>
13
14namespace boost { namespace python { namespace container_utils {
15       
16    template <typename Container>
17    void
18    extend_container(Container& container, object l)
19    {
20        typedef typename Container::value_type data_type;
21       
22        //  l must be a list or some container
23
24        for (int i = 0; i < l.attr("__len__")(); i++)
25        {
26            object elem(l[i]);
27            extract<data_type const&> x(elem);
28            //  try if elem is an exact data_type type
29            if (x.check())
30            {
31                container.push_back(x());
32            }
33            else
34            {
35                //  try to convert elem to data_type type
36                extract<data_type> x(elem);
37                if (x.check())
38                {
39                    container.push_back(x());
40                }
41                else
42                {
43                    PyErr_SetString(PyExc_TypeError, "Incompatible Data Type");
44                    throw_error_already_set();
45                }
46            }
47        }         
48    }
49
50}}} // namespace boost::python::container_utils
51
52#endif
Note: See TracBrowser for help on using the repository browser.