@ -76,27 +76,19 @@ class vector {
typedef std : : reverse_iterator < const_iterator > const_reverse_iterator ;
typedef std : : reverse_iterator < const_iterator > const_reverse_iterator ;
/* INFER SPECIFIC HELPER FUNCTIONS */
/* INFER SPECIFIC HELPER FUNCTIONS */
bool isEmpty = true ;
// required to keep sizeof(std::vector) same as in standard
// required to keep sizeof(std::vector) same as in standard
value_type * beginPtr = nullptr ;
value_type * beginPtr = nullptr ;
value_type * endPtr = nullptr ;
value_type * endPtr = nullptr ;
value_type * __ignore ;
value_type * get ( ) const {
value_type * get ( ) const { return beginPtr ; }
if ( isEmpty ) {
return nullptr ;
}
// infer will angelically assume that __infer_skip__get_nondet_val
// returns non-null with unknown value which means there will be no
// null dereference
return __infer_skip__get_nondet_val < value_type > ( ) ;
}
void allocate ( size_type size ) {
void allocate ( size_type size ) {
if ( size > 0 ) {
if ( size > 0 ) {
isEmpty = false ;
beginPtr = __infer_skip__get_nondet_val < value_type > ( ) ;
} else {
} else {
isEmpty = true ;
beginPtr = nullptr ;
}
}
}
}
@ -200,7 +192,7 @@ class vector {
const_reverse_iterator crend ( ) const noexcept { return rend ( ) ; }
const_reverse_iterator crend ( ) const noexcept { return rend ( ) ; }
size_type size ( ) const noexcept {
size_type size ( ) const noexcept {
if ( ! isEmpty ) {
if ( beginPtr ) {
return 10 ;
return 10 ;
}
}
return 0 ;
return 0 ;
@ -208,7 +200,7 @@ class vector {
size_type capacity ( ) const noexcept { }
size_type capacity ( ) const noexcept { }
bool empty ( ) const noexcept { return isEmpty ; }
bool empty ( ) const noexcept { return beginPtr = = nullptr ; }
size_type max_size ( ) const noexcept ;
size_type max_size ( ) const noexcept ;
void reserve ( size_type __n ) ;
void reserve ( size_type __n ) ;
void shrink_to_fit ( ) noexcept ;
void shrink_to_fit ( ) noexcept ;
@ -259,7 +251,7 @@ class vector {
iterator erase ( const_iterator __position ) ;
iterator erase ( const_iterator __position ) ;
iterator erase ( const_iterator __first , const_iterator __last ) ;
iterator erase ( const_iterator __first , const_iterator __last ) ;
void clear ( ) noexcept { isEmpty = true ; }
void clear ( ) noexcept { allocate ( 0 ) ; }
void resize ( size_type __sz ) ;
void resize ( size_type __sz ) ;
void resize ( size_type __sz , const_reference __x ) ;
void resize ( size_type __sz , const_reference __x ) ;
@ -326,25 +318,25 @@ vector<_Tp, _Allocator>::vector(
template < class _Tp , class _Allocator >
template < class _Tp , class _Allocator >
vector < _Tp , _Allocator > : : vector ( const vector & __x ) {
vector < _Tp , _Allocator > : : vector ( const vector & __x ) {
isEmpty = __x . isEmpty ;
beginPtr = __x . beginPtr ;
}
}
template < class _Tp , class _Allocator >
template < class _Tp , class _Allocator >
vector < _Tp , _Allocator > : : vector ( const vector & __x , const allocator_type & __a ) {
vector < _Tp , _Allocator > : : vector ( const vector & __x , const allocator_type & __a ) {
isEmpty = __x . isEmpty ;
beginPtr = __x . beginPtr ;
}
}
template < class _Tp , class _Allocator >
template < class _Tp , class _Allocator >
inline vector < _Tp , _Allocator > : : vector ( vector & & __x ) noexcept {
inline vector < _Tp , _Allocator > : : vector ( vector & & __x ) noexcept {
isEmpty = __x . isEmpty ;
beginPtr = __x . beginPtr ;
__x . isEmpty = true ;
__x . beginPtr = nullptr ;
}
}
template < class _Tp , class _Allocator >
template < class _Tp , class _Allocator >
inline vector < _Tp , _Allocator > : : vector ( vector & & __x ,
inline vector < _Tp , _Allocator > : : vector ( vector & & __x ,
const allocator_type & __a ) {
const allocator_type & __a ) {
isEmpty = __x . isEmpty ;
beginPtr = __x . beginPtr ;
__x . isEmpty = true ;
__x . beginPtr = nullptr ;
}
}
template < class _Tp , class _Allocator >
template < class _Tp , class _Allocator >
@ -363,15 +355,15 @@ inline vector<_Tp, _Allocator>& vector<_Tp, _Allocator>::operator=(
vector & & __x ) noexcept /*((__noexcept_move_assign_container<_Allocator,
vector & & __x ) noexcept /*((__noexcept_move_assign_container<_Allocator,
__alloc_traits > : : value ) ) */
__alloc_traits > : : value ) ) */
{
{
isEmpty = __x . isEmpty ;
beginPtr = __x . beginPtr ;
__x . isEmpty = true ;
__x . beginPtr = nullptr ;
return * this ;
return * this ;
}
}
template < class _Tp , class _Allocator >
template < class _Tp , class _Allocator >
inline vector < _Tp , _Allocator > & vector < _Tp , _Allocator > : : operator = (
inline vector < _Tp , _Allocator > & vector < _Tp , _Allocator > : : operator = (
const vector & __x ) {
const vector & __x ) {
isEmpty = __x . isEmpty ;
beginPtr = __x . beginPtr ;
return * this ;
return * this ;
}
}
@ -516,7 +508,7 @@ typename vector<_Tp, _Allocator>::iterator vector<_Tp, _Allocator>::emplace(
template < class _Tp , class _Allocator >
template < class _Tp , class _Allocator >
typename vector < _Tp , _Allocator > : : iterator vector < _Tp , _Allocator > : : insert (
typename vector < _Tp , _Allocator > : : iterator vector < _Tp , _Allocator > : : insert (
const_iterator __position , size_type __n , const_reference __x ) {
const_iterator __position , size_type __n , const_reference __x ) {
if ( isEmpty ) {
if ( empty ( ) ) {
allocate ( __n ) ;
allocate ( __n ) ;
}
}
}
}
@ -545,9 +537,9 @@ void vector<_Tp, _Allocator>::resize(size_type __sz, const_reference __x) {
template < class _Tp , class _Allocator >
template < class _Tp , class _Allocator >
void vector < _Tp , _Allocator > : : swap ( vector & __x ) {
void vector < _Tp , _Allocator > : : swap ( vector & __x ) {
bool tmp = __x . isEmpty ;
value_type * tmp = __x . beginPtr ;
__x . isEmpty = isEmpty ;
__x . beginPtr = beginPtr ;
isEmpty = tmp ;
beginPtr = tmp ;
}
}
template < class _Allocator >
template < class _Allocator >