@@ -44,7 +44,7 @@ const (
4444)
4545
4646type (
47- noopHash struct {}
47+ noneHash struct {}
4848
4949 // in-cluster checksum validation (compare with cmn.ErrInvalidCksum)
5050 ErrBadCksum struct {
@@ -77,16 +77,21 @@ var checksums = StrSet{
7777 ChecksumSHA512 : {},
7878}
7979
80- // interface guard
81- var (
82- _ hash.Hash = (* noopHash )(nil )
83- _ encoding.BinaryUnmarshaler = (* noopHash )(nil )
84- _ encoding.BinaryUnmarshaler = (* noopHash )(nil )
80+ var NoneCksum = NewCksum (ChecksumNone , "" )
8581
86- _ io.Writer = (* CksumHashSize )(nil )
87- )
82+ func NoneC (ck * Cksum ) bool {
83+ if ck == nil {
84+ return true
85+ }
86+ return ck .ty == "" || ck .ty == ChecksumNone || ck .value == ""
87+ }
8888
89- var NoneCksum = NewCksum (ChecksumNone , "" )
89+ func NoneH (ck * CksumHash ) bool {
90+ if ck == nil {
91+ return true
92+ }
93+ return NoneC (& ck .Cksum )
94+ }
9095
9196///////////////
9297// CksumHash //
@@ -121,7 +126,7 @@ func (ck *CksumHash) Init(ty string) {
121126 ck .ty = ty
122127 switch ty {
123128 case ChecksumNone , "" :
124- ck .ty , ck .H = ChecksumNone , newNoopHash ()
129+ ck .ty , ck .H = ChecksumNone , & noneHash {}
125130 case ChecksumOneXxh :
126131 ck .H = onexxh .New64 ()
127132 case ChecksumCesXxh :
@@ -153,6 +158,11 @@ func (ck *CksumHash) Finalize() {
153158// CksumHashSize //
154159///////////////////
155160
161+ // interface guard
162+ var (
163+ _ io.Writer = (* CksumHashSize )(nil )
164+ )
165+
156166func (ck * CksumHashSize ) Write (b []byte ) (n int , err error ) {
157167 n , err = ck .H .Write (b )
158168 ck .Size += int64 (n )
@@ -163,10 +173,6 @@ func (ck *CksumHashSize) Write(b []byte) (n int, err error) {
163173// Cksum //
164174///////////
165175
166- func (ck * Cksum ) IsEmpty () bool {
167- return ck == nil || ck .ty == "" || ck .ty == ChecksumNone || ck .value == ""
168- }
169-
170176func NewCksum (ty , value string ) * Cksum {
171177 if err := ValidateCksumType (ty , true /*empty OK*/ ); err != nil {
172178 AssertMsg (false , err .Error ())
@@ -179,8 +185,8 @@ func NewCksum(ty, value string) *Cksum {
179185
180186// NOTE [caution]: empty checksums are also equal (compare with lom.EqCksum and friends)
181187func (ck * Cksum ) Equal (to * Cksum ) bool {
182- if ck . IsEmpty () || to . IsEmpty () {
183- return ck . IsEmpty () == to . IsEmpty ()
188+ if a , b := NoneC ( ck ), NoneC ( to ); a || b {
189+ return a && b
184190 }
185191 return ck .ty == to .ty && ck .value == to .value
186192}
@@ -258,17 +264,23 @@ func ValidateCksumType(ty string, emptyOK ...bool) (err error) {
258264}
259265
260266//
261- // noopHash
267+ // noneHash
262268//
263269
264- func newNoopHash () hash.Hash { return & noopHash {} }
265- func (* noopHash ) Write (b []byte ) (int , error ) { return len (b ), nil }
266- func (* noopHash ) Sum ([]byte ) []byte { return nil }
267- func (* noopHash ) Reset () {}
268- func (* noopHash ) Size () int { return 0 }
269- func (* noopHash ) BlockSize () int { return KiB }
270- func (* noopHash ) MarshalBinary () ([]byte , error ) { return nil , nil }
271- func (* noopHash ) UnmarshalBinary ([]byte ) error { return nil }
270+ // interface guard
271+ var (
272+ _ hash.Hash = (* noneHash )(nil )
273+ _ encoding.BinaryMarshaler = (* noneHash )(nil ) // usage: append object (to serialize append handle)
274+ )
275+
276+ func (* noneHash ) Write (b []byte ) (int , error ) { return len (b ), nil }
277+ func (* noneHash ) Sum ([]byte ) []byte { return nil }
278+ func (* noneHash ) Reset () {}
279+ func (* noneHash ) Size () int { return 0 }
280+ func (* noneHash ) BlockSize () int { return KiB }
281+
282+ func (* noneHash ) MarshalBinary () ([]byte , error ) { return nil , nil }
283+ func (* noneHash ) UnmarshalBinary ([]byte ) error { return nil }
272284
273285//
274286// errors
0 commit comments