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