![]() |
00001 /* -*- C++ -*- */ 00002 00003 /**************************************************************************** 00004 ** Copyright (c) quickfixengine.org All rights reserved. 00005 ** 00006 ** This file is part of the QuickFIX FIX Engine 00007 ** 00008 ** This file may be distributed under the terms of the quickfixengine.org 00009 ** license as defined by quickfixengine.org and appearing in the file 00010 ** LICENSE included in the packaging of this file. 00011 ** 00012 ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 00013 ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 00014 ** 00015 ** See http://www.quickfixengine.org/LICENSE for licensing information. 00016 ** 00017 ** Contact ask@quickfixengine.org if any conditions of this licensing are 00018 ** not clear to you. 00019 ** 00020 ****************************************************************************/ 00021 00022 #ifndef FIX_QUEUE_H 00023 #define FIX_QUEUE_H 00024 00025 #include "Utility.h" 00026 #include "Event.h" 00027 #include "Mutex.h" 00028 #include <queue> 00029 00030 namespace FIX 00031 { 00033 template < typename T > class Queue 00034 { 00035 public: 00036 void push( const T& value ) 00037 { 00038 Locker locker( m_mutex ); 00039 m_queue.push( value ); 00040 signal(); 00041 } 00042 00043 bool pop( T& value ) 00044 { 00045 Locker locker( m_mutex ); 00046 if ( !m_queue.size() ) return false; 00047 value = m_queue.front(); 00048 m_queue.pop(); 00049 return true; 00050 } 00051 00052 int size() 00053 { 00054 Locker locker( m_mutex ); 00055 return m_queue.size(); 00056 } 00057 00058 void wait() 00059 { 00060 m_event.wait(); 00061 } 00062 00063 void signal() 00064 { 00065 m_event.signal(); 00066 } 00067 00068 private: 00069 Event m_event; 00070 Mutex m_mutex; 00071 std::queue < T > m_queue; 00072 }; 00073 } 00074 00075 #endif