/* */ #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.isNull(); } 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_