Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

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
  • Loading branch information...
commit 4e745261077a9dd4b38f9ae9168b4adb60b0e552 1 parent b9836f4
Rajat Goel authored jdelong committed
Showing with 21 additions and 7 deletions.
  1. +11 −7 folly/ThreadLocal.h
  2. +10 −0 folly/test/ThreadLocalTest.cpp
View
18 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<Tag>::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<Tag>::instance()),
- lock_(NULL),
+ lock_(nullptr),
id_(0) {
}
@@ -312,7 +316,7 @@ class ThreadLocalPtr {
if (lock_) {
lock_->unlock();
id_ = 0;
- lock_ = NULL;
+ lock_ = nullptr;
}
}
};
View
10 folly/test/ThreadLocalTest.cpp
@@ -68,6 +68,16 @@ TEST(ThreadLocalPtr, CustomDeleter1) {
EXPECT_EQ(10, Widget::totalVal_);
}
+TEST(ThreadLocalPtr, resetNull) {
+ ThreadLocalPtr<int> tl;
+ EXPECT_FALSE(tl);
+ tl.reset(new int(4));
+ EXPECT_TRUE(static_cast<bool>(tl));
+ EXPECT_EQ(*tl.get(), 4);
+ tl.reset();
+ EXPECT_FALSE(tl);
+}
+
// Test deleting the ThreadLocalPtr object
TEST(ThreadLocalPtr, CustomDeleter2) {
Widget::totalVal_ = 0;
Please sign in to comment.
Something went wrong with that request. Please try again.