mirror of
https://github.com/golang/go
synced 2024-11-24 01:40:12 -07:00
hash/crc32: remove redundant code
Merge the CRC32 Update and Write functions using an unexported function, to avoid duplication of code and make it more readable. The only difference between them is the check of the initialization of the IEEE table, and a boolean value specifies that.
This commit is contained in:
parent
3bc25bc706
commit
7d1bf79faa
@ -206,32 +206,31 @@ func readUint32(b []byte) uint32 {
|
||||
return uint32(b[3]) | uint32(b[2])<<8 | uint32(b[1])<<16 | uint32(b[0])<<24
|
||||
}
|
||||
|
||||
// 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, checkInitIEEE bool) uint32 {
|
||||
switch {
|
||||
case haveCastagnoli.Load() && tab == castagnoliTable:
|
||||
return updateCastagnoli(crc, p)
|
||||
case tab == IEEETable:
|
||||
// Unfortunately, because IEEETable is exported, IEEE may be used without a
|
||||
// call to MakeTable. We have to make sure it gets initialized in that case.
|
||||
if checkInitIEEE {
|
||||
ieeeOnce.Do(ieeeInit)
|
||||
}
|
||||
return updateIEEE(crc, p)
|
||||
default:
|
||||
return simpleUpdate(crc, tab, p)
|
||||
}
|
||||
}
|
||||
|
||||
// Update returns the result of adding the bytes in p to the crc.
|
||||
func Update(crc uint32, tab *Table, p []byte) uint32 {
|
||||
// Unfortunately, because IEEETable is exported, IEEE may be used without a
|
||||
// call to MakeTable. We have to make sure it gets initialized in that case.
|
||||
return update(crc, tab, p, true)
|
||||
}
|
||||
|
||||
func (d *digest) Write(p []byte) (n int, err error) {
|
||||
switch {
|
||||
case haveCastagnoli.Load() && d.tab == castagnoliTable:
|
||||
d.crc = updateCastagnoli(d.crc, p)
|
||||
case d.tab == IEEETable:
|
||||
// We only create digest objects through New() which takes care of
|
||||
// initialization in this case.
|
||||
d.crc = updateIEEE(d.crc, p)
|
||||
default:
|
||||
d.crc = simpleUpdate(d.crc, d.tab, p)
|
||||
}
|
||||
d.crc = update(d.crc, d.tab, p, false)
|
||||
return len(p), nil
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user