mirror of
https://github.com/boostorg/container.git
synced 2025-08-03 14:34:27 +02:00
Simplified swapping
This commit is contained in:
@@ -111,8 +111,7 @@ class basic_string_base
|
|||||||
~basic_string_base()
|
~basic_string_base()
|
||||||
{
|
{
|
||||||
if(!this->is_short()){
|
if(!this->is_short()){
|
||||||
this->deallocate_block();
|
this->deallocate(this->priv_long_addr(), this->priv_long_storage());
|
||||||
this->is_short(true);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -131,15 +130,14 @@ class basic_string_base
|
|||||||
|
|
||||||
long_t(const long_t &other)
|
long_t(const long_t &other)
|
||||||
{
|
{
|
||||||
this->is_short = other.is_short;
|
this->is_short = false;
|
||||||
length = other.length;
|
length = other.length;
|
||||||
storage = other.storage;
|
storage = other.storage;
|
||||||
start = other.start;
|
start = other.start;
|
||||||
}
|
}
|
||||||
|
|
||||||
long_t &operator =(const long_t &other)
|
long_t &operator= (const long_t &other)
|
||||||
{
|
{
|
||||||
this->is_short = other.is_short;
|
|
||||||
length = other.length;
|
length = other.length;
|
||||||
storage = other.storage;
|
storage = other.storage;
|
||||||
start = other.start;
|
start = other.start;
|
||||||
@@ -420,21 +418,19 @@ class basic_string_base
|
|||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
short_t short_backup(this->members_.m_repr.short_repr());
|
short_t short_backup(this->members_.m_repr.short_repr());
|
||||||
long_t long_backup (other.members_.m_repr.long_repr());
|
this->members_.m_repr.short_repr().~short_t();
|
||||||
|
::new(&this->members_.m_repr.long_repr()) long_t(other.members_.m_repr.long_repr());
|
||||||
other.members_.m_repr.long_repr().~long_t();
|
other.members_.m_repr.long_repr().~long_t();
|
||||||
::new(&this->members_.m_repr.long_repr()) long_t;
|
::new(&other.members_.m_repr.short_repr()) short_t(short_backup);
|
||||||
this->members_.m_repr.long_repr() = long_backup;
|
|
||||||
other.members_.m_repr.short_repr() = short_backup;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
if(other.is_short()){
|
if(other.is_short()){
|
||||||
short_t short_backup(other.members_.m_repr.short_repr());
|
short_t short_backup(other.members_.m_repr.short_repr());
|
||||||
long_t long_backup (this->members_.m_repr.long_repr());
|
other.members_.m_repr.short_repr().~short_t();
|
||||||
|
::new(&other.members_.m_repr.long_repr()) long_t(this->members_.m_repr.long_repr());
|
||||||
this->members_.m_repr.long_repr().~long_t();
|
this->members_.m_repr.long_repr().~long_t();
|
||||||
::new(&other.members_.m_repr.long_repr()) long_t;
|
::new(&this->members_.m_repr.short_repr()) short_t(short_backup);
|
||||||
other.members_.m_repr.long_repr() = long_backup;
|
|
||||||
this->members_.m_repr.short_repr() = short_backup;
|
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
boost::adl_move_swap(this->members_.m_repr.long_repr(), other.members_.m_repr.long_repr());
|
boost::adl_move_swap(this->members_.m_repr.long_repr(), other.members_.m_repr.long_repr());
|
||||||
|
Reference in New Issue
Block a user