[glibmm] Glib::ObjectBase, Object, Interface: Add move operators.
- From: Murray Cumming <murrayc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [glibmm] Glib::ObjectBase, Object, Interface: Add move operators.
- Date: Sat, 22 Aug 2015 19:39:27 +0000 (UTC)
commit 3261c1dea29cad27e4303b7a4d212b5351762f39
Author: Murray Cumming <murrayc murrayc com>
Date: Fri Aug 21 21:19:45 2015 +0200
Glib::ObjectBase, Object, Interface: Add move operators.
Add move constructors and move assignment operators so that derived
classes can have these too.
glib/glibmm/interface.cc | 10 ++++++++++
glib/glibmm/interface.h | 3 +++
glib/glibmm/object.cc | 10 ++++++++++
glib/glibmm/object.h | 3 +++
glib/glibmm/objectbase.cc | 18 ++++++++++++++++++
glib/glibmm/objectbase.h | 3 +++
6 files changed, 47 insertions(+), 0 deletions(-)
---
diff --git a/glib/glibmm/interface.cc b/glib/glibmm/interface.cc
index 8ed14d3..609afe7 100644
--- a/glib/glibmm/interface.cc
+++ b/glib/glibmm/interface.cc
@@ -117,6 +117,16 @@ Interface::Interface(GObject* castitem)
Interface::Interface()
{}
+Interface::Interface(Interface&& src)
+: ObjectBase(std::move(src))
+{}
+
+Interface& Interface::operator=(Interface&& src)
+{
+ ObjectBase::operator=(std::move(src));
+ return *this;
+}
+
Interface::~Interface()
{}
diff --git a/glib/glibmm/interface.h b/glib/glibmm/interface.h
index 0fc9ba6..4ebf1f6 100644
--- a/glib/glibmm/interface.h
+++ b/glib/glibmm/interface.h
@@ -45,6 +45,9 @@ public:
*/
Interface();
+ Interface(Interface&& src);
+ Interface& operator=(Interface&& src);
+
/** Called by constructors of derived classes. Provide the result of
* the Class object's init() function to ensure that it is properly
* initialized.
diff --git a/glib/glibmm/object.cc b/glib/glibmm/object.cc
index ddaa47b..ce3b3e9 100644
--- a/glib/glibmm/object.cc
+++ b/glib/glibmm/object.cc
@@ -285,6 +285,16 @@ Object::Object(GObject* castitem)
ObjectBase::initialize(castitem);
}
+Object::Object(Object&& src) noexcept
+: ObjectBase(std::move(src))
+{}
+
+Object& Object::operator=(Object&& src) noexcept
+{
+ ObjectBase::operator=(std::move(src));
+ return *this;
+}
+
Object::~Object()
{
cpp_destruction_in_progress_ = true;
diff --git a/glib/glibmm/object.h b/glib/glibmm/object.h
index 202b28e..0b275fd 100644
--- a/glib/glibmm/object.h
+++ b/glib/glibmm/object.h
@@ -107,6 +107,9 @@ public:
Object(const Object&) = delete;
Object& operator=(const Object&) = delete;
+ Object(Object&& src) noexcept;
+ Object& operator=(Object&& src) noexcept;
+
protected:
Object(); //For use by C++-only sub-types.
explicit Object(const Glib::ConstructParams& construct_params);
diff --git a/glib/glibmm/objectbase.cc b/glib/glibmm/objectbase.cc
index c1efb13..c3fddeb 100644
--- a/glib/glibmm/objectbase.cc
+++ b/glib/glibmm/objectbase.cc
@@ -90,6 +90,24 @@ void ObjectBase::initialize(GObject* castitem)
_set_current_wrapper(castitem);
}
+ObjectBase::ObjectBase(ObjectBase&& src) noexcept
+: gobject_(std::move(src.gobject_)),
+ custom_type_name_(std::move(src.custom_type_name_)),
+ cpp_destruction_in_progress_(std::move(src.custom_type_name_))
+{}
+
+ObjectBase& ObjectBase::operator=(ObjectBase&& src) noexcept
+{
+ if(gobject_)
+ unreference();
+
+ gobject_ = std::move(src.gobject_);
+ custom_type_name_ = std::move(src.custom_type_name_);
+ cpp_destruction_in_progress_ = std::move(src.custom_type_name_);
+
+ return *this;
+}
+
ObjectBase::~ObjectBase()
{
// Normally, gobject_ should always be 0 at this point, because:
diff --git a/glib/glibmm/objectbase.h b/glib/glibmm/objectbase.h
index 44fb7ad..e5407ab 100644
--- a/glib/glibmm/objectbase.h
+++ b/glib/glibmm/objectbase.h
@@ -95,6 +95,9 @@ protected:
*/
explicit ObjectBase(const std::type_info& custom_type_info);
+ ObjectBase(ObjectBase&& src) noexcept;
+ ObjectBase& operator=(ObjectBase&& src) noexcept;
+
virtual ~ObjectBase() = 0;
// Called by Glib::Object and Glib::Interface constructors. See comments there.
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]