package meta import ( "crypto/sha1" "fmt" "dim13.org/btget/bitfield" ) type Pieces []Piece type Piece struct { Offset int64 Length int Sum [sha1.Size]byte Ok bool } func (p *Piece) Check(b []byte) bool { if !p.Ok { p.Ok = sha1.Sum(b) == p.Sum } return p.Ok } type Percent float64 func (p Percent) String() string { return fmt.Sprintf("%6.2f%%", p) } func (p Pieces) Good() Percent { var good int for _, v := range p { if v.Ok { good++ } } return Percent(good) * 100.0 / Percent(len(p)) } func (p Pieces) BitField() bitfield.BitField { bf := bitfield.New(len(p)) for i, v := range p { if v.Ok { bf.Set(i) } } return bf }