From: Christopher Small Date: Sat, 5 Nov 2016 19:36:36 +0000 (-0700) Subject: operator== for ReadMostlySharedPtr to nullptr_t X-Git-Tag: v2016.11.07.00~2 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=c37d27db6fd24939e60a3ab2823b3c0fbf5823cb;p=folly.git 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 --- 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); + } +}