]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
os/bluestore: avoid overhead of std::function in blob_t.
authorRadoslaw Zarzynski <rzarzyns@redhat.com>
Sun, 4 Feb 2018 04:45:43 +0000 (05:45 +0100)
committerRadoslaw Zarzynski <rzarzyns@redhat.com>
Wed, 28 Feb 2018 15:11:45 +0000 (16:11 +0100)
Signed-off-by: Radoslaw Zarzynski <rzarzyns@redhat.com>
(cherry picked from commit 28997c1c6b43f71e92799d7b95452c5b4026d989)

src/os/bluestore/bluestore_types.h

index f48f095a0961387b438ae488a595a3ece6f19143..5df1d401344577691a1fee31937a2a65c075387a 100644 (file)
@@ -17,6 +17,7 @@
 
 #include <ostream>
 #include <bitset>
+#include <type_traits>
 #include "include/types.h"
 #include "include/interval_set.h"
 #include "include/utime.h"
@@ -729,8 +730,10 @@ public:
     }
   }
 
-  int map(uint64_t x_off, uint64_t x_len,
-          std::function<int(uint64_t,uint64_t)> f) const {
+  template<class F>
+  int map(uint64_t x_off, uint64_t x_len, F&& f) const {
+    static_assert(std::is_invocable_r_v<int, F, uint64_t, uint64_t>);
+
     auto p = extents.begin();
     assert(p != extents.end());
     while (x_off >= p->length) {
@@ -750,9 +753,12 @@ public:
     }
     return 0;
   }
+  template<class F>
   void map_bl(uint64_t x_off,
              bufferlist& bl,
-             std::function<void(uint64_t,bufferlist&)> f) const {
+             F&& f) const {
+    static_assert(std::is_invocable_v<F, uint64_t, bufferlist&>);
+
     auto p = extents.begin();
     assert(p != extents.end());
     while (x_off >= p->length) {