#ifndef hierarchical_queue_txx #define hierarchical_queue_txx template hierarchical_queue ::hierarchical_queue() : compare_(), container_(), size_(0) { } template hierarchical_queue ::hierarchical_queue(const hierarchical_queue & src) : compare_(src.compare_), container_(src.container_), currentPriority_(src.currentPriority_), size_(src.size_) { } template hierarchical_queue ::~hierarchical_queue() { } template void hierarchical_queue ::push(key_type p, value_type v) { if(size_ == 0) { currentPriority_ = p; } else if(compare_(p, currentPriority_)) { currentPriority_ = p; } // else : don't change the current priority container_[p].push(v); ++size_; } template void hierarchical_queue ::pop() { container_.begin()->second.pop(); --size_; if(container_.begin()->second.empty()) { container_.erase(container_.begin()); if(size_ != 0) currentPriority_ = container_.begin()->first; } } template bool hierarchical_queue ::empty() { return (size_ == 0); } template typename hierarchical_queue::size_type hierarchical_queue ::size() const { return size_; } template typename hierarchical_queue::value_type const & hierarchical_queue ::front() const { return container_.begin()->second.front(); } template typename hierarchical_queue::key_type const hierarchical_queue ::priority() const { return currentPriority_; } #endif // hierarchical_queue_txx