1/***********************************************************************
2 * AUTHOR: Marcus Overhagen
3 *   FILE: TimedEventQueue.cpp
4 *  DESCR: used by BMediaEventLooper
5 ***********************************************************************/
6
7#include <TimedEventQueue.h>
8#include <string.h>
9#include "TimedEventQueuePrivate.h"
10#include "MediaDebug.h"
11
12/*************************************************************
13 * struct media_timed_event
14 *************************************************************/
15
16media_timed_event::media_timed_event()
17{
18	CALLED();
19	memset(this, 0, sizeof(*this));
20}
21
22
23media_timed_event::media_timed_event(bigtime_t inTime,
24									 int32 inType)
25{
26	CALLED();
27	memset(this, 0, sizeof(*this));
28	event_time = inTime;
29	type = inType;
30}
31
32
33media_timed_event::media_timed_event(bigtime_t inTime,
34									 int32 inType,
35									 void *inPointer,
36									 uint32 inCleanup)
37{
38	CALLED();
39	memset(this, 0, sizeof(*this));
40	event_time = inTime;
41	type = inType;
42	pointer = inPointer;
43	cleanup = inCleanup;
44}
45
46
47media_timed_event::media_timed_event(bigtime_t inTime,
48									 int32 inType,
49									 void *inPointer,
50									 uint32 inCleanup,
51									 int32 inData,
52									 int64 inBigdata,
53									 const char *inUserData,
54									 size_t dataSize)
55{
56	CALLED();
57	memset(this, 0, sizeof(*this));
58	event_time = inTime;
59	type = inType;
60	pointer = inPointer;
61	cleanup = inCleanup;
62	data = inData;
63	bigdata = inBigdata;
64	memcpy(user_data,inUserData,min_c(sizeof(media_timed_event::user_data),dataSize));
65}
66
67
68media_timed_event::media_timed_event(const media_timed_event &clone)
69{
70	CALLED();
71	*this = clone;
72}
73
74
75void
76media_timed_event::operator=(const media_timed_event &clone)
77{
78	CALLED();
79	memcpy(this, &clone, sizeof(*this));
80}
81
82
83media_timed_event::~media_timed_event()
84{
85	CALLED();
86}
87
88/*************************************************************
89 * global operators
90 *************************************************************/
91
92bool operator==(const media_timed_event & a, const media_timed_event & b)
93{
94	CALLED();
95	return (0 == memcmp(&a,&b,sizeof(media_timed_event)));
96}
97
98bool operator!=(const media_timed_event & a, const media_timed_event & b)
99{
100	CALLED();
101	return (0 != memcmp(&a,&b,sizeof(media_timed_event)));
102}
103
104bool operator<(const media_timed_event & a, const media_timed_event & b)
105{
106	CALLED();
107	return a.event_time < b.event_time;
108}
109
110bool operator>(const media_timed_event & a, const media_timed_event &b)
111{
112	CALLED();
113	return a.event_time > b.event_time;
114}
115
116
117/*************************************************************
118 * public BTimedEventQueue
119 *************************************************************/
120
121
122void *
123BTimedEventQueue::operator new(size_t s)
124{
125	CALLED();
126	return ::operator new(s);
127}
128
129
130void
131BTimedEventQueue::operator delete(void *p, size_t s)
132{
133	CALLED();
134	return ::operator delete(p);
135}
136
137
138BTimedEventQueue::BTimedEventQueue() :
139	fImp(new _event_queue_imp)
140{
141	CALLED();
142}
143
144
145BTimedEventQueue::~BTimedEventQueue()
146{
147	CALLED();
148	delete fImp;
149}
150
151
152status_t
153BTimedEventQueue::AddEvent(const media_timed_event &event)
154{
155	CALLED();
156	return fImp->AddEvent(event);
157}
158
159
160status_t
161BTimedEventQueue::RemoveEvent(const media_timed_event *event)
162{
163	CALLED();
164	return fImp->RemoveEvent(event);
165}
166
167
168status_t
169BTimedEventQueue::RemoveFirstEvent(media_timed_event *outEvent)
170{
171	CALLED();
172	return fImp->RemoveFirstEvent(outEvent);
173}
174
175
176bool
177BTimedEventQueue::HasEvents() const
178{
179	CALLED();
180	return fImp->HasEvents();
181}
182
183
184int32
185BTimedEventQueue::EventCount() const
186{
187	CALLED();
188	return fImp->EventCount();
189}
190
191
192const media_timed_event *
193BTimedEventQueue::FirstEvent() const
194{
195	CALLED();
196	return fImp->FirstEvent();
197}
198
199
200bigtime_t
201BTimedEventQueue::FirstEventTime() const
202{
203	CALLED();
204	return fImp->FirstEventTime();
205}
206
207
208const media_timed_event *
209BTimedEventQueue::LastEvent() const
210{
211	CALLED();
212	return fImp->LastEvent();
213}
214
215
216bigtime_t
217BTimedEventQueue::LastEventTime() const
218{
219	CALLED();
220	return fImp->LastEventTime();
221}
222
223
224const media_timed_event *
225BTimedEventQueue::FindFirstMatch(bigtime_t eventTime,
226								 time_direction direction,
227								 bool inclusive,
228								 int32 eventType)
229{
230	CALLED();
231	return fImp->FindFirstMatch(eventTime, direction, inclusive, eventType);
232}
233
234
235status_t
236BTimedEventQueue::DoForEach(for_each_hook hook,
237							void *context,
238							bigtime_t eventTime,
239							time_direction direction,
240							bool inclusive,
241							int32 eventType)
242{
243	CALLED();
244	return fImp->DoForEach(hook, context, eventTime, direction, inclusive, eventType);
245}
246
247
248void
249BTimedEventQueue::SetCleanupHook(cleanup_hook hook,
250								 void *context)
251{
252	CALLED();
253	fImp->SetCleanupHook(hook, context);
254}
255
256
257status_t
258BTimedEventQueue::FlushEvents(bigtime_t eventTime,
259							  time_direction direction,
260							  bool inclusive,
261							  int32 eventType)
262{
263	CALLED();
264	return fImp->FlushEvents(eventTime, direction, inclusive, eventType);
265}
266
267/*************************************************************
268 * private BTimedEventQueue
269 *************************************************************/
270
271/*
272// unimplemented
273BTimedEventQueue::BTimedEventQueue(const BTimedEventQueue &other)
274BTimedEventQueue &BTimedEventQueue::operator=(const BTimedEventQueue &other)
275*/
276
277status_t BTimedEventQueue::_Reserved_BTimedEventQueue_0(void *, ...) { return B_ERROR; }
278status_t BTimedEventQueue::_Reserved_BTimedEventQueue_1(void *, ...) { return B_ERROR; }
279status_t BTimedEventQueue::_Reserved_BTimedEventQueue_2(void *, ...) { return B_ERROR; }
280status_t BTimedEventQueue::_Reserved_BTimedEventQueue_3(void *, ...) { return B_ERROR; }
281status_t BTimedEventQueue::_Reserved_BTimedEventQueue_4(void *, ...) { return B_ERROR; }
282status_t BTimedEventQueue::_Reserved_BTimedEventQueue_5(void *, ...) { return B_ERROR; }
283status_t BTimedEventQueue::_Reserved_BTimedEventQueue_6(void *, ...) { return B_ERROR; }
284status_t BTimedEventQueue::_Reserved_BTimedEventQueue_7(void *, ...) { return B_ERROR; }
285status_t BTimedEventQueue::_Reserved_BTimedEventQueue_8(void *, ...) { return B_ERROR; }
286status_t BTimedEventQueue::_Reserved_BTimedEventQueue_9(void *, ...) { return B_ERROR; }
287status_t BTimedEventQueue::_Reserved_BTimedEventQueue_10(void *, ...) { return B_ERROR; }
288status_t BTimedEventQueue::_Reserved_BTimedEventQueue_11(void *, ...) { return B_ERROR; }
289status_t BTimedEventQueue::_Reserved_BTimedEventQueue_12(void *, ...) { return B_ERROR; }
290status_t BTimedEventQueue::_Reserved_BTimedEventQueue_13(void *, ...) { return B_ERROR; }
291status_t BTimedEventQueue::_Reserved_BTimedEventQueue_14(void *, ...) { return B_ERROR; }
292status_t BTimedEventQueue::_Reserved_BTimedEventQueue_15(void *, ...) { return B_ERROR; }
293status_t BTimedEventQueue::_Reserved_BTimedEventQueue_16(void *, ...) { return B_ERROR; }
294status_t BTimedEventQueue::_Reserved_BTimedEventQueue_17(void *, ...) { return B_ERROR; }
295status_t BTimedEventQueue::_Reserved_BTimedEventQueue_18(void *, ...) { return B_ERROR; }
296status_t BTimedEventQueue::_Reserved_BTimedEventQueue_19(void *, ...) { return B_ERROR; }
297status_t BTimedEventQueue::_Reserved_BTimedEventQueue_20(void *, ...) { return B_ERROR; }
298status_t BTimedEventQueue::_Reserved_BTimedEventQueue_21(void *, ...) { return B_ERROR; }
299status_t BTimedEventQueue::_Reserved_BTimedEventQueue_22(void *, ...) { return B_ERROR; }
300status_t BTimedEventQueue::_Reserved_BTimedEventQueue_23(void *, ...) { return B_ERROR; }
301