73 lines
1.2 KiB
Go
73 lines
1.2 KiB
Go
// Copyright ©2021 The go-pdf Authors. All rights reserved.
|
|
// Use of this source code is governed by a MIT-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package fpdf
|
|
|
|
import (
|
|
"bytes"
|
|
"encoding/binary"
|
|
"io"
|
|
)
|
|
|
|
type rbuffer struct {
|
|
p []byte
|
|
c int
|
|
}
|
|
|
|
// newRBuffer returns a new buffer populated with the contents of the specified Reader
|
|
func newRBuffer(r io.Reader) (b *rbuffer, err error) {
|
|
buf := new(bytes.Buffer)
|
|
_, err = buf.ReadFrom(r)
|
|
b = &rbuffer{p: buf.Bytes()}
|
|
return
|
|
}
|
|
|
|
func (r *rbuffer) Read(p []byte) (int, error) {
|
|
if r.c >= len(r.p) {
|
|
return 0, io.EOF
|
|
}
|
|
n := copy(p, r.p[r.c:])
|
|
r.c += n
|
|
return n, nil
|
|
}
|
|
|
|
func (r *rbuffer) ReadByte() (byte, error) {
|
|
if r.c >= len(r.p) {
|
|
return 0, io.EOF
|
|
}
|
|
v := r.p[r.c]
|
|
r.c++
|
|
return v, nil
|
|
}
|
|
|
|
func (r *rbuffer) u8() uint8 {
|
|
if r.c >= len(r.p) {
|
|
panic(io.ErrShortBuffer)
|
|
}
|
|
v := r.p[r.c]
|
|
r.c++
|
|
return v
|
|
}
|
|
|
|
func (r *rbuffer) u32() uint32 {
|
|
const n = 4
|
|
if r.c+n >= len(r.p) {
|
|
panic(io.ErrShortBuffer)
|
|
}
|
|
beg := r.c
|
|
r.c += n
|
|
v := binary.BigEndian.Uint32(r.p[beg:])
|
|
return v
|
|
}
|
|
|
|
func (r *rbuffer) i32() int32 {
|
|
return int32(r.u32())
|
|
}
|
|
|
|
func (r *rbuffer) Next(n int) []byte {
|
|
c := r.c
|
|
r.c += n
|
|
return r.p[c:r.c]
|
|
}
|