diff options
| author | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2007-06-09 10:06:53 +0000 |
|---|---|---|
| committer | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2007-06-09 10:06:53 +0000 |
| commit | 2d522cf6b7be0a4e58d2111ed9f939d6e3019582 (patch) | |
| tree | 336e44735aa3ac545bbf127fdaf61115f33bbed9 /src/ByteArrayDiskWriter.cc | |
| parent | c7fbedfa0aba7bd23f101d6823cb46348745c363 (diff) | |
2007-06-09 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
Added -j command-line option.
* src/OptionHandlerFactory.cc (createOptionHandlers)
* src/main.cc
* src/ByteArrayDiskWriter.h, src/ByteArrayDiskWriter.cc
Rewritten using stringstream.
* src/TrackerUpdateCommand.h, src/TrackerUpdateCommand.cc
Rewritten using stringstream.
Diffstat (limited to 'src/ByteArrayDiskWriter.cc')
| -rw-r--r-- | src/ByteArrayDiskWriter.cc | 41 |
1 files changed, 15 insertions, 26 deletions
diff --git a/src/ByteArrayDiskWriter.cc b/src/ByteArrayDiskWriter.cc index 089a6c21..2a71ed38 100644 --- a/src/ByteArrayDiskWriter.cc +++ b/src/ByteArrayDiskWriter.cc @@ -35,7 +35,7 @@ #include "ByteArrayDiskWriter.h" #include "Util.h" -ByteArrayDiskWriter::ByteArrayDiskWriter():buf(0) { +ByteArrayDiskWriter::ByteArrayDiskWriter() { } ByteArrayDiskWriter::~ByteArrayDiskWriter() { @@ -43,20 +43,12 @@ ByteArrayDiskWriter::~ByteArrayDiskWriter() { } void ByteArrayDiskWriter::clear() { - delete [] buf; - buf = 0; -} - -void ByteArrayDiskWriter::init() { - maxBufLength = 256; - buf = new char[maxBufLength]; - bufLength = 0; + buf.str(""); } void ByteArrayDiskWriter::initAndOpenFile(const string& filename, int64_t totalLength) { clear(); - init(); } void ByteArrayDiskWriter::openFile(const string& filename, @@ -74,24 +66,21 @@ void ByteArrayDiskWriter::openExistingFile(const string& filename, } void ByteArrayDiskWriter::writeData(const char* data, int32_t dataLength, int64_t position) { - if(bufLength+dataLength >= maxBufLength) { - maxBufLength = Util::expandBuffer(&buf, bufLength, bufLength+dataLength); + if(size() < position) { + buf.seekg(0, ios_base::end); + for(int32_t i = size(); i < position; ++i) { + buf.put('\0'); + } + } else { + buf.seekg(position, ios_base::beg); } - memcpy(buf+bufLength, data, dataLength); - bufLength += dataLength; + buf.write(data, dataLength); } int ByteArrayDiskWriter::readData(char* data, int32_t len, int64_t position) { - if(position >= bufLength) { - return 0; - } - int32_t readLength; - if(position+len <= bufLength) { - readLength = len; - } else { - readLength = bufLength-position; - } - memcpy(data, buf+position, readLength); - return readLength; + buf.seekg(position, ios_base::beg); + buf.read(data, len); + // TODO we have to call buf.clear() here? YES + buf.clear(); + return buf.gcount(); } - |
