/* */ #ifndef _UT_METADATA_REQUEST_TRACKER_H_ #define _UT_METADATA_REQUEST_TRACKER_H_ #include "common.h" #include #include "TimeA2.h" #include "wallclock.h" namespace aria2 { class Logger; class UTMetadataRequestTracker { private: struct RequestEntry { size_t _index; Time _dispatchedTime; RequestEntry(size_t index):_index(index) {} bool elapsed(time_t t) const { return _dispatchedTime.difference(global::wallclock) >= t; } bool operator==(const RequestEntry& e) const { return _index == e._index; } }; std::vector _trackedRequests; Logger* _logger; public: UTMetadataRequestTracker(); // Add request index to tracking list. void add(size_t index); // Returns true if request index is tracked. bool tracks(size_t index); // Remove index from tracking list. void remove(size_t index); // Returns all tracking indexes. std::vector getAllTrackedIndex() const; // Removes request index which is timed out and returns their indexes. std::vector removeTimeoutEntry(); // Returns the number of tracking list. size_t count() const { return _trackedRequests.size(); } // Returns the number of additional index this tracker can track. size_t avail() const; }; } // namespace aria2 #endif // _UT_METADATA_REQUEST_TRACKER_H_