github.com/hellobchain/third_party@v0.0.0-20230331131523-deb0478a2e52/prometheus/common/model/fnv.go (about) 1 // Copyright 2015 The Prometheus Authors 2 // Licensed under the Apache License, Version 2.0 (the "License"); 3 // you may not use this file except in compliance with the License. 4 // You may obtain a copy of the License at 5 // 6 // http://www.apache.org/licenses/LICENSE-2.0 7 // 8 // Unless required by applicable law or agreed to in writing, software 9 // distributed under the License is distributed on an "AS IS" BASIS, 10 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 // See the License for the specific language governing permissions and 12 // limitations under the License. 13 14 package model 15 16 // Inline and byte-free variant of hash/fnv's fnv64a. 17 18 const ( 19 offset64 = 14695981039346656037 20 prime64 = 1099511628211 21 ) 22 23 // hashNew initializies a new fnv64a hash value. 24 func hashNew() uint64 { 25 return offset64 26 } 27 28 // hashAdd adds a string to a fnv64a hash value, returning the updated hash. 29 func hashAdd(h uint64, s string) uint64 { 30 for i := 0; i < len(s); i++ { 31 h ^= uint64(s[i]) 32 h *= prime64 33 } 34 return h 35 } 36 37 // hashAddByte adds a byte to a fnv64a hash value, returning the updated hash. 38 func hashAddByte(h uint64, b byte) uint64 { 39 h ^= uint64(b) 40 h *= prime64 41 return h 42 }