Fix TLObserver copy constructor
authorAndrii Grynenko <andrii@fb.com>
Tue, 13 Sep 2016 00:53:09 +0000 (17:53 -0700)
committerFacebook Github Bot 0 <facebook-github-bot-0-bot@fb.com>
Tue, 13 Sep 2016 00:54:01 +0000 (17:54 -0700)
Reviewed By: yfeldblum

Differential Revision: D3853494

fbshipit-source-id: 23f5cadcb55a9307fb2a825fe4c53a03c5978d12

folly/experimental/observer/Observer-inl.h
folly/experimental/observer/Observer.h
folly/experimental/observer/test/ObserverTest.cpp

index eb1338d70f355f469a6c1ba6fb99b59b522a6253..a73033c44a46499db8bdeb8dc95f7e649bb17c62 100644 (file)
@@ -58,6 +58,10 @@ TLObserver<T>::TLObserver(Observer<T> observer)
     : observer_(observer),
       snapshot_([&] { return new Snapshot<T>(observer_.getSnapshot()); }) {}
 
+template <typename T>
+TLObserver<T>::TLObserver(const TLObserver<T>& other)
+    : TLObserver(other.observer_) {}
+
 template <typename T>
 const Snapshot<T>& TLObserver<T>::getSnapshotRef() const {
   auto& snapshot = *snapshot_;
index 8037b24d59719165bd551bcc32769b4e41d387f7..bad88e14d921ce5491e1b4c4161b1efb92d0c95b 100644 (file)
@@ -158,6 +158,7 @@ template <typename T>
 class TLObserver {
  public:
   explicit TLObserver(Observer<T> observer);
+  TLObserver(const TLObserver<T>& other);
 
   const Snapshot<T>& getSnapshotRef() const;
   const Snapshot<T>& operator*() const {
index c2be17b9e0529fe9abb9d059e3c78a7adc119fc8..f540ffa94b456d4bf7be4f14073e8d3963c2f4d9 100644 (file)
@@ -248,3 +248,15 @@ TEST(Observer, Stress) {
     }
   });
 }
+
+TEST(Observer, TLObserver) {
+  auto createTLObserver = [](int value) {
+    return folly::observer::makeTLObserver([=] { return value; });
+  };
+
+  auto k =
+      std::make_unique<folly::observer::TLObserver<int>>(createTLObserver(42));
+  EXPECT_EQ(42, ***k);
+  k = std::make_unique<folly::observer::TLObserver<int>>(createTLObserver(41));
+  EXPECT_EQ(41, ***k);
+}