package bytes
import (
)
type Reader struct {
s []byte
i int64
prevRune int
}
func ( *Reader) () int {
if .i >= int64(len(.s)) {
return 0
}
return int(int64(len(.s)) - .i)
}
func ( *Reader) () int64 { return int64(len(.s)) }
func ( *Reader) ( []byte) ( int, error) {
if .i >= int64(len(.s)) {
return 0, io.EOF
}
.prevRune = -1
= copy(, .s[.i:])
.i += int64()
return
}
func ( *Reader) ( []byte, int64) ( int, error) {
if < 0 {
return 0, errors.New("bytes.Reader.ReadAt: negative offset")
}
if >= int64(len(.s)) {
return 0, io.EOF
}
= copy(, .s[:])
if < len() {
= io.EOF
}
return
}
func ( *Reader) () (byte, error) {
.prevRune = -1
if .i >= int64(len(.s)) {
return 0, io.EOF
}
:= .s[.i]
.i++
return , nil
}
func ( *Reader) () error {
if .i <= 0 {
return errors.New("bytes.Reader.UnreadByte: at beginning of slice")
}
.prevRune = -1
.i--
return nil
}
func ( *Reader) () ( rune, int, error) {
if .i >= int64(len(.s)) {
.prevRune = -1
return 0, 0, io.EOF
}
.prevRune = int(.i)
if := .s[.i]; < utf8.RuneSelf {
.i++
return rune(), 1, nil
}
, = utf8.DecodeRune(.s[.i:])
.i += int64()
return
}
func ( *Reader) () error {
if .i <= 0 {
return errors.New("bytes.Reader.UnreadRune: at beginning of slice")
}
if .prevRune < 0 {
return errors.New("bytes.Reader.UnreadRune: previous operation was not ReadRune")
}
.i = int64(.prevRune)
.prevRune = -1
return nil
}
func ( *Reader) ( int64, int) (int64, error) {
.prevRune = -1
var int64
switch {
case io.SeekStart:
=
case io.SeekCurrent:
= .i +
case io.SeekEnd:
= int64(len(.s)) +
default:
return 0, errors.New("bytes.Reader.Seek: invalid whence")
}
if < 0 {
return 0, errors.New("bytes.Reader.Seek: negative position")
}
.i =
return , nil
}
func ( *Reader) ( io.Writer) ( int64, error) {
.prevRune = -1
if .i >= int64(len(.s)) {
return 0, nil
}
:= .s[.i:]
, := .Write()
if > len() {
panic("bytes.Reader.WriteTo: invalid Write count")
}
.i += int64()
= int64()
if != len() && == nil {
= io.ErrShortWrite
}
return
}
func ( *Reader) ( []byte) { * = Reader{, 0, -1} }
func ( []byte) *Reader { return &Reader{, 0, -1} }