/* */ #ifndef _D_ABSTRACT_DISK_WRITER_H_ #define _D_ABSTRACT_DISK_WRITER_H_ #include "DiskWriter.h" #ifdef ENABLE_MESSAGE_DIGEST #include "messageDigest.h" #endif // ENABLE_MESSAGE_DIGEST #include "FileAllocator.h" #include "Logger.h" class AbstractDiskWriter : public DiskWriter { protected: string filename; int32_t fd; FileAllocatorHandle fileAllocator; const Logger* logger; #ifdef ENABLE_MESSAGE_DIGEST MessageDigestContext ctx; #endif // ENABLE_MESSAGE_DIGEST void createFile(const string& filename, int32_t addFlags = 0); void writeDataInternal(const char* data, uint32_t len); int readDataInternal(char* data, uint32_t len); void seek(int64_t offset); public: AbstractDiskWriter(); virtual ~AbstractDiskWriter(); virtual void openFile(const string& filename, uint64_t totalLength = 0); virtual void closeFile(); virtual void openExistingFile(const string& filename); virtual string sha1Sum(int64_t offset, uint64_t length); virtual void writeData(const char* data, uint32_t len, int64_t offset); virtual int readData(char* data, uint32_t len, int64_t offset); void setFileAllocator(const FileAllocatorHandle& fileAllocator) { this->fileAllocator = fileAllocator; } }; #endif // _D_ABSTRACT_DISK_WRITER_H_