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 #include <omniORB4/CORBA.h>
00029
00030 namespace OmniEvents {
00031
00032
00033 EventQueue::EventQueue(long size)
00034 : _next(0),
00035 _size(size+1),
00036 _queue(new CORBA::Any*[_size])
00037 {
00038 assert(_size>1);
00039
00040
00041 memset(_queue,0,_size*sizeof(CORBA::Any*));
00042 }
00043
00044
00045 EventQueue::~EventQueue()
00046 {
00047 for(long i=0; i<_size; ++i)
00048 delete _queue[i];
00049 delete[] _queue;
00050 }
00051
00052
00053 void EventQueue::append(list<CORBA::Any*>& events)
00054 {
00055 for(list<CORBA::Any*>::iterator i=events.begin(); i!=events.end(); ++i)
00056 {
00057 delete _queue[_next];
00058 _queue[_next]=*i;
00059 _next=(++_next)%_size;
00060 }
00061 events.clear();
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)%_eventQueue._size;
00088 return result;
00089 }
00090
00091
00092 };