summaryrefslogtreecommitdiff
path: root/src/MultiFileAllocationIterator.cc
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2008-06-15 16:19:06 +0000
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2008-06-15 16:19:06 +0000
commit2f8e184fe5c8b8264fd0219ba2001be84c148d54 (patch)
treeafc7be78df791756df1a7f02974779372faec6e1 /src/MultiFileAllocationIterator.cc
parentf9988a4ef6d769e5bb3fff2904622567fed72215 (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.cc43
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