diff --git a/src/ByteArrayDiskWriter.cc b/src/ByteArrayDiskWriter.cc new file mode 100644 index 00000000..dfc94ede --- /dev/null +++ b/src/ByteArrayDiskWriter.cc @@ -0,0 +1,80 @@ +/* */ +#include "ByteArrayDiskWriter.h" + +ByteArrayDiskWriter::ByteArrayDiskWriter():buf(NULL) { +} + +ByteArrayDiskWriter::~ByteArrayDiskWriter() { + closeFile(); +} + +void ByteArrayDiskWriter::clear() { + if(buf != NULL) { + delete [] buf; + buf = NULL; + } +} + +void ByteArrayDiskWriter::init() { + maxBufLength = 256; + buf = new char[maxBufLength]; + bufLength = 0; +} + +void ByteArrayDiskWriter::reset() { + clear(); + init(); +} + +void ByteArrayDiskWriter::initAndOpenFile(string filename) { + openFile(filename); +} + +void ByteArrayDiskWriter::openFile(const string& filename) { + clear(); + init(); +} + +void ByteArrayDiskWriter::closeFile() { + clear(); +} + +void ByteArrayDiskWriter::openExistingFile(string filename) { + openFile(filename); +} + +void ByteArrayDiskWriter::writeData(const char* data, int dataLength, long long int position) { + if(bufLength+dataLength >= maxBufLength) { + expandBuffer(bufLength+dataLength); + } + memcpy(buf+bufLength, data, dataLength); + bufLength += dataLength; +} + +void ByteArrayDiskWriter::expandBuffer(int newSize) { + char* newbuf = new char[newSize]; + memcpy(newbuf, buf, bufLength); + delete [] buf; + buf = newbuf; + maxBufLength = newSize; +} diff --git a/src/ByteArrayDiskWriter.h b/src/ByteArrayDiskWriter.h new file mode 100644 index 00000000..c5abe81c --- /dev/null +++ b/src/ByteArrayDiskWriter.h @@ -0,0 +1,65 @@ +/* */ +#ifndef _D_BYTE_ARRAY_DISK_WRITER_H_ +#define _D_BYTE_ARRAY_DISK_WRITER_H_ + +#include "DiskWriter.h" + +class ByteArrayDiskWriter : public DiskWriter { +private: + char* buf; + int maxBufLength; + int bufLength; + + void init(); + void clear(); + void expandBuffer(int newSize); +public: + ByteArrayDiskWriter(); + virtual ~ByteArrayDiskWriter(); + + + virtual void initAndOpenFile(string filename); + + virtual void openFile(const string& filename); + + virtual void closeFile(); + + virtual void openExistingFile(string filename); + + // position is ignored + virtual void writeData(const char* data, int len, long long int position = 0); + // not implemented yet + virtual int readData(char* data, int len, long long int position) { return 0; } + // not implemented yet + virtual string sha1Sum(long long int offset, long long int length) { return ""; } + + const char* getByteArray() const { + return buf; + } + int getByteArrayLength() const { + return bufLength; + } + void reset(); +}; + +#endif // _D_BYTE_ARRAY_DISK_WRITER_H_