/* */ #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; size_t _overflowLength; 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 size_t getOverflowLength() const { return _overflowLength; } 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; }; typedef SharedHandle PiecedSegmentHandle; } // namespace aria2 #endif // _D_PIECED_SEGMENT_H_