]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
mempool: Add string to mempool data types.
authorAllen Samuels <allen.samuels@sandisk.com>
Sat, 3 Dec 2016 00:51:27 +0000 (16:51 -0800)
committerSage Weil <sage@redhat.com>
Fri, 13 Jan 2017 16:48:03 +0000 (11:48 -0500)
Signed-off-by: Allen Samuels <allen.samuels@sandisk.com>
src/include/mempool.h
src/test/test_mempool.cc

index a95ce57dab78dbd77f11ae556cba1a7db20d1fc5..6d434e8dd17ee06ff8731b643c88ec00ff228d9d 100644 (file)
@@ -366,23 +366,33 @@ public:
     static const mempool::pool_index_t id = mempool::mempool_##x;      \
     template<typename v>                                               \
     using pool_allocator = mempool::pool_allocator<id,v>;              \
+                                                                        \
+    using string = std::basic_string<char,std::char_traits<char>,       \
+                                     pool_allocator<char>>;             \
+                                                                        \
     template<typename k,typename v, typename cmp = std::less<k> >      \
     using map = std::map<k, v, cmp,                                    \
                         pool_allocator<std::pair<k,v>>>;               \
+                                                                        \
     template<typename k,typename v, typename cmp = std::less<k> >      \
     using multimap = std::multimap<k,v,cmp,                            \
                                   pool_allocator<std::pair<k,v>>>;     \
+                                                                        \
     template<typename k, typename cmp = std::less<k> >                 \
     using set = std::set<k,cmp,pool_allocator<k>>;                     \
+                                                                        \
     template<typename v>                                               \
     using list = std::list<v,pool_allocator<v>>;                       \
+                                                                        \
     template<typename v>                                               \
     using vector = std::vector<v,pool_allocator<v>>;                   \
+                                                                        \
     template<typename k, typename v,                                   \
             typename h=std::hash<k>,                                   \
             typename eq = std::equal_to<k>>                            \
     using unordered_map =                                              \
       std::unordered_map<k,v,h,eq,pool_allocator<std::pair<k,v>>>;     \
+                                                                        \
     inline size_t allocated_bytes() {                                  \
       return mempool::get_pool(id).allocated_bytes();                  \
     }                                                                  \
index 4113c53d27e5c1cc878a0a9740317df8bb7db997..e2a8895c3b6afbf72b7f94a9bb1189bb8ec29b92 100644 (file)
@@ -277,6 +277,18 @@ TEST(mempool, bufferlist)
   ASSERT_GE(after, before + len);
 }
 
+TEST(mempool, string_test)
+{
+  mempool::unittest_2::string s;
+  s.reserve(100);
+  EXPECT_GE(mempool::unittest_2::allocated_items(), s.capacity() + 1u); // +1 for zero-byte termination :
+  for (size_t i = 0; i < 10; ++i) {
+    s += '1';
+    s.append(s);
+    EXPECT_GE(mempool::unittest_2::allocated_items(), s.capacity() + 1u);
+  }
+}
+
 int main(int argc, char **argv)
 {
   vector<const char*> args;