/* */ #ifndef _D_ITERATABLE_CHUNK_CHECKSUM_VALIDATOR_H_ #define _D_ITERATABLE_CHUNK_CHECKSUM_VALIDATOR_H_ #include "common.h" #include "BitfieldMan.h" #include "ChunkChecksum.h" #include "DiskWriter.h" #include "LogFactory.h" class IteratableChunkChecksumValidator { private: DiskWriterHandle _diskWriter; BitfieldMan* _bitfield; int32_t _currentIndex; ChunkChecksumHandle _chunkChecksum; const Logger* logger; string calculateActualChecksum(); public: IteratableChunkChecksumValidator():_diskWriter(0), _bitfield(0), _currentIndex(0), _chunkChecksum(0), logger(LogFactory::getInstance()) {} bool canValidate() const; void init(); void validateChunk(); bool finished() const { return _currentIndex >= _chunkChecksum->countChecksum(); } void setDiskWriter(const DiskWriterHandle& diskWriter) { _diskWriter = diskWriter; } void setBitfield(BitfieldMan* bitfield) { _bitfield = bitfield; } void setChunkChecksum(const ChunkChecksumHandle& chunkChecksum) { _chunkChecksum = chunkChecksum; } int64_t getCurrentOffset() const { return ((int64_t)_currentIndex)*_chunkChecksum->getChecksumLength(); } int64_t getTotalLength() const { return _bitfield->getTotalLength(); } ChunkChecksumHandle getChunkChecksum() { return _chunkChecksum; } }; typedef SharedHandle IteratableChunkChecksumValidatorHandle; #endif // _D_ITERATABLE_CHUNK_CHECKSUM_VALIDATOR_H_