]> Sergey Matveev's repositories - btrtrc.git/blob - storage/completion_piece_map.go
Rework to use a pool of blobs
[btrtrc.git] / storage / completion_piece_map.go
1 package storage
2
3 import (
4         "sync"
5
6         "github.com/anacrolix/torrent/metainfo"
7 )
8
9 type mapPieceCompletion struct {
10         mu sync.Mutex
11         m  map[metainfo.PieceKey]bool
12 }
13
14 var _ PieceCompletion = (*mapPieceCompletion)(nil)
15
16 func NewMapPieceCompletion() PieceCompletion {
17         return &mapPieceCompletion{m: make(map[metainfo.PieceKey]bool)}
18 }
19
20 func (*mapPieceCompletion) Close() error { return nil }
21
22 func (me *mapPieceCompletion) Get(pk metainfo.PieceKey) (c Completion, err error) {
23         me.mu.Lock()
24         defer me.mu.Unlock()
25         c.Complete, c.Ok = me.m[pk]
26         return
27 }
28
29 func (me *mapPieceCompletion) Set(pk metainfo.PieceKey, b bool) error {
30         me.mu.Lock()
31         defer me.mu.Unlock()
32         if me.m == nil {
33                 me.m = make(map[metainfo.PieceKey]bool)
34         }
35         me.m[pk] = b
36         return nil
37 }