From: Sage Weil Date: Thu, 19 May 2016 11:19:36 +0000 (-0400) Subject: common/Checksummer: add xxhash64 X-Git-Tag: v11.0.0~359^2~62 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=7a92f42ffb4427ad2bb49828a2263c1f0217aa9f;p=ceph.git common/Checksummer: add xxhash64 Signed-off-by: Sage Weil --- diff --git a/src/common/Checksummer.h b/src/common/Checksummer.h index aeb538925fb4..17ece379e41a 100644 --- a/src/common/Checksummer.h +++ b/src/common/Checksummer.h @@ -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 static int calculate( size_t csum_block_size,