aboutsummaryrefslogtreecommitdiff
path: root/meta/piece.go
blob: 354db9a43f414626a1f4cac54fdb8965ca2e4f3a (plain)
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
package meta

import (
	"crypto/sha1"

	"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
}

func (p Pieces) Good() float64 {
	var good int
	for _, v := range p {
		if v.Ok {
			good++
		}
	}
	return float64(good) * 100.0 / float64(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
}