Платформа ЦРНП "Мирокод" для разработки проектов
https://git.mirocod.ru
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
39 lines
852 B
39 lines
852 B
// Copyright 2014-2021 Ulrich Kunitz. All rights reserved. |
|
// Use of this source code is governed by a BSD-style |
|
// license that can be found in the LICENSE file. |
|
|
|
package lzma |
|
|
|
import ( |
|
"errors" |
|
"io" |
|
) |
|
|
|
// breader provides the ReadByte function for a Reader. It doesn't read |
|
// more data from the reader than absolutely necessary. |
|
type breader struct { |
|
io.Reader |
|
// helper slice to save allocations |
|
p []byte |
|
} |
|
|
|
// ByteReader converts an io.Reader into an io.ByteReader. |
|
func ByteReader(r io.Reader) io.ByteReader { |
|
br, ok := r.(io.ByteReader) |
|
if !ok { |
|
return &breader{r, make([]byte, 1)} |
|
} |
|
return br |
|
} |
|
|
|
// ReadByte read byte function. |
|
func (r *breader) ReadByte() (c byte, err error) { |
|
n, err := r.Reader.Read(r.p) |
|
if n < 1 { |
|
if err == nil { |
|
err = errors.New("breader.ReadByte: no data") |
|
} |
|
return 0, err |
|
} |
|
return r.p[0], nil |
|
}
|
|
|