from .utility cimport pair cdef extern from "" namespace "std" nogil: cdef cppclass map[T, U, COMPARE=*, ALLOCATOR=*]: ctypedef T key_type ctypedef U mapped_type ctypedef pair[const T, U] value_type ctypedef COMPARE key_compare ctypedef ALLOCATOR allocator_type # these should really be allocator_type.size_type and # allocator_type.difference_type to be true to the C++ definition # but cython doesn't support deferred access on template arguments ctypedef size_t size_type ctypedef ptrdiff_t difference_type cppclass const_iterator cppclass iterator: iterator() except + iterator(iterator&) except + # correct would be value_type& but this does not work # well with cython's code gen pair[T, U]& operator*() iterator operator++() iterator operator--() iterator operator++(int) iterator operator--(int) bint operator==(iterator) bint operator==(const_iterator) bint operator!=(iterator) bint operator!=(const_iterator) cppclass const_iterator: const_iterator() except + const_iterator(iterator&) except + const_iterator(const_iterator&) except + operator=(iterator&) except + # correct would be const value_type& but this does not work # well with cython's code gen const pair[T, U]& operator*() const_iterator operator++() const_iterator operator--() const_iterator operator++(int) const_iterator operator--(int) bint operator==(iterator) bint operator==(const_iterator) bint operator!=(iterator) bint operator!=(const_iterator) cppclass const_reverse_iterator cppclass reverse_iterator: reverse_iterator() except + reverse_iterator(reverse_iterator&) except + # correct would be value_type& but this does not work # well with cython's code gen pair[T, U]& operator*() reverse_iterator operator++() reverse_iterator operator--() reverse_iterator operator++(int) reverse_iterator operator--(int) bint operator==(reverse_iterator) bint operator==(const_reverse_iterator) bint operator!=(reverse_iterator) bint operator!=(const_reverse_iterator) cppclass const_reverse_iterator: const_reverse_iterator() except + const_reverse_iterator(reverse_iterator&) except + operator=(reverse_iterator&) except + # correct would be const value_type& but this does not work # well with cython's code gen const pair[T, U]& operator*() const_reverse_iterator operator++() const_reverse_iterator operator--() const_reverse_iterator operator++(int) const_reverse_iterator operator--(int) bint operator==(reverse_iterator) bint operator==(const_reverse_iterator) bint operator!=(reverse_iterator) bint operator!=(const_reverse_iterator) map() except + map(map&) except + #map(key_compare&) U& operator[](const T&) #map& operator=(map&) bint operator==(map&, map&) bint operator!=(map&, map&) bint operator<(map&, map&) bint operator>(map&, map&) bint operator<=(map&, map&) bint operator>=(map&, map&) U& at(const T&) except + const U& const_at "at"(const T&) except + iterator begin() const_iterator const_begin "begin" () const_iterator cbegin() void clear() size_t count(const T&) bint empty() iterator end() const_iterator const_end "end" () const_iterator cend() pair[iterator, iterator] equal_range(const T&) pair[const_iterator, const_iterator] const_equal_range "equal_range"(const T&) iterator erase(iterator) iterator const_erase "erase"(const_iterator) iterator erase(const_iterator, const_iterator) size_t erase(const T&) iterator find(const T&) const_iterator const_find "find" (const T&) pair[iterator, bint] insert(const pair[T, U]&) except + iterator insert(const_iterator, const pair[T, U]&) except + void insert[InputIt](InputIt, InputIt) except + #key_compare key_comp() iterator lower_bound(const T&) const_iterator const_lower_bound "lower_bound"(const T&) size_t max_size() reverse_iterator rbegin() const_reverse_iterator const_rbegin "rbegin"() const_reverse_iterator crbegin() reverse_iterator rend() const_reverse_iterator const_rend "rend"() const_reverse_iterator crend() size_t size() void swap(map&) iterator upper_bound(const T&) const_iterator const_upper_bound "upper_bound"(const T&) #value_compare value_comp() # C++20 bint contains(const T&) cdef cppclass multimap[T, U, COMPARE=*, ALLOCATOR=*]: ctypedef T key_type ctypedef U mapped_type ctypedef pair[const T, U] value_type ctypedef COMPARE key_compare ctypedef ALLOCATOR allocator_type # these should really be allocator_type.size_type and # allocator_type.difference_type to be true to the C++ definition # but cython doesn't support deferred access on template arguments ctypedef size_t size_type ctypedef ptrdiff_t difference_type cppclass const_iterator cppclass iterator: iterator() except + iterator(iterator&) except + # correct would be value_type& but this does not work # well with cython's code gen pair[T, U]& operator*() iterator operator++() iterator operator--() iterator operator++(int) iterator operator--(int) bint operator==(iterator) bint operator==(const_iterator) bint operator!=(iterator) bint operator!=(const_iterator) cppclass const_iterator: const_iterator() except + const_iterator(iterator&) except + const_iterator(const_iterator&) except + operator=(iterator&) except + # correct would be const value_type& but this does not work # well with cython's code gen const pair[T, U]& operator*() const_iterator operator++() const_iterator operator--() const_iterator operator++(int) const_iterator operator--(int) bint operator==(iterator) bint operator==(const_iterator) bint operator!=(iterator) bint operator!=(const_iterator) cppclass const_reverse_iterator cppclass reverse_iterator: reverse_iterator() except + reverse_iterator(reverse_iterator&) except + # correct would be value_type& but this does not work # well with cython's code gen pair[T, U]& operator*() reverse_iterator operator++() reverse_iterator operator--() reverse_iterator operator++(int) reverse_iterator operator--(int) bint operator==(reverse_iterator) bint operator==(const_reverse_iterator) bint operator!=(reverse_iterator) bint operator!=(const_reverse_iterator) cppclass const_reverse_iterator: const_reverse_iterator() except + const_reverse_iterator(reverse_iterator&) except + operator=(reverse_iterator&) except + # correct would be const value_type& but this does not work # well with cython's code gen const pair[T, U]& operator*() const_reverse_iterator operator++() const_reverse_iterator operator--() const_reverse_iterator operator++(int) const_reverse_iterator operator--(int) bint operator==(reverse_iterator) bint operator==(const_reverse_iterator) bint operator!=(reverse_iterator) bint operator!=(const_reverse_iterator) multimap() except + multimap(const multimap&) except + #multimap(key_compare&) #multimap& operator=(multimap&) bint operator==(const multimap&, const multimap&) bint operator!=(const multimap&, const multimap&) bint operator<(const multimap&, const multimap&) bint operator>(const multimap&, const multimap&) bint operator<=(const multimap&, const multimap&) bint operator>=(const multimap&, const multimap&) iterator begin() const_iterator const_begin "begin"() const_iterator cbegin() void clear() size_t count(const T&) bint empty() iterator end() const_iterator const_end "end"() const_iterator cend() pair[iterator, iterator] equal_range(const T&) pair[const_iterator, const_iterator] const_equal_range "equal_range"(const T&) iterator erase(iterator) iterator const_erase "erase"(const_iterator) iterator erase(const_iterator, const_iterator) size_t erase(const T&) iterator find(const T&) const_iterator const_find "find"(const T&) iterator insert(const pair[T, U]&) except + iterator insert(const_iterator, const pair[T, U]&) except + void insert[InputIt](InputIt, InputIt) except + #key_compare key_comp() iterator lower_bound(const T&) const_iterator const_lower_bound "lower_bound"(const T&) size_t max_size() reverse_iterator rbegin() const_reverse_iterator const_rbegin "rbegin"() const_reverse_iterator crbegin() reverse_iterator rend() const_reverse_iterator const_rend "rend"() const_reverse_iterator crend() size_t size() void swap(multimap&) iterator upper_bound(const T&) const_iterator const_upper_bound "upper_bound"(const T&) #value_compare value_comp() bint contains(const T&)