/* */ #ifndef _D_DISK_WRITER_H_ #define _D_DISK_WRITER_H_ #include #include "common.h" #ifdef ENABLE_MESSAGE_DIGEST #include "messageDigest.h" #endif // ENABLE_MESSAGE_DIGEST using namespace std; /** * Interface for writing to a binary stream of bytes. * */ class DiskWriter { public: virtual ~DiskWriter() {} /** * Creates a file output stream to write to the file with the specified name. * If the file exists, then it is truncated to 0 length. * @param filename the file name to be opened. */ virtual void initAndOpenFile(const string& filename, int64_t totalLength = 0) = 0; virtual void openFile(const string& filename, int64_t totalLength = 0) = 0; /** * Closes this output stream. */ virtual void closeFile() = 0; /** * Opens a file output stream to write to the file with the specified name. * If the file doesnot exists, an exception may be throwed. * * @param filename the file name to be opened. */ virtual void openExistingFile(const string& filename) = 0; /* * Writes len bytes from data to this binary stream at offset position. * In case where offset position is not concerned(just write data * sequencially, for example), those subclasses can ignore the offset value. * * @param data the data * @param len the number of bytes to write * @param position the offset of this binary stream */ virtual void writeData(const char* data, int32_t len, int64_t position = 0) = 0; virtual void writeData(const unsigned char* data, int32_t len, int64_t position = 0) { writeData((const char*)data, len, position); } virtual int readData(char* data, int32_t len, int64_t position) = 0; virtual int readData(unsigned char* data, int32_t len, int64_t position) { return readData((char*)data, len, position); } #ifdef ENABLE_MESSAGE_DIGEST virtual string messageDigest(int64_t offset, int64_t length, const MessageDigestContext::DigestAlgo& algo) = 0; #endif // ENABLE_MESSAGE_DIGEST }; typedef SharedHandle DiskWriterHandle; #endif // _D_DISK_WRITER_H_