00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
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