-
Notifications
You must be signed in to change notification settings - Fork 222
Expand file tree
/
Copy pathlist.hpp
More file actions
141 lines (109 loc) · 3.31 KB
/
Copy pathlist.hpp
File metadata and controls
141 lines (109 loc) · 3.31 KB
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
// 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>
namespace boost { namespace python {
namespace detail
{
struct BOOST_PYTHON_DECL list_base : object
{
void append(object_cref); // append object to end
long 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(int 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(long 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
void sort(object_cref cmpfunc);
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(int 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(long 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));
}
void sort() { base::sort(); }
template <class T>
void sort(T const& value)
{
base::sort(object(value));
}
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