xref: /haiku/headers/os/app/MessageQueue.h (revision cbe0a0c436162d78cc3f92a305b64918c839d079)
1 /*
2  * Copyright 2001-2014 Haiku, Inc. All rights reserved.
3  * Distributed under the terms of the MIT License.
4  */
5 #ifndef _MESSAGE_QUEUE_H
6 #define _MESSAGE_QUEUE_H
7 
8 
9 #include <Locker.h>
10 #include <Message.h>
11 	// For convenience
12 
13 
14 class BMessageQueue {
15 public:
16 								BMessageQueue();
17 	virtual						~BMessageQueue();
18 
19 			void				AddMessage(BMessage* message);
20 			void				RemoveMessage(BMessage* message);
21 
22 			int32				CountMessages() const;
23 			bool				IsEmpty() const;
24 
25 			BMessage*			FindMessage(int32 index) const;
26 			BMessage*			FindMessage(uint32 what, int32 index = 0) const;
27 
28 			bool				Lock();
29 			void				Unlock();
30 			bool				IsLocked() const;
31 
32 			BMessage*			NextMessage();
33 			bool				IsNextMessage(const BMessage* message) const;
34 
35 private:
36 			// Reserved space in the vtable for future changes to BMessageQueue
37 	virtual	void				_ReservedMessageQueue1();
38 	virtual	void				_ReservedMessageQueue2();
39 	virtual	void				_ReservedMessageQueue3();
40 
41 								BMessageQueue(const BMessageQueue &);
42 			BMessageQueue&		operator=(const BMessageQueue &);
43 
44 			bool				IsLocked();
45 				// this needs to be exported for R5 compatibility and should
46 				// be dropped as soon as possible
47 
48 private:
49 			BMessage*			fHead;
50 			BMessage*			fTail;
51 			int32				fMessageCount;
52 	mutable	BLocker				fLock;
53 
54 			uint32				_reserved[3];
55 };
56 
57 
58 #endif	// _MESSAGE_QUEUE_H
59