github.com/weaviate/weaviate@v1.24.6/adapters/repos/db/lsmkv/rwhasher/writer.go (about) 1 // _ _ 2 // __ _____ __ ___ ___ __ _| |_ ___ 3 // \ \ /\ / / _ \/ _` \ \ / / |/ _` | __/ _ \ 4 // \ V V / __/ (_| |\ V /| | (_| | || __/ 5 // \_/\_/ \___|\__,_| \_/ |_|\__,_|\__\___| 6 // 7 // Copyright © 2016 - 2024 Weaviate B.V. All rights reserved. 8 // 9 // CONTACT: hello@weaviate.io 10 // 11 12 package rwhasher 13 14 import ( 15 "hash" 16 "hash/crc32" 17 "io" 18 ) 19 20 type WriterHasher interface { 21 io.Writer 22 N() int 23 Hash() []byte 24 Reset() 25 } 26 27 var _ WriterHasher = (*CRC32Writer)(nil) 28 29 type CRC32Writer struct { 30 w io.Writer 31 n int 32 hash hash.Hash32 33 } 34 35 func NewCRC32Writer(w io.Writer) *CRC32Writer { 36 return &CRC32Writer{ 37 w: w, 38 hash: crc32.NewIEEE(), 39 } 40 } 41 42 func (wc *CRC32Writer) Write(p []byte) (n int, err error) { 43 n, err = wc.w.Write(p) 44 wc.n += n 45 wc.hash.Write(p[:n]) 46 return n, err 47 } 48 49 func (wc *CRC32Writer) N() int { 50 return wc.n 51 } 52 53 func (wc *CRC32Writer) Hash() []byte { 54 return wc.hash.Sum(nil) 55 } 56 57 func (wc *CRC32Writer) Reset() { 58 wc.n = 0 59 wc.hash.Reset() 60 }