-
Notifications
You must be signed in to change notification settings - Fork 12
/
Copy pathsort_writer.go
54 lines (47 loc) · 939 Bytes
/
sort_writer.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
48
49
50
51
52
53
54
package gossamr
import (
"github.com/markchadwick/sortedpairs"
"github.com/markchadwick/typedbytes"
"io"
)
type pairWriter struct {
w io.Writer
}
func (pw *pairWriter) Write(k, v []byte) (err error) {
if _, err = pw.w.Write(k); err != nil {
return
}
_, err = pw.w.Write(v)
return
}
type SortWriter struct {
w io.WriteCloser
spw *sortedpairs.Writer
}
func NewSortWriter(w io.WriteCloser, capacity int) (*SortWriter, error) {
pw := &pairWriter{w}
spw, err := sortedpairs.NewWriter(pw, capacity)
if err != nil {
return nil, err
}
sw := &SortWriter{
w: w,
spw: spw,
}
return sw, nil
}
func (sw *SortWriter) Write(k, v interface{}) (err error) {
var kb, vb []byte
if kb, err = typedbytes.Encode(k); err != nil {
return
}
if vb, err = typedbytes.Encode(v); err != nil {
return
}
return sw.spw.Write(kb, vb)
}
func (sw *SortWriter) Close() (err error) {
err = sw.spw.Close()
sw.w.Close()
return
}