summaryrefslogtreecommitdiff
path: root/src/MultiDiskWriter.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/MultiDiskWriter.cc')
-rw-r--r--src/MultiDiskWriter.cc70
1 files changed, 9 insertions, 61 deletions
diff --git a/src/MultiDiskWriter.cc b/src/MultiDiskWriter.cc
index 7172b809..922eed8e 100644
--- a/src/MultiDiskWriter.cc
+++ b/src/MultiDiskWriter.cc
@@ -24,7 +24,7 @@
#include "Util.h"
#include <errno.h>
-MultiDiskWriter::MultiDiskWriter() {
+MultiDiskWriter::MultiDiskWriter(int pieceLength):pieceLength(pieceLength) {
#ifdef ENABLE_SHA1DIGEST
sha1DigestInit(ctx);
#endif // ENABLE_SHA1DIGEST
@@ -37,63 +37,26 @@ MultiDiskWriter::~MultiDiskWriter() {
#endif // ENABLE_SHA1DIGEST
}
-typedef struct {
- long long int blockOffset;
- long long int length;
-} Range;
-
-typedef deque<Range> Ranges;
-
void MultiDiskWriter::clearEntries() {
for(DiskWriterEntries::iterator itr = diskWriterEntries.begin();
itr != diskWriterEntries.end(); itr++) {
- if((*itr)->enabled) {
- (*itr)->diskWriter->closeFile();
- }
delete *itr;
}
diskWriterEntries.clear();
}
-void MultiDiskWriter::setMultiFileEntries(const MultiFileEntries& multiFileEntries, int pieceLength) {
+void MultiDiskWriter::setFileEntries(const FileEntries& fileEntries) {
clearEntries();
- Ranges ranges;
- for(MultiFileEntries::const_iterator itr = multiFileEntries.begin();
- itr != multiFileEntries.end(); itr++) {
- if(itr->requested) {
- Range range;
- range.blockOffset = (itr->offset/pieceLength)*pieceLength;
- range.length = ((itr->offset+itr->length)/pieceLength+
- ((itr->offset+itr->length)%pieceLength ? 1 : 0))*pieceLength-range.blockOffset;
- ranges.push_back(range);
- }
- }
- Ranges::const_iterator ritr = ranges.begin();
- for(MultiFileEntries::const_iterator itr = multiFileEntries.begin();
- itr != multiFileEntries.end(); itr++) {
- DiskWriterEntry* entry;
- if(ritr != ranges.end() &&
- // !(ritr->blockOffset+ritr->length-1 < itr->offset ||
- // itr->offset+itr->length-1 < ritr->blockOffset)) {
- itr->offset < ritr->blockOffset+ritr->length &&
- ritr->blockOffset < itr->offset+itr->length) {
-
- entry = new DiskWriterEntry(*itr, true);
- for(;ritr->blockOffset+ritr->length <= itr->offset+itr->length &&
- ritr != ranges.end(); ritr++);
- } else {
- entry = new DiskWriterEntry(*itr, false);
- }
- diskWriterEntries.push_back(entry);
+ for(FileEntries::const_iterator itr = fileEntries.begin();
+ itr != fileEntries.end(); itr++) {
+ diskWriterEntries.push_back(new DiskWriterEntry(*itr));
}
}
void MultiDiskWriter::openFile(const string& filename) {
for(DiskWriterEntries::iterator itr = diskWriterEntries.begin();
itr != diskWriterEntries.end(); itr++) {
- if((*itr)->enabled) {
- (*itr)->diskWriter->openFile(filename+"/"+(*itr)->fileEntry.path);
- }
+ (*itr)->diskWriter->openFile(filename+"/"+(*itr)->fileEntry.path);
}
}
@@ -101,27 +64,21 @@ void MultiDiskWriter::openFile(const string& filename) {
void MultiDiskWriter::initAndOpenFile(string filename) {
for(DiskWriterEntries::iterator itr = diskWriterEntries.begin();
itr != diskWriterEntries.end(); itr++) {
- if((*itr)->enabled) {
- (*itr)->diskWriter->initAndOpenFile(filename+"/"+(*itr)->fileEntry.path);
- }
+ (*itr)->diskWriter->initAndOpenFile(filename+"/"+(*itr)->fileEntry.path);
}
}
void MultiDiskWriter::closeFile() {
for(DiskWriterEntries::iterator itr = diskWriterEntries.begin();
itr != diskWriterEntries.end(); itr++) {
- if((*itr)->enabled) {
- (*itr)->diskWriter->closeFile();
- }
+ (*itr)->diskWriter->closeFile();
}
}
void MultiDiskWriter::openExistingFile(string filename) {
for(DiskWriterEntries::iterator itr = diskWriterEntries.begin();
itr != diskWriterEntries.end(); itr++) {
- if((*itr)->enabled) {
- (*itr)->diskWriter->openExistingFile(filename+"/"+(*itr)->fileEntry.path);
- }
+ (*itr)->diskWriter->openExistingFile(filename+"/"+(*itr)->fileEntry.path);
}
}
@@ -133,9 +90,6 @@ void MultiDiskWriter::writeData(const char* data, int len, long long int positio
for(DiskWriterEntries::iterator itr = diskWriterEntries.begin();
itr != diskWriterEntries.end() && rem != 0; itr++) {
if(isInRange(*itr, offset) || writing) {
- if(!(*itr)->enabled) {
- throw new DlAbortEx("invalid offset or length. offset = %lld", offset);
- }
int writeLength = calculateLength(*itr, fileOffset, rem);
(*itr)->diskWriter->writeData(data+(len-rem), writeLength, fileOffset);
rem -= writeLength;
@@ -174,9 +128,6 @@ int MultiDiskWriter::readData(char* data, int len, long long int position) {
for(DiskWriterEntries::iterator itr = diskWriterEntries.begin();
itr != diskWriterEntries.end() && rem != 0; itr++) {
if(isInRange(*itr, offset) || reading) {
- if(!(*itr)->enabled) {
- throw new DlAbortEx("invalid offset or length. offset = %lld", offset);
- }
int readLength = calculateLength((*itr), fileOffset, rem);
totalReadLength += (*itr)->diskWriter->readData(data+(len-rem), readLength, fileOffset);
rem -= readLength;
@@ -223,9 +174,6 @@ string MultiDiskWriter::sha1Sum(long long int offset, long long int length) {
for(DiskWriterEntries::iterator itr = diskWriterEntries.begin();
itr != diskWriterEntries.end() && rem != 0; itr++) {
if(isInRange(*itr, offset) || reading) {
- if(!(*itr)->enabled) {
- throw new DlAbortEx("invalid offset or length. offset = %lld", offset);
- }
int readLength = calculateLength((*itr), fileOffset, rem);
hashUpdate(*itr, fileOffset, readLength);
rem -= readLength;