You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by bm...@apache.org on 2018/08/07 03:06:13 UTC

[mesos] 03/03: Added ref-qualified addition operations to `Resources`.

This is an automated email from the ASF dual-hosted git repository.

bmahler pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mesos.git

commit 8132c64502717e10277297f4958f5f78a7b96093
Author: Meng Zhu <mz...@mesosphere.io>
AuthorDate: Mon Aug 6 19:30:55 2018 -0700

    Added ref-qualified addition operations to `Resources`.
    
    This patch futher adds move support for `Resources`
    addition operations when the lhs is an rvalue reference.
    
    Review: https://reviews.apache.org/r/68248/
---
 include/mesos/resources.hpp    | 17 ++++++++++-------
 include/mesos/v1/resources.hpp | 17 ++++++++++-------
 src/common/resources.cpp       | 40 ++++++++++++++++++++++++++++++++++++----
 src/v1/resources.cpp           | 40 ++++++++++++++++++++++++++++++++++++----
 4 files changed, 92 insertions(+), 22 deletions(-)

diff --git a/include/mesos/resources.hpp b/include/mesos/resources.hpp
index dc0a562..6d81d0e 100644
--- a/include/mesos/resources.hpp
+++ b/include/mesos/resources.hpp
@@ -618,17 +618,20 @@ public:
   // doing subtraction), the semantics is as though the second operand
   // was actually just an empty resource (as though you didn't do the
   // operation at all).
-  //
-  // TODO(mzhu): Add overloading for addition operations where lhs is (also)
-  // an rvalue reference.
-  Resources operator+(const Resource& that) const;
-  Resources operator+(Resource&& that) const;
+  Resources operator+(const Resource& that) const &;
+  Resources operator+(const Resource& that) &&;
+
+  Resources operator+(Resource&& that) const &;
+  Resources operator+(Resource&& that) &&;
 
   Resources& operator+=(const Resource& that);
   Resources& operator+=(Resource&& that);
 
-  Resources operator+(const Resources& that) const;
-  Resources operator+(Resources&& that) const;
+  Resources operator+(const Resources& that) const &;
+  Resources operator+(const Resources& that) &&;
+
+  Resources operator+(Resources&& that) const &;
+  Resources operator+(Resources&& that) &&;
 
   Resources& operator+=(const Resources& that);
   Resources& operator+=(Resources&& that);
diff --git a/include/mesos/v1/resources.hpp b/include/mesos/v1/resources.hpp
index 2d50123..f34f38f 100644
--- a/include/mesos/v1/resources.hpp
+++ b/include/mesos/v1/resources.hpp
@@ -612,17 +612,20 @@ public:
   // doing subtraction), the semantics is as though the second operand
   // was actually just an empty resource (as though you didn't do the
   // operation at all).
-  //
-  // TODO(mzhu): Add overloading for addition operations where lhs is (also)
-  // an rvalue reference.
-  Resources operator+(const Resource& that) const;
-  Resources operator+(Resource&& that) const;
+  Resources operator+(const Resource& that) const &;
+  Resources operator+(const Resource& that) &&;
+
+  Resources operator+(Resource&& that) const &;
+  Resources operator+(Resource&& that) &&;
 
   Resources& operator+=(const Resource& that);
   Resources& operator+=(Resource&& that);
 
-  Resources operator+(const Resources& that) const;
-  Resources operator+(Resources&& that) const;
+  Resources operator+(const Resources& that) const &;
+  Resources operator+(const Resources& that) &&;
+
+  Resources operator+(Resources&& that) const &;
+  Resources operator+(Resources&& that) &&;
 
   Resources& operator+=(const Resources& that);
   Resources& operator+=(Resources&& that);
diff --git a/src/common/resources.cpp b/src/common/resources.cpp
index 599bda2..cef2acd 100644
--- a/src/common/resources.cpp
+++ b/src/common/resources.cpp
@@ -2019,7 +2019,7 @@ Resources Resources::operator+(Resource_&& that) const
 }
 
 
-Resources Resources::operator+(const Resource& that) const
+Resources Resources::operator+(const Resource& that) const &
 {
   Resources result = *this;
   result += that;
@@ -2027,7 +2027,15 @@ Resources Resources::operator+(const Resource& that) const
 }
 
 
-Resources Resources::operator+(Resource&& that) const
+Resources Resources::operator+(const Resource& that) &&
+{
+  Resources result = std::move(*this);
+  result += that;
+  return result;
+}
+
+
+Resources Resources::operator+(Resource&& that) const &
 {
   Resources result = *this;
   result += std::move(that);
@@ -2035,7 +2043,15 @@ Resources Resources::operator+(Resource&& that) const
 }
 
 
-Resources Resources::operator+(const Resources& that) const
+Resources Resources::operator+(Resource&& that) &&
+{
+  Resources result = std::move(*this);
+  result += std::move(that);
+  return result;
+}
+
+
+Resources Resources::operator+(const Resources& that) const &
 {
   Resources result = *this;
   result += that;
@@ -2043,7 +2059,15 @@ Resources Resources::operator+(const Resources& that) const
 }
 
 
-Resources Resources::operator+(Resources&& that) const
+Resources Resources::operator+(const Resources& that) &&
+{
+  Resources result = std::move(*this);
+  result += that;
+  return result;
+}
+
+
+Resources Resources::operator+(Resources&& that) const &
 {
   Resources result = std::move(that);
   result += *this;
@@ -2051,6 +2075,14 @@ Resources Resources::operator+(Resources&& that) const
 }
 
 
+Resources Resources::operator+(Resources&& that) &&
+{
+  Resources result = std::move(*this);
+  result += std::move(that);
+  return result;
+}
+
+
 void Resources::add(const Resource_& that)
 {
   if (that.isEmpty()) {
diff --git a/src/v1/resources.cpp b/src/v1/resources.cpp
index be4a0cc..aa775bd 100644
--- a/src/v1/resources.cpp
+++ b/src/v1/resources.cpp
@@ -2026,7 +2026,7 @@ Resources Resources::operator+(Resource_&& that) const
 }
 
 
-Resources Resources::operator+(const Resource& that) const
+Resources Resources::operator+(const Resource& that) const &
 {
   Resources result = *this;
   result += that;
@@ -2034,7 +2034,15 @@ Resources Resources::operator+(const Resource& that) const
 }
 
 
-Resources Resources::operator+(Resource&& that) const
+Resources Resources::operator+(const Resource& that) &&
+{
+  Resources result = std::move(*this);
+  result += that;
+  return result;
+}
+
+
+Resources Resources::operator+(Resource&& that) const &
 {
   Resources result = *this;
   result += std::move(that);
@@ -2042,7 +2050,15 @@ Resources Resources::operator+(Resource&& that) const
 }
 
 
-Resources Resources::operator+(const Resources& that) const
+Resources Resources::operator+(Resource&& that) &&
+{
+  Resources result = std::move(*this);
+  result += std::move(that);
+  return result;
+}
+
+
+Resources Resources::operator+(const Resources& that) const &
 {
   Resources result = *this;
   result += that;
@@ -2050,7 +2066,15 @@ Resources Resources::operator+(const Resources& that) const
 }
 
 
-Resources Resources::operator+(Resources&& that) const
+Resources Resources::operator+(const Resources& that) &&
+{
+  Resources result = std::move(*this);
+  result += that;
+  return result;
+}
+
+
+Resources Resources::operator+(Resources&& that) const &
 {
   Resources result = std::move(that);
   result += *this;
@@ -2058,6 +2082,14 @@ Resources Resources::operator+(Resources&& that) const
 }
 
 
+Resources Resources::operator+(Resources&& that) &&
+{
+  Resources result = std::move(*this);
+  result += std::move(that);
+  return result;
+}
+
+
 void Resources::add(const Resource_& that)
 {
   if (that.isEmpty()) {