]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
common/Checksummer: add xxhash64
authorSage Weil <sage@redhat.com>
Thu, 19 May 2016 11:19:36 +0000 (07:19 -0400)
committerSage Weil <sage@redhat.com>
Wed, 1 Jun 2016 15:38:51 +0000 (11:38 -0400)
Signed-off-by: Sage Weil <sage@redhat.com>
src/common/Checksummer.h

index aeb538925fb4e734ba69d2b1d0f898f0475c01a2..17ece379e41ab8f65b07d05d4569c18ebc629640 100644 (file)
@@ -57,6 +57,33 @@ public:
     }
   };
 
+  struct xxhash64 {
+    typedef __le64 value_t;
+
+    typedef XXH64_state_t *state_t;
+    static void init(state_t *s) {
+      *s = XXH64_createState();
+    }
+    static void fini(state_t *s) {
+      XXH64_freeState(*s);
+    }
+
+    static value_t calc(
+      state_t state,
+      size_t len,
+      bufferlist::const_iterator& p
+      ) {
+      XXH64_reset(state, -1);
+      while (len > 0) {
+       const char *data;
+       size_t l = p.get_ptr_and_advance(len, &data);
+       XXH64_update(state, data, l);
+       len -= l;
+      }
+      return XXH64_digest(state);
+    }
+  };
+
   template<class Alg>
   static int calculate(
     size_t csum_block_size,