1cdef extern from "<vector>" namespace "std" nogil:
2    cdef cppclass vector[T,ALLOCATOR=*]:
3        ctypedef T value_type
4        ctypedef ALLOCATOR allocator_type
5
6        # these should really be allocator_type.size_type and
7        # allocator_type.difference_type to be true to the C++ definition
8        # but cython doesn't support deferred access on template arguments
9        ctypedef size_t size_type
10        ctypedef ptrdiff_t difference_type
11
12        cppclass iterator:
13            T& operator*()
14            iterator operator++()
15            iterator operator--()
16            iterator operator+(size_type)
17            iterator operator-(size_type)
18            difference_type operator-(iterator)
19            bint operator==(iterator)
20            bint operator!=(iterator)
21            bint operator<(iterator)
22            bint operator>(iterator)
23            bint operator<=(iterator)
24            bint operator>=(iterator)
25        cppclass reverse_iterator:
26            T& operator*()
27            reverse_iterator operator++()
28            reverse_iterator operator--()
29            reverse_iterator operator+(size_type)
30            reverse_iterator operator-(size_type)
31            difference_type operator-(reverse_iterator)
32            bint operator==(reverse_iterator)
33            bint operator!=(reverse_iterator)
34            bint operator<(reverse_iterator)
35            bint operator>(reverse_iterator)
36            bint operator<=(reverse_iterator)
37            bint operator>=(reverse_iterator)
38        cppclass const_iterator(iterator):
39            pass
40        cppclass const_reverse_iterator(reverse_iterator):
41            pass
42        vector() except +
43        vector(vector&) except +
44        vector(size_type) except +
45        vector(size_type, T&) except +
46        #vector[input_iterator](input_iterator, input_iterator)
47        T& operator[](size_type)
48        #vector& operator=(vector&)
49        bint operator==(vector&, vector&)
50        bint operator!=(vector&, vector&)
51        bint operator<(vector&, vector&)
52        bint operator>(vector&, vector&)
53        bint operator<=(vector&, vector&)
54        bint operator>=(vector&, vector&)
55        void assign(size_type, const T&)
56        void assign[input_iterator](input_iterator, input_iterator) except +
57        T& at(size_type) except +
58        T& back()
59        iterator begin()
60        const_iterator const_begin "begin"()
61        size_type capacity()
62        void clear()
63        bint empty()
64        iterator end()
65        const_iterator const_end "end"()
66        iterator erase(iterator)
67        iterator erase(iterator, iterator)
68        T& front()
69        iterator insert(iterator, const T&) except +
70        iterator insert(iterator, size_type, const T&) except +
71        iterator insert[Iter](iterator, Iter, Iter) except +
72        size_type max_size()
73        void pop_back()
74        void push_back(T&) except +
75        reverse_iterator rbegin()
76        const_reverse_iterator const_rbegin "crbegin"()
77        reverse_iterator rend()
78        const_reverse_iterator const_rend "crend"()
79        void reserve(size_type)
80        void resize(size_type) except +
81        void resize(size_type, T&) except +
82        size_type size()
83        void swap(vector&)
84
85        # C++11 methods
86        T* data()
87        const T* const_data "data"()
88        void shrink_to_fit()
89