23 #ifndef CPROVER_UTIL_SORTED_VECTOR_H 24 #define CPROVER_UTIL_SORTED_VECTOR_H 25 #define VERSION_SORTED_VECTOR_ 0x00010010 37 bool bNoDuplicates=
false,
38 class Pr = std::less<K>,
39 class A = std::allocator<K> >
44 typedef typename std::vector<K, A>
Cont;
60 typedef std::pair<iterator, iterator>
Pairii_;
61 typedef std::pair<const_iterator, const_iterator>
Paircc_;
63 typedef std::pair<iterator, bool>
Pairib_;
67 #if (_MSC_VER >= 1300) 70 const Pr& pred = Pr(),
const A& al = A())
75 const Pr& pred = Pr(),
const A& al = A())
91 const_iterator
begin()
const {
return vec_.begin(); }
93 const_iterator
end()
const {
return vec_.end();}
95 const_reverse_iterator
rbegin()
const 96 {
return vec_.rbegin();}
99 const_reverse_iterator
rend()
const 100 {
return vec_.rend();}
107 const_reference
at(size_type p)
const {
return vec_.at(p);}
108 reference
at(size_type p) {
return vec_.at(p);}
110 {
return vec_.operator[](p);}
119 void assign(const_iterator first, const_iterator beyond)
120 {
vec_.assign(first,beyond);}
121 void assign(size_type n,
const K& x = K())
138 iterator
insert(iterator it,
const value_type& x)
158 #if (_MSC_VER >= 1300) 160 void insert(It first, It beyond)
162 size_type n= std::distance(first,beyond);
164 for( ;first!=beyond;++first){
169 void insert(const_iterator first, const_iterator beyond)
171 size_type n= std::distance(first,beyond);
173 for( ;first!=beyond;++first){
179 iterator
erase(iterator first, iterator beyond)
180 {
return vec_.erase(first,beyond);}
184 size_type n= std::distance(begEnd.first,begEnd.second);
185 erase(begEnd.first,begEnd.second);
190 bool Eq_(
const Myt_& x)
const 193 bool Lt_(
const Myt_& x)
const 194 {
return (std::lexicographical_compare(
begin(),
end(),
199 friend void swap(Myt_& x, Myt_& Y_)
208 const_iterator
find(
const K& k)
const 213 size_type n = std::distance(Ans_.first, Ans_.second);
247 iterator front_=
vec_.begin(),out_=
vec_.end(),end_=
vec_.end();
249 for(iterator prev_; (prev_=front_)!=end_ && ++front_!=end_; ){
256 if(!bCopy_){out_=front_;bCopy_=
true;}
262 {
return vec_.insert(p,x);}
275 template<
class K,
bool bNoDuplicates,
class Pr,
class A>
inline 279 template<
class K,
bool bNoDuplicates,
class Pr,
class A>
inline 282 {
return !(x == Y_); }
283 template<
class K,
bool bNoDuplicates,
class Pr,
class A>
inline 284 bool operator<(const sorted_vector<K, bNoDuplicates,Pr,A>& x,
287 template<
class K,
bool bNoDuplicates,
class Pr,
class A>
inline 291 template<
class K,
bool bNoDuplicates,
class Pr,
class A>
inline 292 bool operator<=(const sorted_vector<K, bNoDuplicates,Pr,A>& x,
295 template<
class K,
bool bNoDuplicates,
class Pr,
class A>
inline 298 {
return (!(x < Y_)); }
302 #elif VERSION_SORTED_VECTOR_ != 0x00010010 303 #error You have included two sorted_vector.h with different version numbers 304 #endif // CPROVER_UTIL_SORTED_VECTOR_H const_reference front() const
const_iterator upper_bound(const K &k) const
value_compare value_comp() const
bool Eq_(const Myt_ &x) const
sorted_vector(const Pr &pred=Pr(), const A &al=A())
sorted_vector< K, bNoDuplicates, Pr, A > Myt_
bool operator>(const sorted_vector< K, bNoDuplicates, Pr, A > &x, const sorted_vector< K, bNoDuplicates, Pr, A > &Y_)
size_type erase(const K &key)
iterator InsertImpl_(iterator p, const value_type &x)
bool KeyCompare_Geq_(const K &ty0, const K &ty1)
const_reference operator[](size_type p) const
Pairii_ equal_range(const K &k)
const_reverse_iterator rend() const
reference operator[](size_type p)
const_iterator find(const K &k) const
sorted_vector(const_iterator first, const_iterator beyond, const Pr &pred=Pr(), const A &al=A())
Cont::size_type size_type
unsignedbv_typet size_type()
std::pair< iterator, bool > Pairib_
key_compare key_comp() const
Cont::const_reference const_reference
Cont::const_reverse_iterator const_reverse_iterator
const_reverse_iterator rbegin() const
void insert(const_iterator first, const_iterator beyond)
Myt_ & operator=(const Myt_ &x)
Cont::const_iterator const_iterator
const_reference back() const
reverse_iterator rbegin()
void assign(size_type n, const K &x=K())
void reserve(size_type n)
size_type count(const K &k) const
std::pair< const_iterator, const_iterator > Paircc_
Cont::value_type value_type
Paircc_ equal_range(const K &k) const
Myt_ & operator=(const Cont &x)
reference at(size_type p)
iterator lower_bound(const K &k)
iterator find(const K &k)
iterator erase(iterator p)
Pairib_ insert(const value_type &x)
iterator upper_bound(const K &k)
friend void swap(Myt_ &x, Myt_ &Y_)
Cont::difference_type difference_type
bool KeyCompare_Gt_(const K &ty0, const K &ty1)
const_iterator lower_bound(const K &k) const
iterator insert(iterator it, const value_type &x)
iterator erase(iterator first, iterator beyond)
Cont::allocator_type allocator_type
size_type max_size() const
const_iterator end() const
sorted_vector(const Myt_ &x)
bool KeyCompare_Leq_(const K &ty0, const K &ty1)
void assign(const_iterator first, const_iterator beyond)
Cont::reverse_iterator reverse_iterator
bool operator==(const sorted_vector< K, bNoDuplicates, Pr, A > &x, const sorted_vector< K, bNoDuplicates, Pr, A > &Y_)
std::pair< iterator, iterator > Pairii_
const_reference at(size_type p) const
const_iterator begin() const
Cont::reference reference
bool operator>=(const sorted_vector< K, bNoDuplicates, Pr, A > &x, const sorted_vector< K, bNoDuplicates, Pr, A > &Y_)
bool operator!=(const sorted_vector< K, bNoDuplicates, Pr, A > &x, const sorted_vector< K, bNoDuplicates, Pr, A > &Y_)
bool Lt_(const Myt_ &x) const