/* */ #ifndef _D_REQUEST_SLOT_H_ #define _D_REQUEST_SLOT_H_ #include "common.h" #include "TimeA2.h" #include "Piece.h" #include namespace aria2 { class RequestSlot { private: Time dispatchedTime; size_t index; uint32_t begin; size_t length; size_t blockIndex; // This is the piece whose index is index of this RequestSlot has. // To detect duplicate RequestSlot, we have to find the piece using // PieceStorage::getPiece() repeatedly. It turns out that this process // takes time(about 1.7% of processing time). To reduce it, we put piece here // at the construction of RequestSlot as a cache. SharedHandle _piece; void copy(const RequestSlot& requestSlot); public: RequestSlot(size_t index, uint32_t begin, size_t length, size_t blockIndex, const SharedHandle& piece = SharedHandle()); RequestSlot(const RequestSlot& requestSlot); RequestSlot(); ~RequestSlot() {} RequestSlot& operator=(const RequestSlot& requestSlot); bool operator==(const RequestSlot& requestSlot) const; bool operator!=(const RequestSlot& requestSlot) const; bool operator<(const RequestSlot& requestSlot) const; void setDispatchedTime(); void setDispatchedTime(time_t secFromEpoch); bool isTimeout(const struct timeval& now, time_t timeoutSec) const; unsigned int getLatencyInMillis() const; size_t getIndex() const { return index; } void setIndex(size_t index) { this->index = index; } uint32_t getBegin() const { return begin; } void setBegin(uint32_t begin) { this->begin = begin; } size_t getLength() const { return length; } void setLength(size_t length) { this->length = length; } size_t getBlockIndex() const { return blockIndex; } void setBlockIndex(size_t blockIndex) { this->blockIndex = blockIndex; } SharedHandle getPiece() const; static RequestSlot nullSlot; static bool isNull(const RequestSlot& requestSlot); }; typedef std::deque RequestSlots; } // namespace aria2 #endif // _D_REQUEST_SLOT_H_