xref: /haiku/headers/os/app/MessageQueue.h (revision 2f470aec1c92ce6917b8a903e343795dc77af41f)
1 /*
2  * Copyright 2001-2007, 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 #endif	// _MESSAGE_QUEUE_H
58