From c37d27db6fd24939e60a3ab2823b3c0fbf5823cb Mon Sep 17 00:00:00 2001 From: Christopher Small Date: Sat, 5 Nov 2016 12:36:36 -0700 Subject: [PATCH] operator== for ReadMostlySharedPtr to nullptr_t Summary: add operator== against nullptr_t for ReadMostlySharedPtr Reviewed By: andriigrynenko, nbronson, yfeldblum Differential Revision: D4128722 fbshipit-source-id: 40d08bb85bfe2f96ad4ed4995f5829e0616d0661 --- folly/experimental/ReadMostlySharedPtr.h | 56 +++++++++++++++++++ .../test/ReadMostlySharedPtrTest.cpp | 37 ++++++++++++ 2 files changed, 93 insertions(+) diff --git a/folly/experimental/ReadMostlySharedPtr.h b/folly/experimental/ReadMostlySharedPtr.h index f81ce856..9e3a5d0a 100644 --- a/folly/experimental/ReadMostlySharedPtr.h +++ b/folly/experimental/ReadMostlySharedPtr.h @@ -395,4 +395,60 @@ class ReadMostlyMainPtrDeleter { std::vector refCounts_; std::vector> decrefs_; }; + +template +inline bool operator==( + const ReadMostlyMainPtr& ptr, + std::nullptr_t) { + return ptr.get() == nullptr; +} + +template +inline bool operator==( + std::nullptr_t, + const ReadMostlyMainPtr& ptr) { + return ptr.get() == nullptr; +} + +template +inline bool operator==( + const ReadMostlySharedPtr& ptr, + std::nullptr_t) { + return ptr.get() == nullptr; +} + +template +inline bool operator==( + std::nullptr_t, + const ReadMostlySharedPtr& ptr) { + return ptr.get() == nullptr; +} + +template +inline bool operator!=( + const ReadMostlyMainPtr& ptr, + std::nullptr_t) { + return !(ptr == nullptr); +} + +template +inline bool operator!=( + std::nullptr_t, + const ReadMostlyMainPtr& ptr) { + return !(ptr == nullptr); +} + +template +inline bool operator!=( + const ReadMostlySharedPtr& ptr, + std::nullptr_t) { + return !(ptr == nullptr); +} + +template +inline bool operator!=( + std::nullptr_t, + const ReadMostlySharedPtr& ptr) { + return !(ptr == nullptr); +} } diff --git a/folly/experimental/test/ReadMostlySharedPtrTest.cpp b/folly/experimental/test/ReadMostlySharedPtrTest.cpp index ffbe0d45..0b00bbb1 100644 --- a/folly/experimental/test/ReadMostlySharedPtrTest.cpp +++ b/folly/experimental/test/ReadMostlySharedPtrTest.cpp @@ -297,3 +297,40 @@ TEST_F(ReadMostlySharedPtrTest, ReadMostlyMainPtrDeleter) { EXPECT_EQ(1, useGlobalCalls); } + +TEST_F(ReadMostlySharedPtrTest, nullptr) { + { + ReadMostlyMainPtr nptr; + EXPECT_TRUE(nptr == nullptr); + EXPECT_TRUE(nullptr == nptr); + EXPECT_EQ(nptr, nullptr); + EXPECT_EQ(nullptr, nptr); + EXPECT_FALSE(nptr); + EXPECT_TRUE(!nptr); + + ReadMostlyMainPtr ptr(std::make_shared(42)); + EXPECT_FALSE(ptr == nullptr); + EXPECT_FALSE(nullptr == ptr); + EXPECT_NE(ptr, nullptr); + EXPECT_NE(nullptr, ptr); + EXPECT_FALSE(!ptr); + EXPECT_TRUE(ptr); + } + { + ReadMostlySharedPtr nptr; + EXPECT_TRUE(nptr == nullptr); + EXPECT_TRUE(nullptr == nptr); + EXPECT_EQ(nptr, nullptr); + EXPECT_EQ(nullptr, nptr); + EXPECT_FALSE(nptr); + EXPECT_TRUE(!nptr); + + ReadMostlyMainPtr ptr(std::make_shared(42)); + EXPECT_FALSE(ptr == nullptr); + EXPECT_FALSE(nullptr == ptr); + EXPECT_NE(ptr, nullptr); + EXPECT_NE(nullptr, ptr); + EXPECT_FALSE(!ptr); + EXPECT_TRUE(ptr); + } +} -- 2.34.1