mirror of
https://github.com/golang/go.git
synced 2025-05-05 15:43:04 +00:00
hash: convert haveCastagnoli to atomic type
Change-Id: I313fff5684d89ee737572d11b1b697c5575866a8 Reviewed-on: https://go-review.googlesource.com/c/go/+/426083 Reviewed-by: Keith Randall <khr@golang.org> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Michael Pratt <mpratt@google.com> Run-TryBot: Keith Randall <khr@golang.org> Auto-Submit: Keith Randall <khr@golang.org> Reviewed-by: Keith Randall <khr@google.com>
This commit is contained in:
parent
8e35910640
commit
134cd34c07
@ -78,7 +78,7 @@ var castagnoliTable *Table
|
|||||||
var castagnoliTable8 *slicing8Table
|
var castagnoliTable8 *slicing8Table
|
||||||
var updateCastagnoli func(crc uint32, p []byte) uint32
|
var updateCastagnoli func(crc uint32, p []byte) uint32
|
||||||
var castagnoliOnce sync.Once
|
var castagnoliOnce sync.Once
|
||||||
var haveCastagnoli uint32
|
var haveCastagnoli atomic.Bool
|
||||||
|
|
||||||
func castagnoliInit() {
|
func castagnoliInit() {
|
||||||
castagnoliTable = simpleMakeTable(Castagnoli)
|
castagnoliTable = simpleMakeTable(Castagnoli)
|
||||||
@ -94,7 +94,7 @@ func castagnoliInit() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
atomic.StoreUint32(&haveCastagnoli, 1)
|
haveCastagnoli.Store(true)
|
||||||
}
|
}
|
||||||
|
|
||||||
// IEEETable is the table for the IEEE polynomial.
|
// IEEETable is the table for the IEEE polynomial.
|
||||||
@ -208,7 +208,7 @@ func readUint32(b []byte) uint32 {
|
|||||||
// Update returns the result of adding the bytes in p to the crc.
|
// Update returns the result of adding the bytes in p to the crc.
|
||||||
func Update(crc uint32, tab *Table, p []byte) uint32 {
|
func Update(crc uint32, tab *Table, p []byte) uint32 {
|
||||||
switch {
|
switch {
|
||||||
case atomic.LoadUint32(&haveCastagnoli) != 0 && tab == castagnoliTable:
|
case haveCastagnoli.Load() && tab == castagnoliTable:
|
||||||
return updateCastagnoli(crc, p)
|
return updateCastagnoli(crc, p)
|
||||||
case tab == IEEETable:
|
case tab == IEEETable:
|
||||||
// Unfortunately, because IEEETable is exported, IEEE may be used without a
|
// Unfortunately, because IEEETable is exported, IEEE may be used without a
|
||||||
@ -222,7 +222,7 @@ func Update(crc uint32, tab *Table, p []byte) uint32 {
|
|||||||
|
|
||||||
func (d *digest) Write(p []byte) (n int, err error) {
|
func (d *digest) Write(p []byte) (n int, err error) {
|
||||||
switch {
|
switch {
|
||||||
case atomic.LoadUint32(&haveCastagnoli) != 0 && d.tab == castagnoliTable:
|
case haveCastagnoli.Load() && d.tab == castagnoliTable:
|
||||||
d.crc = updateCastagnoli(d.crc, p)
|
d.crc = updateCastagnoli(d.crc, p)
|
||||||
case d.tab == IEEETable:
|
case d.tab == IEEETable:
|
||||||
// We only create digest objects through New() which takes care of
|
// We only create digest objects through New() which takes care of
|
||||||
|
Loading…
x
Reference in New Issue
Block a user