@cryptotaxi247 / kubo / commits / 1817d10cf

Create bufDagReader

License: MIT Signed-off-by: Jakub Sztandera <kubuxu@protonmail.ch>

Jakub Sztandera committed Nov 21, 2016 at 17:49 UTC 1817d10cfd9dd660b73ba039528db6f73561f61b
3 files changed +44 -3
unixfs/io/bufdagreader.go new
+41
@@ -0,0 +1,41 @@
1 +package io
2 +
3 +import (
4 + "bytes"
5 + "context"
6 + "io"
7 +)
8 +
9 +type bufDagReader struct {
10 + *bytes.Reader
11 +}
12 +
13 +func NewBufDagReader(b []byte) *bufDagReader {
14 + return &bufDagReader{bytes.NewReader(b)}
15 +}
16 +
17 +var _ DagReader = (*bufDagReader)(nil)
18 +
19 +func (*bufDagReader) Close() error {
20 + return nil
21 +}
22 +
23 +func (rd *bufDagReader) CtxReadFull(ctx context.Context, b []byte) (int, error) {
24 + return rd.Read(b)
25 +}
26 +
27 +func (rd *bufDagReader) Offset() int64 {
28 + of, err := rd.Seek(0, io.SeekCurrent)
29 + if err != nil {
30 + panic("this should never happen " + err.Error())
31 + }
32 + return of
33 +}
34 +
35 +func (rd *bufDagReader) Size() uint64 {
36 + s := rd.Reader.Size()
37 + if s < 0 {
38 + panic("size smaller than 0 (impossible!!)")
39 + }
40 + return uint64(s)
41 +}
unixfs/io/dagreader.go
+1 -3
@@ -37,9 +37,7 @@ type ReadSeekCloser interface {
37 func NewDagReader(ctx context.Context, n node.Node, serv mdag.DAGService) (DagReader, error) {
38 switch n := n.(type) {
39 case *mdag.RawNode:
40 - return &pbDagReader{
41 - buf: NewRSNCFromBytes(n.RawData()),
42 - }, nil
40 + return NewBufDagReader(n.RawData()), nil
41 case *mdag.ProtoNode:
42 pb := new(ftpb.Data)
43 if err := proto.Unmarshal(n.Data(), pb); err != nil {
unixfs/io/pbdagreader.go
+2
@@ -45,6 +45,8 @@ type pbDagReader struct {
45 cancel func()
46 }
47
48 +var _ DagReader = (*pbDagReader)(nil)
49 +
50 func NewPBFileReader(ctx context.Context, n *mdag.ProtoNode, pb *ftpb.Data, serv mdag.DAGService) *pbDagReader {
51 fctx, cancel := context.WithCancel(ctx)
52 promises := mdag.GetDAG(fctx, serv, n)