Skip to content

Commit

Permalink
storage: Also use completion DB in mmap implementation
Browse files Browse the repository at this point in the history
  • Loading branch information
anacrolix committed Jun 20, 2016
1 parent 6b447c8 commit d80d0db
Showing 1 changed file with 12 additions and 12 deletions.
24 changes: 12 additions & 12 deletions storage/mmap.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,31 +14,34 @@ import (
)

type mmapStorage struct {
baseDir string
baseDir string
completion pieceCompletion
}

func NewMMap(baseDir string) Client {
return &mmapStorage{
baseDir: baseDir,
baseDir: baseDir,
completion: pieceCompletionForDir(baseDir),
}
}

func (s *mmapStorage) OpenTorrent(info *metainfo.InfoEx) (t Torrent, err error) {
span, err := mMapTorrent(&info.Info, s.baseDir)
t = &mmapTorrentStorage{
span: span,
pc: s.completion,
}
return
}

type mmapTorrentStorage struct {
span mmap_span.MMapSpan
completed map[metainfo.Hash]bool
span mmap_span.MMapSpan
pc pieceCompletion
}

func (ts *mmapTorrentStorage) Piece(p metainfo.Piece) Piece {
return mmapStoragePiece{
storage: ts,
pc: ts.pc,
p: p,
ReaderAt: io.NewSectionReader(ts.span, p.Offset(), p.Length()),
WriterAt: missinggo.NewSectionWriter(ts.span, p.Offset(), p.Length()),
Expand All @@ -51,21 +54,18 @@ func (ts *mmapTorrentStorage) Close() error {
}

type mmapStoragePiece struct {
storage *mmapTorrentStorage
p metainfo.Piece
pc pieceCompletion
p metainfo.Piece
io.ReaderAt
io.WriterAt
}

func (sp mmapStoragePiece) GetIsComplete() bool {
return sp.storage.completed[sp.p.Hash()]
return sp.pc.Get(sp.p)
}

func (sp mmapStoragePiece) MarkComplete() error {
if sp.storage.completed == nil {
sp.storage.completed = make(map[metainfo.Hash]bool)
}
sp.storage.completed[sp.p.Hash()] = true
sp.pc.Set(sp.p, true)
return nil
}

Expand Down

0 comments on commit d80d0db

Please sign in to comment.