#ifndef itkHierarchicalQueue_txx #define itkHierarchicalQueue_txx #include "itkHierarchicalQueue.h" namespace itk { template HierarchicalQueue ::HierarchicalQueue() : m_Compare(), m_Container(), m_Size(0) { } template HierarchicalQueue ::HierarchicalQueue(HierarchicalQueue const & src) : m_Compare(src.m_Compare), m_Container(src.m_Container), m_CurrentPriority(src.m_CurrentPriority), m_Size(src.m_Size) { } template HierarchicalQueue ::~HierarchicalQueue() { } template void HierarchicalQueue ::Push(PriorityType p, ValueType v) { if(m_Size == 0) { m_CurrentPriority = p; } else if(m_Compare(p, m_CurrentPriority)) { m_CurrentPriority = p; } // else : don't change the current priority m_Container[p].push(v); ++m_Size; } template void HierarchicalQueue ::Pop() { m_Container.begin()->second.pop(); --m_Size; if(m_Container.begin()->second.empty()) { m_Container.erase(m_Container.begin()); if(m_Size != 0) m_CurrentPriority = m_Container.begin()->first; } } template bool HierarchicalQueue ::IsEmpty() { return (m_Size == 0); } template typename HierarchicalQueue::SizeType HierarchicalQueue ::GetSize() const { return m_Size; } template typename HierarchicalQueue::ValueType const & HierarchicalQueue ::GetFront() const { return m_Container.begin()->second.front(); } template typename HierarchicalQueue::PriorityType const HierarchicalQueue ::GetPriority() const { return m_CurrentPriority; } } #endif // itkHierarchicalQueue_txx