// Copyright David Abrahams 2002. | |
// Distributed under the Boost Software License, Version 1.0. (See | |
// accompanying file LICENSE_1_0.txt or copy at | |
// http://www.boost.org/LICENSE_1_0.txt) | |
#ifndef LIST_DWA2002627_HPP | |
# define LIST_DWA2002627_HPP | |
# include <boost/python/detail/prefix.hpp> | |
# include <boost/python/object.hpp> | |
# include <boost/python/converter/pytype_object_mgr_traits.hpp> | |
# include <boost/python/ssize_t.hpp> | |
namespace boost { namespace python { | |
namespace detail | |
{ | |
struct BOOST_PYTHON_DECL list_base : object | |
{ | |
void append(object_cref); // append object to end | |
ssize_t count(object_cref value) const; // return number of occurrences of value | |
void extend(object_cref sequence); // extend list by appending sequence elements | |
long index(object_cref value) const; // return index of first occurrence of value | |
void insert(ssize_t index, object_cref); // insert object before index | |
void insert(object const& index, object_cref); | |
object pop(); // remove and return item at index (default last) | |
object pop(ssize_t index); | |
object pop(object const& index); | |
void remove(object_cref value); // remove first occurrence of value | |
void reverse(); // reverse *IN PLACE* | |
void sort(); // sort *IN PLACE*; if given, cmpfunc(x, y) -> -1, 0, 1 | |
#if PY_VERSION_HEX >= 0x03000000 | |
void sort(args_proxy const &args, | |
kwds_proxy const &kwds); | |
#else | |
void sort(object_cref cmpfunc); | |
#endif | |
protected: | |
list_base(); // new list | |
explicit list_base(object_cref sequence); // new list initialized from sequence's items | |
BOOST_PYTHON_FORWARD_OBJECT_CONSTRUCTORS(list_base, object) | |
private: | |
static detail::new_non_null_reference call(object const&); | |
}; | |
} | |
class list : public detail::list_base | |
{ | |
typedef detail::list_base base; | |
public: | |
list() {} // new list | |
template <class T> | |
explicit list(T const& sequence) | |
: base(object(sequence)) | |
{ | |
} | |
template <class T> | |
void append(T const& x) | |
{ | |
base::append(object(x)); | |
} | |
template <class T> | |
long count(T const& value) const | |
{ | |
return base::count(object(value)); | |
} | |
template <class T> | |
void extend(T const& x) | |
{ | |
base::extend(object(x)); | |
} | |
template <class T> | |
long index(T const& x) const | |
{ | |
return base::index(object(x)); | |
} | |
template <class T> | |
void insert(ssize_t index, T const& x) // insert object before index | |
{ | |
base::insert(index, object(x)); | |
} | |
template <class T> | |
void insert(object const& index, T const& x) // insert object before index | |
{ | |
base::insert(index, object(x)); | |
} | |
object pop() { return base::pop(); } | |
object pop(ssize_t index) { return base::pop(index); } | |
template <class T> | |
object pop(T const& index) | |
{ | |
return base::pop(object(index)); | |
} | |
template <class T> | |
void remove(T const& value) | |
{ | |
base::remove(object(value)); | |
} | |
#if PY_VERSION_HEX <= 0x03000000 | |
void sort() { base::sort(); } | |
template <class T> | |
void sort(T const& value) | |
{ | |
base::sort(object(value)); | |
} | |
#endif | |
public: // implementation detail -- for internal use only | |
BOOST_PYTHON_FORWARD_OBJECT_CONSTRUCTORS(list, base) | |
}; | |
// | |
// Converter Specializations | |
// | |
namespace converter | |
{ | |
template <> | |
struct object_manager_traits<list> | |
: pytype_object_manager_traits<&PyList_Type,list> | |
{ | |
}; | |
} | |
}} // namespace boost::python | |
#endif // LIST_DWA2002627_HPP |