operator== for ReadMostlySharedPtr to nullptr_t
authorChristopher Small <cas@fb.com>
Sat, 5 Nov 2016 19:36:36 +0000 (12:36 -0700)
committerFacebook Github Bot <facebook-github-bot-bot@fb.com>
Sat, 5 Nov 2016 19:38:35 +0000 (12:38 -0700)
Summary: add operator== against nullptr_t for ReadMostlySharedPtr

Reviewed By: andriigrynenko, nbronson, yfeldblum

Differential Revision: D4128722

fbshipit-source-id: 40d08bb85bfe2f96ad4ed4995f5829e0616d0661

folly/experimental/ReadMostlySharedPtr.h
folly/experimental/test/ReadMostlySharedPtrTest.cpp

index f81ce856a6b962dd080887318ccad71b539776f1..9e3a5d0a75f5b2823bf33eff5664956abe6b046b 100644 (file)
@@ -395,4 +395,60 @@ class ReadMostlyMainPtrDeleter {
   std::vector<RefCount*> refCounts_;
   std::vector<folly::Function<void()>> decrefs_;
 };
+
+template <typename T, typename RefCount>
+inline bool operator==(
+    const ReadMostlyMainPtr<T, RefCount>& ptr,
+    std::nullptr_t) {
+  return ptr.get() == nullptr;
+}
+
+template <typename T, typename RefCount>
+inline bool operator==(
+    std::nullptr_t,
+    const ReadMostlyMainPtr<T, RefCount>& ptr) {
+  return ptr.get() == nullptr;
+}
+
+template <typename T, typename RefCount>
+inline bool operator==(
+    const ReadMostlySharedPtr<T, RefCount>& ptr,
+    std::nullptr_t) {
+  return ptr.get() == nullptr;
+}
+
+template <typename T, typename RefCount>
+inline bool operator==(
+    std::nullptr_t,
+    const ReadMostlySharedPtr<T, RefCount>& ptr) {
+  return ptr.get() == nullptr;
+}
+
+template <typename T, typename RefCount>
+inline bool operator!=(
+    const ReadMostlyMainPtr<T, RefCount>& ptr,
+    std::nullptr_t) {
+  return !(ptr == nullptr);
+}
+
+template <typename T, typename RefCount>
+inline bool operator!=(
+    std::nullptr_t,
+    const ReadMostlyMainPtr<T, RefCount>& ptr) {
+  return !(ptr == nullptr);
+}
+
+template <typename T, typename RefCount>
+inline bool operator!=(
+    const ReadMostlySharedPtr<T, RefCount>& ptr,
+    std::nullptr_t) {
+  return !(ptr == nullptr);
+}
+
+template <typename T, typename RefCount>
+inline bool operator!=(
+    std::nullptr_t,
+    const ReadMostlySharedPtr<T, RefCount>& ptr) {
+  return !(ptr == nullptr);
+}
 }
index ffbe0d45c94218329052df7b05c20aa52597d8b8..0b00bbb1472cc8f187244a6462a42bb026988cb7 100644 (file)
@@ -297,3 +297,40 @@ TEST_F(ReadMostlySharedPtrTest, ReadMostlyMainPtrDeleter) {
 
   EXPECT_EQ(1, useGlobalCalls);
 }
+
+TEST_F(ReadMostlySharedPtrTest, nullptr) {
+  {
+    ReadMostlyMainPtr<int, TestRefCount> nptr;
+    EXPECT_TRUE(nptr == nullptr);
+    EXPECT_TRUE(nullptr == nptr);
+    EXPECT_EQ(nptr, nullptr);
+    EXPECT_EQ(nullptr, nptr);
+    EXPECT_FALSE(nptr);
+    EXPECT_TRUE(!nptr);
+
+    ReadMostlyMainPtr<int, TestRefCount> ptr(std::make_shared<int>(42));
+    EXPECT_FALSE(ptr == nullptr);
+    EXPECT_FALSE(nullptr == ptr);
+    EXPECT_NE(ptr, nullptr);
+    EXPECT_NE(nullptr, ptr);
+    EXPECT_FALSE(!ptr);
+    EXPECT_TRUE(ptr);
+  }
+  {
+    ReadMostlySharedPtr<int, TestRefCount> nptr;
+    EXPECT_TRUE(nptr == nullptr);
+    EXPECT_TRUE(nullptr == nptr);
+    EXPECT_EQ(nptr, nullptr);
+    EXPECT_EQ(nullptr, nptr);
+    EXPECT_FALSE(nptr);
+    EXPECT_TRUE(!nptr);
+
+    ReadMostlyMainPtr<int, TestRefCount> ptr(std::make_shared<int>(42));
+    EXPECT_FALSE(ptr == nullptr);
+    EXPECT_FALSE(nullptr == ptr);
+    EXPECT_NE(ptr, nullptr);
+    EXPECT_NE(nullptr, ptr);
+    EXPECT_FALSE(!ptr);
+    EXPECT_TRUE(ptr);
+  }
+}