00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #include "EventQueue.h"
00025 #include <string.h>
00026 #include <assert.h>
00027
00028 #ifdef HAVE_CONFIG_H
00029 # include "config.h"
00030 #endif
00031
00032 #ifdef HAVE_OMNIORB3
00033 # include <omniORB3/CORBA.h>
00034 #endif
00035
00036 #ifdef HAVE_OMNIORB4
00037 # include <omniORB4/CORBA.h>
00038 #endif
00039
00040 namespace OmniEvents {
00041
00042
00043 EventQueue::EventQueue(long size)
00044 : _next(0),
00045 _size(size+1),
00046 _queue(new CORBA::Any*[_size]),
00047 _filter(NULL)
00048 {
00049 DB(5,"MaxQueueLength="<<size)
00050 assert(_size>1);
00051
00052
00053 memset(_queue,0,_size*sizeof(CORBA::Any*));
00054 }
00055
00056
00057 EventQueue::~EventQueue()
00058 {
00059 for(long i=0; i<_size; ++i)
00060 delete _queue[i];
00061 delete[] _queue;
00062 }
00063
00064
00065
00066
00067
00068
00069
00070 EventQueue::Reader::Reader(EventQueue& eventQueue)
00071 : _eventQueue(eventQueue),
00072 _next(eventQueue._next)
00073 {
00074
00075 }
00076
00077
00078 bool EventQueue::Reader::moreEvents() const
00079 {
00080 return( _next!=_eventQueue._next );
00081 }
00082
00083
00084 CORBA::Any* EventQueue::Reader::nextEvent()
00085 {
00086 CORBA::Any* result =_eventQueue._queue[_next];
00087 _next=(_next+1)%_eventQueue._size;
00088 return result;
00089 }
00090
00091
00092 };