github.com/balzaczyy/golucene@v0.0.0-20151210033525-d0be9ee89713/core/store/bufferedChecksumIndexInput.go (about) 1 package store 2 3 import ( 4 "fmt" 5 "hash" 6 "hash/crc32" 7 ) 8 9 /* 10 Simple implementation of ChecksumIndexInput that wraps another input 11 and delegates calls. 12 */ 13 type BufferedChecksumIndexInput struct { 14 *ChecksumIndexInputImpl 15 main IndexInput 16 digest hash.Hash32 17 } 18 19 func newBufferedChecksumIndexInput(main IndexInput) *BufferedChecksumIndexInput { 20 ans := &BufferedChecksumIndexInput{ 21 main: main, 22 digest: crc32.NewIEEE(), 23 } 24 ans.ChecksumIndexInputImpl = NewChecksumIndexInput( 25 fmt.Sprintf("BufferedChecksumIndexInput(%v)", main), ans) 26 return ans 27 } 28 29 func (in *BufferedChecksumIndexInput) ReadByte() (b byte, err error) { 30 if b, err = in.main.ReadByte(); err == nil { 31 in.digest.Write([]byte{b}) 32 } 33 return 34 } 35 36 func (in *BufferedChecksumIndexInput) ReadBytes(p []byte) (err error) { 37 if err = in.main.ReadBytes(p); err == nil { 38 in.digest.Write(p) 39 } 40 return 41 } 42 43 func (in *BufferedChecksumIndexInput) Checksum() int64 { 44 return int64(in.digest.Sum32()) 45 } 46 47 func (in *BufferedChecksumIndexInput) Close() error { 48 return in.main.Close() 49 } 50 51 func (in *BufferedChecksumIndexInput) FilePointer() int64 { 52 return in.main.FilePointer() 53 } 54 55 func (in *BufferedChecksumIndexInput) Length() int64 { 56 return in.main.Length() 57 } 58 59 func (in *BufferedChecksumIndexInput) Clone() IndexInput { 60 panic("not supported") 61 } 62 63 func (in *BufferedChecksumIndexInput) Slice(desc string, offset, length int64) (IndexInput, error) { 64 panic("not supported") 65 }