You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kudu.apache.org by al...@apache.org on 2020/08/14 23:43:08 UTC

[kudu] branch master updated: [util] operators for MonoDelta addition/subtraction

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

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


The following commit(s) were added to refs/heads/master by this push:
     new 6ab55f6  [util] operators for MonoDelta addition/subtraction
6ab55f6 is described below

commit 6ab55f6e13c09ab688ab23ee2164b98929ccf26c
Author: Alexey Serbin <as...@cloudera.com>
AuthorDate: Fri Dec 1 11:35:54 2017 -0800

    [util] operators for MonoDelta addition/subtraction
    
    Introduced a pair of operators to add and subtract MonoDelta instances.
    The result is a MonoDelta representing the result time interval.
    
    I'm going to use the newly introduced functionality in follow-up
    patches.
    
    Change-Id: Idc1fe1e2dd3b47b6a0d9ef977749c7c27dbf168c
    Reviewed-on: http://gerrit.cloudera.org:8080/8717
    Reviewed-by: Andrew Wong <aw...@cloudera.com>
    Tested-by: Kudu Jenkins
---
 src/kudu/util/monotime-test.cc | 55 ++++++++++++++++++++++++++++++++++++++++++
 src/kudu/util/monotime.cc      |  8 ++++++
 src/kudu/util/monotime.h       | 18 ++++++++++++++
 3 files changed, 81 insertions(+)

diff --git a/src/kudu/util/monotime-test.cc b/src/kudu/util/monotime-test.cc
index 8a4279e..826e3a4 100644
--- a/src/kudu/util/monotime-test.cc
+++ b/src/kudu/util/monotime-test.cc
@@ -314,6 +314,61 @@ TEST(TestMonoTime, TestOperators) {
     EXPECT_TRUE(d21 >= d20);
   }
 
+  // MonoDelta operator-(const MonoDelta& lhs, const MonoDelta& rhs);
+  {
+    {
+      MonoDelta d0 = MonoDelta::FromNanoseconds(0);
+      MonoDelta d1 = MonoDelta::FromNanoseconds(1);
+      MonoDelta d01 = d0 - d1;
+      MonoDelta d10 = d1 - d0;
+      EXPECT_EQ(d1, d10);
+      EXPECT_EQ(MonoDelta::FromNanoseconds(-1), d01);
+      EXPECT_EQ(MonoDelta::FromNanoseconds(1), d10);
+      EXPECT_GT(d0, d01);
+      EXPECT_GT(d10, d0);
+      EXPECT_EQ(d1, d10);
+    }
+
+    {
+      MonoDelta d0 = MonoDelta::FromNanoseconds(2);
+      MonoDelta d1 = MonoDelta::FromNanoseconds(2);
+      MonoDelta d01 = d0 - d1;
+      MonoDelta d10 = d1 - d0;
+      EXPECT_EQ(d01, d10);
+      EXPECT_EQ(MonoDelta::FromNanoseconds(0), d01);
+    }
+
+    {
+      MonoDelta d0 = MonoDelta::FromNanoseconds(3);
+      MonoDelta d1 = MonoDelta::FromNanoseconds(-3);
+      MonoDelta d01 = d0 - d1;
+      MonoDelta d10 = d1 - d0;
+      EXPECT_EQ(MonoDelta::FromNanoseconds(6), d01);
+      EXPECT_EQ(MonoDelta::FromNanoseconds(-6), d10);
+    }
+  }
+
+  // MonoDelta operator+(const MonoDelta& lhs, const MonoDelta& rhs);
+  {
+    {
+      MonoDelta d0 = MonoDelta::FromNanoseconds(0);
+      MonoDelta d1 = MonoDelta::FromNanoseconds(1);
+      MonoDelta d01 = d0 + d1;
+      MonoDelta d10 = d1 + d0;
+      EXPECT_EQ(d01, d10);
+      EXPECT_EQ(MonoDelta::FromNanoseconds(1), d01);
+    }
+
+    {
+      MonoDelta d0 = MonoDelta::FromNanoseconds(3);
+      MonoDelta d1 = MonoDelta::FromNanoseconds(-3);
+      MonoDelta d01 = d0 + d1;
+      MonoDelta d10 = d1 + d0;
+      EXPECT_EQ(d01, d10);
+      EXPECT_EQ(MonoDelta::FromNanoseconds(0), d01);
+    }
+  }
+
   // bool operator==(const MonoTime& lhs, const MonoTime& rhs);
   {
     MonoTime t0 = MonoTime::Now();
diff --git a/src/kudu/util/monotime.cc b/src/kudu/util/monotime.cc
index 102789a..efc54c2 100644
--- a/src/kudu/util/monotime.cc
+++ b/src/kudu/util/monotime.cc
@@ -296,6 +296,14 @@ bool operator>=(const MonoDelta &lhs, const MonoDelta &rhs) {
   return lhs.MoreThan(rhs) || lhs.Equals(rhs);
 }
 
+MonoDelta operator-(const MonoDelta &lhs, const MonoDelta &rhs) {
+  return MonoDelta(lhs.nano_delta_ - rhs.nano_delta_);
+}
+
+MonoDelta operator+(const MonoDelta &lhs, const MonoDelta &rhs) {
+  return MonoDelta(lhs.nano_delta_ + rhs.nano_delta_);
+}
+
 bool operator==(const MonoTime& lhs, const MonoTime& rhs) {
   return lhs.Equals(rhs);
 }
diff --git a/src/kudu/util/monotime.h b/src/kudu/util/monotime.h
index 60ce205..35e3fda 100644
--- a/src/kudu/util/monotime.h
+++ b/src/kudu/util/monotime.h
@@ -162,7 +162,11 @@ class KUDU_EXPORT MonoDelta {
   static const int64_t kUninitialized;
 
   friend class MonoTime;
+
   friend MonoDelta operator-(const class MonoTime&, const class MonoTime&);
+  friend MonoDelta operator-(const MonoDelta&, const MonoDelta&);
+  friend MonoDelta operator+(const MonoDelta&, const MonoDelta&);
+
   FRIEND_TEST(TestMonoTime, TestDeltaConversions);
 
   explicit MonoDelta(int64_t delta);
@@ -356,6 +360,20 @@ bool KUDU_EXPORT operator>(const MonoDelta &lhs, const MonoDelta &rhs);
 /// @return @c true iff the time interval represented by @c lhs is longer
 ///   than or equal to the time interval represented by @c rhs.
 bool KUDU_EXPORT operator>=(const MonoDelta &lhs, const MonoDelta &rhs);
+
+/// @param [in] lhs
+///   A time interval for substraction: the left-hand operand.
+/// @param [in] rhs
+///   A time interval for substraction: the right-hand operand.
+/// @return A MonoDelta object representing the result time interval.
+MonoDelta KUDU_EXPORT operator-(const MonoDelta& lhs, const MonoDelta& rhs);
+
+/// @param [in] lhs
+///   A time interval for addition: the left-hand operand.
+/// @param [in] rhs
+///   A time interval for addition: the right-hand operand.
+/// @return A MonoDelta object representing the result time interval.
+MonoDelta KUDU_EXPORT operator+(const MonoDelta& lhs, const MonoDelta& rhs);
 ///@}
 
 /// @name Syntactic sugar: binary operators for MonoTime.