/* */ #ifndef D_SEQUENTIAL_PICKER_H #define D_SEQUENTIAL_PICKER_H #include "common.h" #include #include "SharedHandle.h" namespace aria2 { template class SequentialPicker { private: std::deque > entries_; SharedHandle pickedEntry_; public: bool isPicked() const { return pickedEntry_; } const SharedHandle& getPickedEntry() const { return pickedEntry_; } void dropPickedEntry() { pickedEntry_.reset(); } bool hasNext() const { return !entries_.empty(); } SharedHandle pickNext() { SharedHandle r; if(hasNext()) { r = entries_.front(); entries_.pop_front(); pickedEntry_ = r; } return r; } void pushEntry(const SharedHandle& entry) { entries_.push_back(entry); } size_t countEntryInQueue() const { return entries_.size(); } }; } // namespace aria2 #endif // D_SEQUENTIAL_PICKER_H