bc1d885bd1
Ran ./utils/git-sync-deps already, removed some unneeded files
42 lines
969 B
C++
42 lines
969 B
C++
// Copyright 2016 The RE2 Authors. All Rights Reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
#ifndef UTIL_MIX_H_
|
|
#define UTIL_MIX_H_
|
|
|
|
#include <stddef.h>
|
|
#include <limits>
|
|
|
|
namespace re2 {
|
|
|
|
// Silence "truncation of constant value" warning for kMul in 32-bit mode.
|
|
// Since this is a header file, push and then pop to limit the scope.
|
|
#ifdef _MSC_VER
|
|
#pragma warning(push)
|
|
#pragma warning(disable: 4309)
|
|
#endif
|
|
|
|
class HashMix {
|
|
public:
|
|
HashMix() : hash_(1) {}
|
|
explicit HashMix(size_t val) : hash_(val + 83) {}
|
|
void Mix(size_t val) {
|
|
static const size_t kMul = static_cast<size_t>(0xdc3eb94af8ab4c93ULL);
|
|
hash_ *= kMul;
|
|
hash_ = ((hash_ << 19) |
|
|
(hash_ >> (std::numeric_limits<size_t>::digits - 19))) + val;
|
|
}
|
|
size_t get() const { return hash_; }
|
|
private:
|
|
size_t hash_;
|
|
};
|
|
|
|
#ifdef _MSC_VER
|
|
#pragma warning(pop)
|
|
#endif
|
|
|
|
} // namespace re2
|
|
|
|
#endif // UTIL_MIX_H_
|