/* */ #ifndef D_PIECED_SEGMENT_H #define D_PIECED_SEGMENT_H #include "Segment.h" namespace aria2 { class PiecedSegment:public Segment { private: SharedHandle 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_; int32_t writtenLength_; public: PiecedSegment(int32_t pieceLength, const SharedHandle& piece); virtual ~PiecedSegment(); virtual bool complete() const; virtual size_t getIndex() const; virtual int64_t getPosition() const; virtual int64_t getPositionToWrite() const; virtual int32_t getLength() const; virtual int32_t getSegmentLength() const { return pieceLength_; } virtual int32_t getWrittenLength() const { return writtenLength_; } virtual void updateWrittenLength(int32_t bytes); #ifdef ENABLE_MESSAGE_DIGEST // `begin' is a offset inside this segment. virtual bool updateHash (int32_t begin, const unsigned char* data, size_t dataLength); virtual bool isHashCalculated() const; virtual std::string getDigest(); #endif // ENABLE_MESSAGE_DIGEST virtual void clear(WrDiskCache* diskCache); virtual SharedHandle getPiece() const; }; } // namespace aria2 #endif // D_PIECED_SEGMENT_H