-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathranged_buff.go
More file actions
48 lines (36 loc) · 815 Bytes
/
ranged_buff.go
File metadata and controls
48 lines (36 loc) · 815 Bytes
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
48
package buff
import "fmt"
type RangedBuff struct {
buffer *Buff
offset int64
pointer int64
limit int64
}
func (r *RangedBuff) Seek(n int64) {
r.pointer = n
}
func (r *RangedBuff) Rewind() {
r.Seek(0)
}
func (r *RangeBuff) Read(p []byte) (int, error) {
if r.pointer > r.limit {
return 0, fmt.Errorf("EOF")
}
n1, err := r.ReadAt(p, r.pointer)
r.pointer += n1
return int(n1), err
}
func (r *RangedBuff) Write(p []byte) (int, error) {
if r.pointer > r.limit {
return 0, fmt.Errorf("EOF")
}
n1, err := r.WriteAt(p, r.pointer)
r.pointer += n1
return int(n1), err
}
func (r *RangedBuff) ReadAt(p []byte, offset int64) (int64, error) {
return r.buffer.ReadAt(p, r.offset+offset)
}
func (r *RangedBuff) WriteAt(p []byte, off int64) (int64, error) {
return r.buff.ReadAt(p, r.off+off)
}