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  }