38 #ifndef BLOCXX_SORTED_VECTOR_SET_HPP_
39 #define BLOCXX_SORTED_VECTOR_SET_HPP_
40 #include "blocxx/BLOCXX_config.h"
50 template<
class T,
class Compare >
51 class SortedVectorSet;
53 template<
class T,
class Compare>
54 inline bool operator==(
const SortedVectorSet<T, Compare>& x,
55 const SortedVectorSet<T, Compare>& y);
57 template<
class T,
class Compare>
58 inline bool operator<(
const SortedVectorSet<T, Compare>& x,
59 const SortedVectorSet<T, Compare>& y);
61 template<
class T,
class Compare = std::less<T> >
66 #pragma warning (push)
67 #pragma warning (disable: 4251)
69 COWReference<container_t>
m_impl;
79 typedef typename container_t::pointer
pointer;
83 typedef typename container_t::iterator
iterator;
87 typedef typename container_t::size_type
size_type;
95 template <
class InputIterator>
118 return std::pair<iterator, bool>(
i,
false);
122 return std::pair<iterator, bool>(
m_impl->insert(
i, x),
true);
129 template <
class InputIterator>
130 void insert(InputIterator first, InputIterator last)
198 return std::lower_bound(
m_impl->begin(),
m_impl->end(), x, Compare());
202 return std::lower_bound(
m_impl->begin(),
m_impl->end(), x, Compare());
206 return std::upper_bound(
m_impl->begin(),
m_impl->end(), x, Compare());
210 return std::upper_bound(
m_impl->begin(),
m_impl->end(), x, Compare());
213 std::pair<iterator, iterator>
216 return std::equal_range(
m_impl->begin(),
m_impl->end(), x, Compare());
219 std::pair<const_iterator, const_iterator>
222 return std::equal_range(
m_impl->begin(),
m_impl->end(), x, Compare());
225 friend bool operator== <>(
const SortedVectorSet<T, Compare>& x,
234 return (!Compare()(x, y) && !Compare()(y, x));
237 template<
class T,
class Compare>
241 return *x.m_impl == *y.m_impl;
243 template<
class T,
class Compare>
247 return *x.m_impl < *y.m_impl;
249 template <
class T,
class Compare>