diff options
| author | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2008-06-15 16:19:06 +0000 |
|---|---|---|
| committer | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2008-06-15 16:19:06 +0000 |
| commit | 2f8e184fe5c8b8264fd0219ba2001be84c148d54 (patch) | |
| tree | afc7be78df791756df1a7f02974779372faec6e1 /src/MultiFileAllocationIterator.cc | |
| parent | f9988a4ef6d769e5bb3fff2904622567fed72215 (diff) | |
2008-06-16 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
Create only requested files and files which shares a piece with
requested file in multi-torrent downloads. Directory structures
are
also created in the same rule.
MultiDiskAdaptor::fileExists() now uses FileEntry instead of
DiskWriterEntry as in the previous implementation.
* src/MultiDiskWriter.cc
* src/MultiFileAllocationIterator.cc
* src/MultiFileAllocationIterator.h
* test/MultiFileAllocationIteratorTest.cc
Diffstat (limited to 'src/MultiFileAllocationIterator.cc')
| -rw-r--r-- | src/MultiFileAllocationIterator.cc | 43 |
1 files changed, 2 insertions, 41 deletions
diff --git a/src/MultiFileAllocationIterator.cc b/src/MultiFileAllocationIterator.cc index 349d174f..1f541361 100644 --- a/src/MultiFileAllocationIterator.cc +++ b/src/MultiFileAllocationIterator.cc @@ -42,11 +42,9 @@ namespace aria2 { MultiFileAllocationIterator::MultiFileAllocationIterator(MultiDiskAdaptor* diskAdaptor): _diskAdaptor(diskAdaptor), + _entries(_diskAdaptor->diskWriterEntries), _offset(0) -{ - makeDiskWriterEntries(_entries, diskAdaptor->diskWriterEntries, - diskAdaptor->getPieceLength()); -} +{} MultiFileAllocationIterator::~MultiFileAllocationIterator() {} @@ -106,41 +104,4 @@ const DiskWriterEntries& MultiFileAllocationIterator::getDiskWriterEntries() con return _entries; } -void MultiFileAllocationIterator::makeDiskWriterEntries -(std::deque<SharedHandle<DiskWriterEntry> >& dwEntries, - const DiskWriterEntries& srcEntries, size_t pieceLength) const -{ - if(pieceLength == 0) { - for(DiskWriterEntries::const_iterator itr = srcEntries.begin(); itr != srcEntries.end(); ++itr) { - if((*itr)->getFileEntry()->isRequested()) { - dwEntries.push_back(*itr); - } - } - } else { - DiskWriterEntries temp(srcEntries); - { - SharedHandle<FileEntry> f(new FileEntry()); - SharedHandle<DiskWriterEntry> e(new DiskWriterEntry(f)); - temp.push_front(e); - } - DiskWriterEntries::const_iterator done = temp.begin(); - for(DiskWriterEntries::const_iterator itr = temp.begin()+1; itr != temp.end(); ++itr) { - const FileEntryHandle& fileEntry = (*itr)->getFileEntry(); - if(!fileEntry->isRequested()) { - continue; - } - off_t pieceStartOffset = (fileEntry->getOffset()/pieceLength)*pieceLength; - for(DiskWriterEntries::const_iterator i = itr-1; i != done; --i) { - if((uint64_t)pieceStartOffset < (*i)->getFileEntry()->getOffset()+(*i)->getFileEntry()->getLength()) { - dwEntries.push_back(*i); - } else { - break; - } - } - dwEntries.push_back(*itr); - done = itr; - } - } -} - } // namespace aria2 |
