Commit 91eab378 by Paolo Carlini Committed by Paolo Carlini

basic_string.h (_M_replace_aux, [...]): Define inline here.

2004-01-25  Paolo Carlini  <pcarlini@suse.de>

	* include/bits/basic_string.h (_M_replace_aux, _M_replace_safe):
	Define inline here.
	* include/bits/basic_string.tcc (_M_replace_aux, _M_replace_safe):
	Move inline.

	* include/bits/basic_string.tcc: Very minor tweaks.

From-SVN: r76592
parent 7e43c821
2004-01-25 Paolo Carlini <pcarlini@suse.de>
* include/bits/basic_string.h (_M_replace_aux, _M_replace_safe):
Define inline here.
* include/bits/basic_string.tcc (_M_replace_aux, _M_replace_safe):
Move inline.
* include/bits/basic_string.tcc: Very minor tweaks.
2004-01-25 Paolo Carlini <pcarlini@suse.de>
* testsuite/performance/string_append.cc: Increase number
of iterations.
......
......@@ -1361,11 +1361,26 @@ namespace std
_InputIterator __k2, __false_type);
basic_string&
_M_replace_aux(size_type __pos1, size_type __n1, size_type __n2, _CharT __c);
_M_replace_aux(size_type __pos1, size_type __n1, size_type __n2,
_CharT __c)
{
if (this->max_size() - (this->size() - __n1) < __n2)
__throw_length_error("basic_string::_M_replace_aux");
_M_mutate(__pos1, __n1, __n2);
if (__n2)
traits_type::assign(_M_data() + __pos1, __n2, __c);
return *this;
}
basic_string&
_M_replace_safe(size_type __pos1, size_type __n1, const _CharT* __s,
size_type __n2);
size_type __n2)
{
_M_mutate(__pos1, __n1, __n2);
if (__n2)
traits_type::copy(_M_data() + __pos1, __s, __n2);
return *this;
}
// _S_construct_aux is used to implement the 21.3.1 para 15 which
// requires special behaviour if _InIter is an integral type
......
......@@ -142,7 +142,7 @@ namespace std
}
template<typename _CharT, typename _Traits, typename _Alloc>
template <class _InIterator>
template <typename _InIterator>
_CharT*
basic_string<_CharT, _Traits, _Alloc>::
_S_construct(_InIterator __beg, _InIterator __end, const _Alloc& __a,
......@@ -391,7 +391,7 @@ namespace std
|| _M_rep()->_M_is_shared() || __new_size > capacity())
{
// Must reallocate.
allocator_type __a = get_allocator();
const allocator_type __a = get_allocator();
// See below (_S_create) for the meaning and value of these
// constants.
const size_type __pagesize = 4096;
......@@ -439,7 +439,7 @@ namespace std
// Make sure we don't shrink below the current size
if (__res < this->size())
__res = this->size();
allocator_type __a = get_allocator();
const allocator_type __a = get_allocator();
_CharT* __tmp = _M_rep()->_M_clone(__a, __res - this->size());
_M_rep()->_M_dispose(__a);
_M_data(__tmp);
......@@ -599,34 +599,6 @@ namespace std
__s.size());
}
// This helper doesn't buffer internally and can be used in "safe" situations,
// i.e., when source and destination ranges are known to not overlap.
template<typename _CharT, typename _Traits, typename _Alloc>
basic_string<_CharT, _Traits, _Alloc>&
basic_string<_CharT, _Traits, _Alloc>::
_M_replace_safe(size_type __pos1, size_type __n1, const _CharT* __s,
size_type __n2)
{
_M_mutate(__pos1, __n1, __n2);
if (__n2)
traits_type::copy(_M_data() + __pos1, __s, __n2);
return *this;
}
template<typename _CharT, typename _Traits, typename _Alloc>
basic_string<_CharT, _Traits, _Alloc>&
basic_string<_CharT, _Traits, _Alloc>::
_M_replace_aux(size_type __pos1, size_type __n1, size_type __n2,
_CharT __c)
{
if (this->max_size() - (this->size() - __n1) < __n2)
__throw_length_error("basic_string::_M_replace_aux");
_M_mutate(__pos1, __n1, __n2);
if (__n2)
traits_type::assign(_M_data() + __pos1, __n2, __c);
return *this;
}
template<typename _CharT, typename _Traits, typename _Alloc>
basic_string<_CharT, _Traits, _Alloc>&
basic_string<_CharT, _Traits, _Alloc>::
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment