Mercurial > hg > vamp-build-and-test
comparison DEPENDENCIES/generic/include/boost/python/list.hpp @ 16:2665513ce2d3
Add boost headers
author | Chris Cannam |
---|---|
date | Tue, 05 Aug 2014 11:11:38 +0100 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
15:663ca0da4350 | 16:2665513ce2d3 |
---|---|
1 // Copyright David Abrahams 2002. | |
2 // Distributed under the Boost Software License, Version 1.0. (See | |
3 // accompanying file LICENSE_1_0.txt or copy at | |
4 // http://www.boost.org/LICENSE_1_0.txt) | |
5 #ifndef LIST_DWA2002627_HPP | |
6 # define LIST_DWA2002627_HPP | |
7 | |
8 # include <boost/python/detail/prefix.hpp> | |
9 | |
10 # include <boost/python/object.hpp> | |
11 # include <boost/python/converter/pytype_object_mgr_traits.hpp> | |
12 # include <boost/python/ssize_t.hpp> | |
13 | |
14 namespace boost { namespace python { | |
15 | |
16 namespace detail | |
17 { | |
18 struct BOOST_PYTHON_DECL list_base : object | |
19 { | |
20 void append(object_cref); // append object to end | |
21 | |
22 ssize_t count(object_cref value) const; // return number of occurrences of value | |
23 | |
24 void extend(object_cref sequence); // extend list by appending sequence elements | |
25 | |
26 long index(object_cref value) const; // return index of first occurrence of value | |
27 | |
28 void insert(ssize_t index, object_cref); // insert object before index | |
29 void insert(object const& index, object_cref); | |
30 | |
31 object pop(); // remove and return item at index (default last) | |
32 object pop(ssize_t index); | |
33 object pop(object const& index); | |
34 | |
35 void remove(object_cref value); // remove first occurrence of value | |
36 | |
37 void reverse(); // reverse *IN PLACE* | |
38 | |
39 void sort(); // sort *IN PLACE*; if given, cmpfunc(x, y) -> -1, 0, 1 | |
40 #if PY_VERSION_HEX >= 0x03000000 | |
41 void sort(args_proxy const &args, | |
42 kwds_proxy const &kwds); | |
43 #else | |
44 void sort(object_cref cmpfunc); | |
45 #endif | |
46 | |
47 protected: | |
48 list_base(); // new list | |
49 explicit list_base(object_cref sequence); // new list initialized from sequence's items | |
50 | |
51 BOOST_PYTHON_FORWARD_OBJECT_CONSTRUCTORS(list_base, object) | |
52 private: | |
53 static detail::new_non_null_reference call(object const&); | |
54 }; | |
55 } | |
56 | |
57 class list : public detail::list_base | |
58 { | |
59 typedef detail::list_base base; | |
60 public: | |
61 list() {} // new list | |
62 | |
63 template <class T> | |
64 explicit list(T const& sequence) | |
65 : base(object(sequence)) | |
66 { | |
67 } | |
68 | |
69 template <class T> | |
70 void append(T const& x) | |
71 { | |
72 base::append(object(x)); | |
73 } | |
74 | |
75 template <class T> | |
76 long count(T const& value) const | |
77 { | |
78 return base::count(object(value)); | |
79 } | |
80 | |
81 template <class T> | |
82 void extend(T const& x) | |
83 { | |
84 base::extend(object(x)); | |
85 } | |
86 | |
87 template <class T> | |
88 long index(T const& x) const | |
89 { | |
90 return base::index(object(x)); | |
91 } | |
92 | |
93 template <class T> | |
94 void insert(ssize_t index, T const& x) // insert object before index | |
95 { | |
96 base::insert(index, object(x)); | |
97 } | |
98 | |
99 template <class T> | |
100 void insert(object const& index, T const& x) // insert object before index | |
101 { | |
102 base::insert(index, object(x)); | |
103 } | |
104 | |
105 object pop() { return base::pop(); } | |
106 object pop(ssize_t index) { return base::pop(index); } | |
107 | |
108 template <class T> | |
109 object pop(T const& index) | |
110 { | |
111 return base::pop(object(index)); | |
112 } | |
113 | |
114 template <class T> | |
115 void remove(T const& value) | |
116 { | |
117 base::remove(object(value)); | |
118 } | |
119 | |
120 #if PY_VERSION_HEX <= 0x03000000 | |
121 void sort() { base::sort(); } | |
122 | |
123 template <class T> | |
124 void sort(T const& value) | |
125 { | |
126 base::sort(object(value)); | |
127 } | |
128 #endif | |
129 | |
130 public: // implementation detail -- for internal use only | |
131 BOOST_PYTHON_FORWARD_OBJECT_CONSTRUCTORS(list, base) | |
132 }; | |
133 | |
134 // | |
135 // Converter Specializations | |
136 // | |
137 namespace converter | |
138 { | |
139 template <> | |
140 struct object_manager_traits<list> | |
141 : pytype_object_manager_traits<&PyList_Type,list> | |
142 { | |
143 }; | |
144 } | |
145 | |
146 }} // namespace boost::python | |
147 | |
148 #endif // LIST_DWA2002627_HPP |