diff options
author | Paolo Carlini <paolo.carlini@oracle.com> | 2013-07-01 16:17:46 +0000 |
---|---|---|
committer | Paolo Carlini <paolo@gcc.gnu.org> | 2013-07-01 16:17:46 +0000 |
commit | 019fdb7923b71f4fdac33e7f2cef3e0ebc0ce205 (patch) | |
tree | 954d3c967b1f7da29c4c24c4a97ea870e97aa70a /libstdc++-v3/include/ext | |
parent | 31f8442be7b47d847ec33b2bc3585bb184b7609b (diff) | |
download | gcc-019fdb7923b71f4fdac33e7f2cef3e0ebc0ce205.zip gcc-019fdb7923b71f4fdac33e7f2cef3e0ebc0ce205.tar.gz gcc-019fdb7923b71f4fdac33e7f2cef3e0ebc0ce205.tar.bz2 |
stl_list.h (list<>::insert(iterator, size_type, const value_type&), [...]): Adjust C++11 signatures to take const_iterator(s).
2013-07-01 Paolo Carlini <paolo.carlini@oracle.com>
* include/bits/stl_list.h (list<>::insert(iterator,
size_type, const value_type&), list<>::insert(iterator,
initializer_list<>), list<>::insert(iterator, _InputIterator,
_InputIterator), list<>::splice(iterator, list&&),
list<>::splice(iterator, list&), list<>::splice(iterator, list&&,
iterator), list<>::splice(iterator, list&, iterator),
list<>::splice(iterator, list&&, iterator, iterator),
list<>::splice(iterator, list&, iterator, iterator)): Adjust C++11
signatures to take const_iterator(s).
* include/bits/list.tcc (list<>::insert(const_iterator, size_type,
const value_type&), list<>::insert(const_iterator, _InputIterator,
_InputIterator)): Define.
* include/ext/vstring.h (__versa_string<>::insert(iterator,
size_type, _CharT), __versa_string<>::insert(iterator,
_InputIterator, _InputIterator), __versa_string<>::insert(iterator,
std::initializer_list<>), __versa_string<>::replace(iterator,
iterator, _InputIterator, _InputIterator), __versa_string<>::
replace(iterator, iterator, std::initializer_list<>)): Adjust C++11
signatures to take const_iterator(s).
(__versa_string<>::_M_replace_dispatch): Take const_iterators.
* include/ext/vstring.tcc: Likewise.
* include/debug/list: Adjust.
* include/profile/list: Likewise.
* testsuite/23_containers/list/operations/splice/const_iterator.cc:
New.
* testsuite/23_containers/list/modifiers/insert/const_iterator.cc:
Extend.
* testsuite/ext/vstring/modifiers/insert/char/const_iterator.cc:
Likewise.
* testsuite/ext/vstring/modifiers/insert/wchar_t/const_iterator.cc:
Likewise.
* testsuite/ext/vstring/modifiers/replace/char/const_iterator.cc:
Likewise.
* testsuite/ext/vstring/modifiers/replace/wchar_t/const_iterator.cc:
Likewise.
* testsuite/23_containers/list/requirements/dr438/assign_neg.cc:
Adjust dg-error line number.
* testsuite/23_containers/list/requirements/dr438/
constructor_1_neg.cc: Likewise.
* testsuite/23_containers/list/requirements/dr438/
constructor_2_neg.cc: Likewise.
* testsuite/23_containers/list/requirements/dr438/insert_neg.cc:
Likewise.
From-SVN: r200580
Diffstat (limited to 'libstdc++-v3/include/ext')
-rw-r--r-- | libstdc++-v3/include/ext/vstring.h | 106 | ||||
-rw-r--r-- | libstdc++-v3/include/ext/vstring.tcc | 5 |
2 files changed, 93 insertions, 18 deletions
diff --git a/libstdc++-v3/include/ext/vstring.h b/libstdc++-v3/include/ext/vstring.h index c78f214..43edb53 100644 --- a/libstdc++-v3/include/ext/vstring.h +++ b/libstdc++-v3/include/ext/vstring.h @@ -916,6 +916,31 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { return this->assign(__l.begin(), __l.end()); } #endif // C++11 +#if __cplusplus >= 201103L + /** + * @brief Insert multiple characters. + * @param __p Const_iterator referencing location in string to + * insert at. + * @param __n Number of characters to insert + * @param __c The character to insert. + * @return Iterator referencing the first inserted char. + * @throw std::length_error If new length exceeds @c max_size(). + * + * Inserts @a __n copies of character @a __c starting at the + * position referenced by iterator @a __p. If adding + * characters causes the length to exceed max_size(), + * length_error is thrown. The value of the string doesn't + * change if an error is thrown. + */ + iterator + insert(const_iterator __p, size_type __n, _CharT __c) + { + _GLIBCXX_DEBUG_PEDASSERT(__p >= _M_ibegin() && __p <= _M_iend()); + const size_type __pos = __p - _M_ibegin(); + this->replace(__p, __p, __n, __c); + return iterator(this->_M_data() + __pos); + } +#else /** * @brief Insert multiple characters. * @param __p Iterator referencing location in string to insert at. @@ -932,12 +957,16 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION void insert(iterator __p, size_type __n, _CharT __c) { this->replace(__p, __p, __n, __c); } +#endif +#if __cplusplus >= 201103L /** * @brief Insert a range of characters. - * @param __p Iterator referencing location in string to insert at. + * @param __p Const_iterator referencing location in string to + * insert at. * @param __beg Start of range. * @param __end End of range. + * @return Iterator referencing the first inserted char. * @throw std::length_error If new length exceeds @c max_size(). * * Inserts characters in range [beg,end). If adding characters @@ -945,26 +974,47 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION * thrown. The value of the string doesn't change if an error * is thrown. */ -#if __cplusplus >= 201103L template<class _InputIterator, typename = std::_RequireInputIter<_InputIterator>> + iterator + insert(const_iterator __p, _InputIterator __beg, _InputIterator __end) + { + _GLIBCXX_DEBUG_PEDASSERT(__p >= _M_ibegin() && __p <= _M_iend()); + const size_type __pos = __p - _M_ibegin(); + this->replace(__p, __p, __beg, __end); + return iterator(this->_M_data() + __pos); + } #else + /** + * @brief Insert a range of characters. + * @param __p Iterator referencing location in string to insert at. + * @param __beg Start of range. + * @param __end End of range. + * @throw std::length_error If new length exceeds @c max_size(). + * + * Inserts characters in range [beg,end). If adding characters + * causes the length to exceed max_size(), length_error is + * thrown. The value of the string doesn't change if an error + * is thrown. + */ template<class _InputIterator> -#endif void insert(iterator __p, _InputIterator __beg, _InputIterator __end) { this->replace(__p, __p, __beg, __end); } +#endif #if __cplusplus >= 201103L /** * @brief Insert an initializer_list of characters. - * @param __p Iterator referencing location in string to insert at. + * @param __p Const_iterator referencing location in string to + * insert at. * @param __l The initializer_list of characters to insert. + * @return Iterator referencing the first inserted char. * @throw std::length_error If new length exceeds @c max_size(). */ - void - insert(iterator __p, std::initializer_list<_CharT> __l) - { this->insert(__p, __l.begin(), __l.end()); } + iterator + insert(const_iterator __p, std::initializer_list<_CharT> __l) + { return this->insert(__p, __l.begin(), __l.end()); } #endif // C++11 /** @@ -1421,7 +1471,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION template<class _InputIterator, typename = std::_RequireInputIter<_InputIterator>> __versa_string& - replace(iterator __i1, iterator __i2, + replace(const_iterator __i1, const_iterator __i2, _InputIterator __k1, _InputIterator __k2) { _GLIBCXX_DEBUG_PEDASSERT(_M_ibegin() <= __i1 && __i1 <= __i2 @@ -1447,7 +1497,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION // Specializations for the common case of pointer and iterator: // useful to avoid the overhead of temporary buffering in _M_replace. __versa_string& - replace(iterator __i1, iterator __i2, _CharT* __k1, _CharT* __k2) +#if __cplusplus >= 201103L + replace(const_iterator __i1, const_iterator __i2, + _CharT* __k1, _CharT* __k2) +#else + replace(iterator __i1, iterator __i2, + _CharT* __k1, _CharT* __k2) +#endif { _GLIBCXX_DEBUG_PEDASSERT(_M_ibegin() <= __i1 && __i1 <= __i2 && __i2 <= _M_iend()); @@ -1457,8 +1513,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION } __versa_string& +#if __cplusplus >= 201103L + replace(const_iterator __i1, const_iterator __i2, + const _CharT* __k1, const _CharT* __k2) +#else replace(iterator __i1, iterator __i2, const _CharT* __k1, const _CharT* __k2) +#endif { _GLIBCXX_DEBUG_PEDASSERT(_M_ibegin() <= __i1 && __i1 <= __i2 && __i2 <= _M_iend()); @@ -1468,7 +1529,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION } __versa_string& - replace(iterator __i1, iterator __i2, iterator __k1, iterator __k2) +#if __cplusplus >= 201103L + replace(const_iterator __i1, const_iterator __i2, + iterator __k1, iterator __k2) +#else + replace(iterator __i1, iterator __i2, + iterator __k1, iterator __k2) +#endif { _GLIBCXX_DEBUG_PEDASSERT(_M_ibegin() <= __i1 && __i1 <= __i2 && __i2 <= _M_iend()); @@ -1478,8 +1545,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION } __versa_string& +#if __cplusplus >= 201103L + replace(const_iterator __i1, const_iterator __i2, + const_iterator __k1, const_iterator __k2) +#else replace(iterator __i1, iterator __i2, const_iterator __k1, const_iterator __k2) +#endif { _GLIBCXX_DEBUG_PEDASSERT(_M_ibegin() <= __i1 && __i1 <= __i2 && __i2 <= _M_iend()); @@ -1502,22 +1574,24 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION * of result exceeds max_size(), length_error is thrown. The * value of the string doesn't change if an error is thrown. */ - __versa_string& replace(iterator __i1, iterator __i2, - std::initializer_list<_CharT> __l) + __versa_string& + replace(const_iterator __i1, const_iterator __i2, + std::initializer_list<_CharT> __l) { return this->replace(__i1, __i2, __l.begin(), __l.end()); } #endif // C++11 private: template<class _Integer> __versa_string& - _M_replace_dispatch(iterator __i1, iterator __i2, _Integer __n, - _Integer __val, std::__true_type) + _M_replace_dispatch(const_iterator __i1, const_iterator __i2, + _Integer __n, _Integer __val, std::__true_type) { return _M_replace_aux(__i1 - _M_ibegin(), __i2 - __i1, __n, __val); } template<class _InputIterator> __versa_string& - _M_replace_dispatch(iterator __i1, iterator __i2, _InputIterator __k1, - _InputIterator __k2, std::__false_type); + _M_replace_dispatch(const_iterator __i1, const_iterator __i2, + _InputIterator __k1, _InputIterator __k2, + std::__false_type); __versa_string& _M_replace_aux(size_type __pos1, size_type __n1, size_type __n2, diff --git a/libstdc++-v3/include/ext/vstring.tcc b/libstdc++-v3/include/ext/vstring.tcc index 2dcd295..0a80c26 100644 --- a/libstdc++-v3/include/ext/vstring.tcc +++ b/libstdc++-v3/include/ext/vstring.tcc @@ -81,8 +81,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION template<typename _InputIterator> __versa_string<_CharT, _Traits, _Alloc, _Base>& __versa_string<_CharT, _Traits, _Alloc, _Base>:: - _M_replace_dispatch(iterator __i1, iterator __i2, _InputIterator __k1, - _InputIterator __k2, std::__false_type) + _M_replace_dispatch(const_iterator __i1, const_iterator __i2, + _InputIterator __k1, _InputIterator __k2, + std::__false_type) { const __versa_string __s(__k1, __k2); const size_type __n1 = __i2 - __i1; |