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 14class BMessageQueue { 15public: 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 35private: 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 48private: 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