/
decoder.go
47 lines (37 loc) · 746 Bytes
/
decoder.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
package lzw
import (
"compress/lzw"
"io"
"github.com/mickep76/compress"
)
type decoder struct {
reader io.ReadCloser
order int
litWidth int
}
func (a *algorithm) NewDecoder(r io.Reader, opts ...compress.DecoderOption) (compress.Decoder, error) {
e := &decoder{
litWidth: 8,
}
for _, opt := range opts {
if err := opt(e); err != nil {
return nil, err
}
}
e.reader = lzw.NewReader(r, lzw.Order(e.order), e.litWidth)
return e, nil
}
func (d *decoder) SetOrder(o int) error {
d.order = o
return nil
}
func (d *decoder) SetLitWidth(w int) error {
d.litWidth = w
return nil
}
func (d *decoder) Read(v []byte) (int, error) {
return d.reader.Read(v)
}
func (d *decoder) Close() error {
return d.reader.Close()
}