include/eventqueue.h
author Dmitriy Morozov <morozov@cs.duke.edu>
Sat, 16 Dec 2006 15:34:46 -0500
changeset 4 c1be260ad990
parent 0 d95020656286
permissions -rw-r--r--
Split OrderList into OrderList and ConsistencyList. Made efficient insertions possible.

/*
 * Author: Dmitriy Morozov
 * Department of Computer Science, Duke University, 2005 -- 2006
 */

#ifndef __EVENTQUEUE_H__
#define __EVENTQUEUE_H__

#include <map>

template<class _Key, class _Event>
class EventQueue
{

	public:
		typedef					_Key											Key;
		typedef					_Event											Event;

		// multimap just in case
		typedef					std::multimap<Key,Event>						QueueRepresentation;
		typedef					typename QueueRepresentation::iterator			iterator;
		typedef					typename QueueRepresentation::const_iterator	const_iterator;
		typedef					std::pair<Key, Event>							KeyValuePair;
		
		EventQueue()															{}
		
		const_iterator 			top() 	const									{ assert(!empty()); return queue.begin(); }
		iterator 				push(Key k, Event e)							{ return queue.insert(std::make_pair(k,e)); }
		void 					pop()											{ assert(!empty()); queue.erase(queue.begin()); }
		void					remove(iterator i)								{ queue.erase(i); }

		iterator 				end()											{ return queue.end(); }
		const_iterator 			end() const										{ return queue.end(); }
		bool					empty() const									{ return queue.empty(); }
		size_t					size() const									{ return queue.size(); }

	private:
		QueueRepresentation		queue;
};

#endif // __EVENTQUEUE_H__