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.