MCPcopy Create free account
hub / github.com/bodgit/sevenzip / NewReader

Function NewReader

internal/bcj2/reader.go:64–97  ·  view source on GitHub ↗

NewReader returns a new BCJ2 io.ReadCloser.

(_ []byte, _ uint64, readers []io.ReadCloser)

Source from the content-addressed store, hash-verified

62
63// NewReader returns a new BCJ2 io.ReadCloser.
64func NewReader(_ []byte, _ uint64, readers []io.ReadCloser) (io.ReadCloser, error) {
65 if len(readers) != 4 {
66 return nil, errNeedFourReaders
67 }
68
69 rc := &readCloser{
70 main: util.ByteReadCloser(readers[0]),
71 call: readers[1],
72 jump: readers[2],
73 rd: util.ByteReadCloser(readers[3]),
74 nrange: 0xffffffff,
75 buf: new(bytes.Buffer),
76 }
77 rc.buf.Grow(1 << 16)
78
79 b := make([]byte, 5)
80 if _, err := io.ReadFull(rc.rd, b); err != nil {
81 if !errors.Is(err, io.EOF) {
82 err = fmt.Errorf("bcj2: error reading initial state: %w", err)
83 }
84
85 return nil, err
86 }
87
88 for _, x := range b {
89 rc.code = (rc.code << 8) | uint(x)
90 }
91
92 for i := range rc.sd {
93 rc.sd[i] = bitModelTotal >> 1
94 }
95
96 return rc, nil
97}
98
99func (rc *readCloser) Close() error {
100 if rc.main == nil || rc.call == nil || rc.jump == nil || rc.rd == nil {

Callers

nothing calls this directly

Calls 1

ByteReadCloserFunction · 0.92

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…