123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- /* -*- C++ -*- */
- /****************************************************************************
- ** Copyright (c) 2001-2014
- **
- ** This file is part of the QuickFIX FIX Engine
- **
- ** This file may be distributed under the terms of the quickfixengine.org
- ** license as defined by quickfixengine.org and appearing in the file
- ** LICENSE included in the packaging of this file.
- **
- ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
- ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
- **
- ** See http://www.quickfixengine.org/LICENSE for licensing information.
- **
- ** Contact ask@quickfixengine.org if any conditions of this licensing are
- ** not clear to you.
- **
- ****************************************************************************/
- #ifndef FIX_QUEUE_H
- #define FIX_QUEUE_H
- #include "Utility.h"
- #include "Event.h"
- #include "Mutex.h"
- #include <queue>
- namespace FIX
- {
- /// A thread safe monitored queue
- template < typename T > class Queue
- {
- public:
- void push( const T& value )
- {
- Locker locker( m_mutex );
- m_queue.push( value );
- signal();
- }
- bool pop( T& value )
- {
- Locker locker( m_mutex );
- if ( !m_queue.size() ) return false;
- value = m_queue.front();
- m_queue.pop();
- return true;
- }
- int size()
- {
- Locker locker( m_mutex );
- return m_queue.size();
- }
- void wait( double s )
- {
- m_event.wait( s );
- }
- void signal()
- {
- m_event.signal();
- }
- private:
- Event m_event;
- Mutex m_mutex;
- std::queue < T > m_queue;
- };
- }
- #endif
|