]> Sergey Matveev's repositories - btrtrc.git/commitdiff
Add various helpers to Info
authorMatt Joiner <anacrolix@gmail.com>
Thu, 26 Feb 2015 14:41:35 +0000 (01:41 +1100)
committerMatt Joiner <anacrolix@gmail.com>
Thu, 26 Feb 2015 14:41:35 +0000 (01:41 +1100)
metainfo/metainfo.go

index 0b6056453b9d23eda9b89a5327bcb419354610cc..52ba9bf6fcf1d8a822702d22029839c83f648867 100644 (file)
@@ -46,6 +46,42 @@ type Info struct {
        Files       []FileInfo `bencode:"files,omitempty"`
 }
 
+func (me *Info) TotalLength() (ret int64) {
+       if me.IsDir() {
+               for _, fi := range me.Files {
+                       ret += fi.Length
+               }
+       } else {
+               ret = me.Length
+       }
+       return
+}
+
+func (me *Info) NumPieces() int {
+       return len(me.Pieces) / 20
+}
+
+type Piece interface {
+       Hash() []byte
+       Length() int64
+}
+
+type piece struct {
+       Info *Info
+       i    int
+}
+
+func (me piece) Length() int64 {
+       if me.i == me.Info.NumPieces()-1 {
+               return me.Info.TotalLength() - int64(me.i)*me.Info.PieceLength
+       }
+       return me.Info.PieceLength
+}
+
+func (me *Info) Piece(i int) piece {
+       return piece{me, i}
+}
+
 func (i *Info) IsDir() bool {
        return len(i.Files) != 0
 }