/* */ #ifndef D_PIECED_SEGMENT_H #define D_PIECED_SEGMENT_H #include "Segment.h" namespace aria2 { class PiecedSegment : public Segment { private: std::shared_ptr piece_; /** * Piece class has length property but it is a actual length of piece. * The last piece likely have shorter length than the other length. */ int32_t pieceLength_; int64_t writtenLength_; public: PiecedSegment(int32_t pieceLength, const std::shared_ptr& piece); virtual ~PiecedSegment(); virtual bool complete() const CXX11_OVERRIDE; virtual size_t getIndex() const CXX11_OVERRIDE; virtual int64_t getPosition() const CXX11_OVERRIDE; virtual int64_t getPositionToWrite() const CXX11_OVERRIDE; virtual int64_t getLength() const CXX11_OVERRIDE; virtual int64_t getSegmentLength() const CXX11_OVERRIDE { return pieceLength_; } virtual int64_t getWrittenLength() const CXX11_OVERRIDE { return writtenLength_; } virtual void updateWrittenLength(int64_t bytes) CXX11_OVERRIDE; // `begin' is a offset inside this segment. virtual bool updateHash(int64_t begin, const unsigned char* data, size_t dataLength) CXX11_OVERRIDE; virtual bool isHashCalculated() const CXX11_OVERRIDE; virtual std::string getDigest() CXX11_OVERRIDE; virtual void clear(WrDiskCache* diskCache) CXX11_OVERRIDE; virtual std::shared_ptr getPiece() const CXX11_OVERRIDE; }; } // namespace aria2 #endif // D_PIECED_SEGMENT_H