/* */ #include "PiecedSegment.h" #include "Piece.h" #include namespace aria2 { PiecedSegment::PiecedSegment (size_t pieceLength, const SharedHandle& piece): pieceLength_(pieceLength), piece_(piece) { size_t index; bool t = piece_->getFirstMissingBlockIndexWithoutLock(index); assert(t); writtenLength_ = index*piece_->getBlockLength(); } PiecedSegment::~PiecedSegment() {} bool PiecedSegment::complete() const { return piece_->pieceComplete(); } size_t PiecedSegment::getIndex() const { return piece_->getIndex(); } off_t PiecedSegment::getPosition() const { return ((off_t)piece_->getIndex())*pieceLength_; } off_t PiecedSegment::getPositionToWrite() const { return getPosition()+writtenLength_; } size_t PiecedSegment::getLength() const { return piece_->getLength(); } void PiecedSegment::updateWrittenLength(size_t bytes) { size_t newWrittenLength = writtenLength_+bytes; assert(newWrittenLength <= piece_->getLength()); for(size_t i = writtenLength_/piece_->getBlockLength(), end = newWrittenLength/piece_->getBlockLength(); i < end; ++i) { piece_->completeBlock(i); } if(newWrittenLength == piece_->getLength()) { piece_->completeBlock(piece_->countBlock()-1); } writtenLength_ = newWrittenLength; } #ifdef ENABLE_MESSAGE_DIGEST bool PiecedSegment::updateHash(uint32_t begin, const unsigned char* data, size_t dataLength) { return piece_->updateHash(begin, data, dataLength); } bool PiecedSegment::isHashCalculated() const { return piece_->isHashCalculated(); } std::string PiecedSegment::getHashString() { return piece_->getHashString(); } #endif // ENABLE_MESSAGE_DIGEST void PiecedSegment::clear() { writtenLength_ = 0; piece_->clearAllBlock(); #ifdef ENABLE_MESSAGE_DIGEST piece_->destroyHashContext(); #endif // ENABLE_MESSAGE_DIGEST } SharedHandle PiecedSegment::getPiece() const { return piece_; } } // namespace aria2