diff options
author | Tad Marshall <tad@10gen.com> | 2012-08-06 10:51:31 -0400 |
---|---|---|
committer | Tad Marshall <tad@10gen.com> | 2012-08-06 10:51:31 -0400 |
commit | 0456a42b27c82c1fe3a6c1a5b2e7139b55925b89 (patch) | |
tree | 99f4f96c28dc81344e7041368e7f9308f6b0efbd /src/mongo/util/checksum.h | |
parent | c9eb7c87a391e3acf9c0e73e2619cdf8f87b6ab6 (diff) | |
download | mongo-0456a42b27c82c1fe3a6c1a5b2e7139b55925b89.tar.gz |
Line endings: CRLF => newline
Diffstat (limited to 'src/mongo/util/checksum.h')
-rw-r--r-- | src/mongo/util/checksum.h | 74 |
1 files changed, 37 insertions, 37 deletions
diff --git a/src/mongo/util/checksum.h b/src/mongo/util/checksum.h index 009ab56fbeb..9328330d782 100644 --- a/src/mongo/util/checksum.h +++ b/src/mongo/util/checksum.h @@ -1,37 +1,37 @@ -#pragma once
-#include "../pch.h"
-namespace mongo {
- /** a simple, rather dumb, but very fast checksum. see perftests.cpp for unit tests. */
- struct Checksum {
- union {
- unsigned char bytes[16];
- unsigned long long words[2];
- };
-
- // if you change this you must bump dur::CurrentVersion
- void gen(const void *buf, unsigned len) {
- wassert( ((size_t)buf) % 8 == 0 ); // performance warning
- unsigned n = len / 8 / 2;
- const unsigned long long *p = (const unsigned long long *) buf;
- unsigned long long a = 0;
- for( unsigned i = 0; i < n; i++ ) {
- a += (*p ^ i);
- p++;
- }
- unsigned long long b = 0;
- for( unsigned i = 0; i < n; i++ ) {
- b += (*p ^ i);
- p++;
- }
- unsigned long long c = 0;
- for( unsigned i = n * 2 * 8; i < len; i++ ) { // 0-7 bytes left
- c = (c << 8) | ((const char *)buf)[i];
- }
- words[0] = a ^ len;
- words[1] = b ^ c;
- }
-
- bool operator==(const Checksum& rhs) const { return words[0]==rhs.words[0] && words[1]==rhs.words[1]; }
- bool operator!=(const Checksum& rhs) const { return words[0]!=rhs.words[0] || words[1]!=rhs.words[1]; }
- };
-}
+#pragma once +#include "../pch.h" +namespace mongo { + /** a simple, rather dumb, but very fast checksum. see perftests.cpp for unit tests. */ + struct Checksum { + union { + unsigned char bytes[16]; + unsigned long long words[2]; + }; + + // if you change this you must bump dur::CurrentVersion + void gen(const void *buf, unsigned len) { + wassert( ((size_t)buf) % 8 == 0 ); // performance warning + unsigned n = len / 8 / 2; + const unsigned long long *p = (const unsigned long long *) buf; + unsigned long long a = 0; + for( unsigned i = 0; i < n; i++ ) { + a += (*p ^ i); + p++; + } + unsigned long long b = 0; + for( unsigned i = 0; i < n; i++ ) { + b += (*p ^ i); + p++; + } + unsigned long long c = 0; + for( unsigned i = n * 2 * 8; i < len; i++ ) { // 0-7 bytes left + c = (c << 8) | ((const char *)buf)[i]; + } + words[0] = a ^ len; + words[1] = b ^ c; + } + + bool operator==(const Checksum& rhs) const { return words[0]==rhs.words[0] && words[1]==rhs.words[1]; } + bool operator!=(const Checksum& rhs) const { return words[0]!=rhs.words[0] || words[1]!=rhs.words[1]; } + }; +} |