BShape: add move construction and assignment support

GCC 2 support is also provided with `MoveFrom` method.

Change-Id: Ifedaf0b1406a5a2cb6bf3465249cea0f360e06d6
Reviewed-on: https://review.haiku-os.org/c/haiku/+/8531
Tested-by: Commit checker robot <no-reply+buildbot@haiku-os.org>
Reviewed-by: waddlesplash <waddlesplash@gmail.com>
This commit is contained in:
X512 2024-11-09 22:07:47 +09:00 committed by waddlesplash
parent 80fcf2df19
commit e892302909
2 changed files with 41 additions and 0 deletions

View File

@ -50,6 +50,9 @@ class BShape : public BArchivable {
public:
BShape();
BShape(const BShape& other);
#if defined(__cplusplus) && __cplusplus >= 201103L
BShape(BShape&& other);
#endif
BShape(BMessage* archive);
virtual ~BShape();
@ -58,11 +61,15 @@ public:
bool deep = true) const;
BShape& operator=(const BShape& other);
#if defined(__cplusplus) && __cplusplus >= 201103L
BShape& operator=(BShape&& other);
#endif
bool operator==(const BShape& other) const;
bool operator!=(const BShape& other) const;
void Clear();
void MoveFrom(BShape& other);
BRect Bounds() const;
BPoint CurrentPosition() const;

View File

@ -143,6 +143,15 @@ BShape::BShape(const BShape& other)
}
#if defined(__cplusplus) && __cplusplus >= 201103L
BShape::BShape(BShape&& other)
{
InitData();
MoveFrom(other);
}
#endif
BShape::BShape(BMessage* archive)
:
BArchivable(archive)
@ -250,6 +259,17 @@ BShape::operator=(const BShape& other)
}
#if defined(__cplusplus) && __cplusplus >= 201103L
BShape&
BShape::operator=(BShape&& other)
{
MoveFrom(other);
return *this;
}
#endif
bool
BShape::operator==(const BShape& other) const
{
@ -303,6 +323,20 @@ BShape::Clear()
}
void
BShape::MoveFrom(BShape& other)
{
fState = other.fState;
fBuildingOp = other.fBuildingOp;
shape_data* data = (shape_data*)fPrivateData;
fPrivateData = other.fPrivateData;
other.fPrivateData = data;
other.Clear();
}
BRect
BShape::Bounds() const
{