mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-02-24 05:09:19 +08:00
sso_string_base.h (_M_swap): Rewrite.
2005-10-19 Paolo Carlini <pcarlini@suse.de> * include/ext/sso_string_base.h (_M_swap): Rewrite. From-SVN: r105654
This commit is contained in:
parent
c9218d26da
commit
7058c3be1a
@ -1,3 +1,7 @@
|
|||||||
|
2005-10-19 Paolo Carlini <pcarlini@suse.de>
|
||||||
|
|
||||||
|
* include/ext/sso_string_base.h (_M_swap): Rewrite.
|
||||||
|
|
||||||
2005-10-19 Paolo Carlini <pcarlini@suse.de>
|
2005-10-19 Paolo Carlini <pcarlini@suse.de>
|
||||||
|
|
||||||
* include/ext/rc_string_base.h (_S_terminal): Remove.
|
* include/ext/rc_string_base.h (_S_terminal): Remove.
|
||||||
|
@ -248,55 +248,63 @@ namespace __gnu_cxx
|
|||||||
__sso_string_base<_CharT, _Traits, _Alloc>::
|
__sso_string_base<_CharT, _Traits, _Alloc>::
|
||||||
_M_swap(__sso_string_base& __rcs)
|
_M_swap(__sso_string_base& __rcs)
|
||||||
{
|
{
|
||||||
const bool __local = _M_is_local();
|
if (_M_is_local())
|
||||||
const bool __rcs_local = __rcs._M_is_local();
|
if (__rcs._M_is_local())
|
||||||
|
{
|
||||||
if (__local && __rcs_local)
|
if (_M_length() && __rcs._M_length())
|
||||||
{
|
{
|
||||||
_CharT __tmp_data[_S_local_capacity + 1];
|
_CharT __tmp_data[_S_local_capacity + 1];
|
||||||
const size_type __tmp_length = __rcs._M_length();
|
traits_type::copy(__tmp_data, __rcs._M_local_data,
|
||||||
_S_copy(__tmp_data, __rcs._M_data(), __rcs._M_length() + 1);
|
__rcs._M_length() + 1);
|
||||||
__rcs._M_length(_M_length());
|
traits_type::copy(__rcs._M_local_data, _M_local_data,
|
||||||
_S_copy(__rcs._M_data(), _M_data(), _M_length() + 1);
|
_M_length() + 1);
|
||||||
_M_length(__tmp_length);
|
traits_type::copy(_M_local_data, __tmp_data,
|
||||||
_S_copy(_M_data(), __tmp_data, __tmp_length + 1);
|
__rcs._M_length() + 1);
|
||||||
}
|
}
|
||||||
else if (__local && !__rcs_local)
|
else if (__rcs._M_length())
|
||||||
{
|
{
|
||||||
const size_type __tmp_capacity = __rcs._M_allocated_capacity;
|
traits_type::copy(_M_local_data, __rcs._M_local_data,
|
||||||
const size_type __tmp_length = __rcs._M_length();
|
__rcs._M_length() + 1);
|
||||||
_CharT* __tmp_ptr = __rcs._M_data();
|
traits_type::assign(__rcs._M_local_data[0], _CharT());
|
||||||
__rcs._M_data(__rcs._M_local_data);
|
}
|
||||||
_S_copy(__rcs._M_data(), _M_data(), _M_length() + 1);
|
else if (_M_length())
|
||||||
__rcs._M_length(_M_length());
|
{
|
||||||
_M_data(__tmp_ptr);
|
traits_type::copy(__rcs._M_local_data, _M_local_data,
|
||||||
_M_length(__tmp_length);
|
_M_length() + 1);
|
||||||
_M_capacity(__tmp_capacity);
|
traits_type::assign(_M_local_data[0], _CharT());
|
||||||
}
|
}
|
||||||
else if (!__local && __rcs_local)
|
}
|
||||||
{
|
else
|
||||||
const size_type __tmp_capacity = _M_allocated_capacity;
|
{
|
||||||
const size_type __tmp_length = _M_length();
|
const size_type __tmp_capacity = __rcs._M_allocated_capacity;
|
||||||
_CharT* __tmp_ptr = _M_data();
|
_S_copy(__rcs._M_local_data, _M_local_data, _M_length() + 1);
|
||||||
_M_data(_M_local_data);
|
_M_data(__rcs._M_data());
|
||||||
_S_copy(_M_data(), __rcs._M_data(), __rcs._M_length() + 1);
|
__rcs._M_data(__rcs._M_local_data);
|
||||||
_M_length(__rcs._M_length());
|
_M_capacity(__tmp_capacity);
|
||||||
__rcs._M_data(__tmp_ptr);
|
}
|
||||||
__rcs._M_length(__tmp_length);
|
|
||||||
__rcs._M_capacity(__tmp_capacity);
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
const size_type __tmp_capacity = _M_allocated_capacity;
|
const size_type __tmp_capacity = _M_allocated_capacity;
|
||||||
const size_type __tmp_length = _M_length();
|
if (__rcs._M_is_local())
|
||||||
_CharT* __tmp_ptr = _M_data();
|
{
|
||||||
_M_data(__rcs._M_data());
|
_S_copy(_M_local_data, __rcs._M_local_data,
|
||||||
_M_length(__rcs._M_length());
|
__rcs._M_length() + 1);
|
||||||
_M_capacity(__rcs._M_allocated_capacity);
|
__rcs._M_data(_M_data());
|
||||||
__rcs._M_data(__tmp_ptr);
|
_M_data(_M_local_data);
|
||||||
__rcs._M_length(__tmp_length);
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
_CharT* __tmp_ptr = _M_data();
|
||||||
|
_M_data(__rcs._M_data());
|
||||||
|
__rcs._M_data(__tmp_ptr);
|
||||||
|
_M_capacity(__rcs._M_allocated_capacity);
|
||||||
|
}
|
||||||
__rcs._M_capacity(__tmp_capacity);
|
__rcs._M_capacity(__tmp_capacity);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const size_type __tmp_length = _M_length();
|
||||||
|
_M_length(__rcs._M_length());
|
||||||
|
__rcs._M_length(__tmp_length);
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename _CharT, typename _Traits, typename _Alloc>
|
template<typename _CharT, typename _Traits, typename _Alloc>
|
||||||
|
Loading…
Reference in New Issue
Block a user