Add EvictingCacheMap MoveConstructor
authorDan Schatzberg <dschatzberg@fb.com>
Wed, 7 Dec 2016 16:08:34 +0000 (08:08 -0800)
committerFacebook Github Bot <facebook-github-bot-bot@fb.com>
Wed, 7 Dec 2016 16:23:29 +0000 (08:23 -0800)
Summary:
Add the default move constructor and move operator
to EvictingCacheMap so it can be moved.

Reviewed By: markisaa, luciang

Differential Revision: D4287472

fbshipit-source-id: 130e9d5467d6da14ba95a9e769cf8e8d541a704c

folly/EvictingCacheMap.h
folly/test/EvictingCacheMapTest.cpp

index 8a4240bde217e5283162d50257859d93299d9f4d..4ecfa64f31d9f8651e99e594dad7dbcc6495261e 100644 (file)
@@ -90,9 +90,8 @@ namespace folly {
  * unless evictions of LRU items are triggered by calling prune() by clients
  * (using their own eviction criteria).
  */
-template <class TKey, class TValue, class THash = std::hash<TKey> >
-class EvictingCacheMap : private boost::noncopyable {
-
+template <class TKey, class TValue, class THash = std::hash<TKey>>
+class EvictingCacheMap {
  private:
   // typedefs for brevity
   struct Node;
@@ -148,6 +147,10 @@ class EvictingCacheMap : private boost::noncopyable {
         maxSize_(maxSize),
         clearSize_(clearSize) { }
 
+  EvictingCacheMap(const EvictingCacheMap&) = delete;
+  EvictingCacheMap& operator=(const EvictingCacheMap&) = delete;
+  EvictingCacheMap(EvictingCacheMap&&) = default;
+  EvictingCacheMap& operator=(EvictingCacheMap&&) = default;
 
   ~EvictingCacheMap() {
     setPruneHook(nullptr);
index 0c3059076886b8bf8d040138e741337a879d60fd..6de403906228002937bc2ec7a7a54baf8780ffb2 100644 (file)
@@ -616,3 +616,20 @@ TEST(EvictingCacheMap, IteratorOrderingTest) {
     EXPECT_EQ(-1, expected);
   }
 }
+
+TEST(EvictingCacheMap, MoveTest) {
+  const int nItems = 1000;
+  EvictingCacheMap<int, int> map(nItems);
+  for (int i = 0; i < nItems; i++) {
+    map.set(i, i);
+    EXPECT_TRUE(map.exists(i));
+    EXPECT_EQ(i, map.get(i));
+  }
+
+  EvictingCacheMap<int, int> map2 = std::move(map);
+  EXPECT_TRUE(map.empty());
+  for (int i = 0; i < nItems; i++) {
+    EXPECT_TRUE(map2.exists(i));
+    EXPECT_EQ(i, map2.get(i));
+  }
+}