Commit c37d27db authored by Christopher Small's avatar Christopher Small Committed by Facebook Github Bot

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
parent 7dd7fd99
...@@ -395,4 +395,60 @@ class ReadMostlyMainPtrDeleter { ...@@ -395,4 +395,60 @@ class ReadMostlyMainPtrDeleter {
std::vector<RefCount*> refCounts_; std::vector<RefCount*> refCounts_;
std::vector<folly::Function<void()>> decrefs_; 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);
}
} }
...@@ -297,3 +297,40 @@ TEST_F(ReadMostlySharedPtrTest, ReadMostlyMainPtrDeleter) { ...@@ -297,3 +297,40 @@ TEST_F(ReadMostlySharedPtrTest, ReadMostlyMainPtrDeleter) {
EXPECT_EQ(1, useGlobalCalls); 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);
}
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment