source: vendor/synergy/current/lib/base/CEventQueue.h

Last change on this file was 2749, checked in by bird, 19 years ago

synergy v1.3.1 sources (zip).

File size: 3.3 KB
Line 
1/*
2 * synergy -- mouse and keyboard sharing utility
3 * Copyright (C) 2004 Chris Schoeneman
4 *
5 * This package is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU General Public License
7 * found in the file COPYING that should have accompanied this file.
8 *
9 * This package is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 */
14
15#ifndef CEVENTQUEUE_H
16#define CEVENTQUEUE_H
17
18#include "IEventQueue.h"
19#include "CEvent.h"
20#include "CPriorityQueue.h"
21#include "CStopwatch.h"
22#include "IArchMultithread.h"
23#include "stdmap.h"
24#include "stdset.h"
25
26//! Event queue
27/*!
28An event queue that implements the platform independent parts and
29delegates the platform dependent parts to a subclass.
30*/
31class CEventQueue : public IEventQueue {
32public:
33 CEventQueue();
34 virtual ~CEventQueue();
35
36 // IEventQueue overrides
37 virtual void adoptBuffer(IEventQueueBuffer*);
38 virtual bool getEvent(CEvent& event, double timeout = -1.0);
39 virtual bool dispatchEvent(const CEvent& event);
40 virtual void addEvent(const CEvent& event);
41 virtual CEventQueueTimer*
42 newTimer(double duration, void* target);
43 virtual CEventQueueTimer*
44 newOneShotTimer(double duration, void* target);
45 virtual void deleteTimer(CEventQueueTimer*);
46 virtual void adoptHandler(CEvent::Type type,
47 void* target, IEventJob* handler);
48 virtual void removeHandler(CEvent::Type type, void* target);
49 virtual void removeHandlers(void* target);
50 virtual CEvent::Type
51 registerType(const char* name);
52 virtual CEvent::Type
53 registerTypeOnce(CEvent::Type& type, const char* name);
54 virtual bool isEmpty() const;
55 virtual IEventJob* getHandler(CEvent::Type type, void* target) const;
56 virtual const char* getTypeName(CEvent::Type type);
57
58private:
59 UInt32 saveEvent(const CEvent& event);
60 CEvent removeEvent(UInt32 eventID);
61 bool hasTimerExpired(CEvent& event);
62 double getNextTimerTimeout() const;
63
64private:
65 class CTimer {
66 public:
67 CTimer(CEventQueueTimer*, double timeout, double initialTime,
68 void* target, bool oneShot);
69 ~CTimer();
70
71 void reset();
72
73 CTimer& operator-=(double);
74
75 operator double() const;
76
77 bool isOneShot() const;
78 CEventQueueTimer*
79 getTimer() const;
80 void* getTarget() const;
81 void fillEvent(CTimerEvent&) const;
82
83 bool operator<(const CTimer&) const;
84
85 private:
86 CEventQueueTimer* m_timer;
87 double m_timeout;
88 void* m_target;
89 bool m_oneShot;
90 double m_time;
91 };
92 typedef std::set<CEventQueueTimer*> CTimers;
93 typedef CPriorityQueue<CTimer> CTimerQueue;
94 typedef std::map<UInt32, CEvent> CEventTable;
95 typedef std::vector<UInt32> CEventIDList;
96 typedef std::map<CEvent::Type, const char*> CTypeMap;
97 typedef std::map<CEvent::Type, IEventJob*> CTypeHandlerTable;
98 typedef std::map<void*, CTypeHandlerTable> CHandlerTable;
99
100 CArchMutex m_mutex;
101
102 // registered events
103 CEvent::Type m_nextType;
104 CTypeMap m_typeMap;
105
106 // buffer of events
107 IEventQueueBuffer* m_buffer;
108
109 // saved events
110 CEventTable m_events;
111 CEventIDList m_oldEventIDs;
112
113 // timers
114 CStopwatch m_time;
115 CTimers m_timers;
116 CTimerQueue m_timerQueue;
117 CTimerEvent m_timerEvent;
118
119 // event handlers
120 CHandlerTable m_handlers;
121};
122
123#endif
Note: See TracBrowser for help on using the repository browser.