1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
|
// 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
|