From 4e745261077a9dd4b38f9ae9168b4adb60b0e552 Mon Sep 17 00:00:00 2001 From: Rajat Goel Date: Mon, 17 Sep 2012 12:20:14 -0700 Subject: [PATCH] Syntactic sugar Summary: This makes code easy to read for eyes used to unique/shared ptrs. Test Plan: unit-tests Reviewed By: delong.j@fb.com FB internal diff: D575997 --- folly/ThreadLocal.h | 18 +++++++++++------- folly/test/ThreadLocalTest.cpp | 10 ++++++++++ 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/folly/ThreadLocal.h b/folly/ThreadLocal.h index a449ce67..55431645 100644 --- a/folly/ThreadLocal.h +++ b/folly/ThreadLocal.h @@ -79,7 +79,7 @@ class ThreadLocal { T* get() const { T* ptr = tlp_.get(); - if (UNLIKELY(ptr == NULL)) { + if (UNLIKELY(ptr == nullptr)) { ptr = new T(); tlp_.reset(ptr); } @@ -94,7 +94,7 @@ class ThreadLocal { return *get(); } - void reset(T* newPtr = NULL) { + void reset(T* newPtr = nullptr) { tlp_.reset(newPtr); } @@ -168,7 +168,7 @@ class ThreadLocalPtr { return *get(); } - void reset(T* newPtr) { + void reset(T* newPtr = nullptr) { threadlocal_detail::ElementWrapper& w = threadlocal_detail::StaticMeta::get(id_); if (w.ptr != newPtr) { @@ -177,6 +177,10 @@ class ThreadLocalPtr { } } + explicit operator bool() const { + return get() != nullptr; + } + /** * reset() with a custom deleter: * deleter(T* ptr, TLPDestructionMode mode) @@ -277,7 +281,7 @@ class ThreadLocalPtr { lock_(other.lock_), id_(other.id_) { other.id_ = 0; - other.lock_ = NULL; + other.lock_ = nullptr; } Accessor& operator=(Accessor&& other) FOLLY_NOEXCEPT { @@ -288,7 +292,7 @@ class ThreadLocalPtr { // which is impossible, which leaves only one possible scenario -- // *this is empty. Assert it. assert(&meta_ == &other.meta_); - assert(lock_ == NULL); + assert(lock_ == nullptr); using std::swap; swap(lock_, other.lock_); swap(id_, other.id_); @@ -296,7 +300,7 @@ class ThreadLocalPtr { Accessor() : meta_(threadlocal_detail::StaticMeta::instance()), - lock_(NULL), + lock_(nullptr), id_(0) { } @@ -312,7 +316,7 @@ class ThreadLocalPtr { if (lock_) { lock_->unlock(); id_ = 0; - lock_ = NULL; + lock_ = nullptr; } } }; diff --git a/folly/test/ThreadLocalTest.cpp b/folly/test/ThreadLocalTest.cpp index d80b851e..00f85943 100644 --- a/folly/test/ThreadLocalTest.cpp +++ b/folly/test/ThreadLocalTest.cpp @@ -68,6 +68,16 @@ TEST(ThreadLocalPtr, CustomDeleter1) { EXPECT_EQ(10, Widget::totalVal_); } +TEST(ThreadLocalPtr, resetNull) { + ThreadLocalPtr tl; + EXPECT_FALSE(tl); + tl.reset(new int(4)); + EXPECT_TRUE(static_cast(tl)); + EXPECT_EQ(*tl.get(), 4); + tl.reset(); + EXPECT_FALSE(tl); +} + // Test deleting the ThreadLocalPtr object TEST(ThreadLocalPtr, CustomDeleter2) { Widget::totalVal_ = 0; -- 2.34.1