URL
https://opencores.org/ocsvn/openrisc/openrisc/trunk
Subversion Repositories openrisc
[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [libgo/] [go/] [hash/] [fnv/] [fnv.go] - Rev 747
Compare with Previous | Blame | View Log
// Copyright 2011 The Go Authors. All rights reserved.// Use of this source code is governed by a BSD-style// license that can be found in the LICENSE file.// Package fnv implements FNV-1 and FNV-1a, non-cryptographic hash functions// created by Glenn Fowler, Landon Curt Noll, and Phong Vo.// See http://isthe.com/chongo/tech/comp/fnv/.package fnvimport ("hash")type (sum32 uint32sum32a uint32sum64 uint64sum64a uint64)const (offset32 = 2166136261offset64 = 14695981039346656037prime32 = 16777619prime64 = 1099511628211)// New32 returns a new 32-bit FNV-1 hash.Hash.func New32() hash.Hash32 {var s sum32 = offset32return &s}// New32a returns a new 32-bit FNV-1a hash.Hash.func New32a() hash.Hash32 {var s sum32a = offset32return &s}// New64 returns a new 64-bit FNV-1 hash.Hash.func New64() hash.Hash64 {var s sum64 = offset64return &s}// New64a returns a new 64-bit FNV-1a hash.Hash.func New64a() hash.Hash64 {var s sum64a = offset64return &s}func (s *sum32) Reset() { *s = offset32 }func (s *sum32a) Reset() { *s = offset32 }func (s *sum64) Reset() { *s = offset64 }func (s *sum64a) Reset() { *s = offset64 }func (s *sum32) Sum32() uint32 { return uint32(*s) }func (s *sum32a) Sum32() uint32 { return uint32(*s) }func (s *sum64) Sum64() uint64 { return uint64(*s) }func (s *sum64a) Sum64() uint64 { return uint64(*s) }func (s *sum32) Write(data []byte) (int, error) {hash := *sfor _, c := range data {hash *= prime32hash ^= sum32(c)}*s = hashreturn len(data), nil}func (s *sum32a) Write(data []byte) (int, error) {hash := *sfor _, c := range data {hash ^= sum32a(c)hash *= prime32}*s = hashreturn len(data), nil}func (s *sum64) Write(data []byte) (int, error) {hash := *sfor _, c := range data {hash *= prime64hash ^= sum64(c)}*s = hashreturn len(data), nil}func (s *sum64a) Write(data []byte) (int, error) {hash := *sfor _, c := range data {hash ^= sum64a(c)hash *= prime64}*s = hashreturn len(data), nil}func (s *sum32) Size() int { return 4 }func (s *sum32a) Size() int { return 4 }func (s *sum64) Size() int { return 8 }func (s *sum64a) Size() int { return 8 }func (s *sum32) BlockSize() int { return 1 }func (s *sum32a) BlockSize() int { return 1 }func (s *sum64) BlockSize() int { return 1 }func (s *sum64a) BlockSize() int { return 1 }func (s *sum32) Sum(in []byte) []byte {v := uint32(*s)in = append(in, byte(v>>24))in = append(in, byte(v>>16))in = append(in, byte(v>>8))in = append(in, byte(v))return in}func (s *sum32a) Sum(in []byte) []byte {v := uint32(*s)in = append(in, byte(v>>24))in = append(in, byte(v>>16))in = append(in, byte(v>>8))in = append(in, byte(v))return in}func (s *sum64) Sum(in []byte) []byte {v := uint64(*s)in = append(in, byte(v>>56))in = append(in, byte(v>>48))in = append(in, byte(v>>40))in = append(in, byte(v>>32))in = append(in, byte(v>>24))in = append(in, byte(v>>16))in = append(in, byte(v>>8))in = append(in, byte(v))return in}func (s *sum64a) Sum(in []byte) []byte {v := uint64(*s)in = append(in, byte(v>>56))in = append(in, byte(v>>48))in = append(in, byte(v>>40))in = append(in, byte(v>>32))in = append(in, byte(v>>24))in = append(in, byte(v>>16))in = append(in, byte(v>>8))in = append(in, byte(v))return in}
