version 1.4, 2001/07/10 22:31:14
|
version 1.5, 2001/07/12 02:34:34
|
|
|
// | // |
//%///////////////////////////////////////////////////////////////////////////// | //%///////////////////////////////////////////////////////////////////////////// |
| |
|
#include <Pegasus/Common/HashTable.h> |
#include "MessageQueue.h" | #include "MessageQueue.h" |
| |
PEGASUS_USING_STD; | PEGASUS_USING_STD; |
| |
PEGASUS_NAMESPACE_BEGIN | PEGASUS_NAMESPACE_BEGIN |
| |
|
typedef HashTable<Uint32, MessageQueue*, EqualFunc<Uint32>, HashFunc<Uint32> > |
|
QueueTable; |
|
|
|
static QueueTable _queueTable(128); |
|
|
|
static Uint32 _GetNextQueueId() |
|
{ |
|
static Uint32 _queueId = 1; |
|
|
|
// Handle wrap-around! |
|
|
|
if (_queueId == 0) |
|
_queueId++; |
|
|
|
return _queueId++; |
|
} |
|
|
|
MessageQueue::MessageQueue() : _count(0), _front(0), _back(0) |
|
{ |
|
// ATTN-A: thread safety! |
|
|
|
while (!_queueTable.insert(_queueId = _GetNextQueueId(), this)) |
|
; |
|
} |
|
|
|
MessageQueue::~MessageQueue() |
|
{ |
|
// ATTN-A: thread safety! |
|
|
|
_queueTable.remove(_queueId); |
|
} |
|
|
void MessageQueue::enqueue(Message* message) | void MessageQueue::enqueue(Message* message) |
{ | { |
if (!message) | if (!message) |
|
|
return 0; | return 0; |
} | } |
| |
|
void MessageQueue::lock() |
|
{ |
|
|
|
} |
|
|
|
void MessageQueue::unlock() |
|
{ |
|
|
|
} |
|
|
|
MessageQueue* MessageQueue::lookup(Uint32 queueId) |
|
{ |
|
MessageQueue* queue = 0; |
|
|
|
if (_queueTable.lookup(queueId, queue)) |
|
return queue; |
|
|
|
// Not found! |
|
return 0; |
|
} |
|
|
PEGASUS_NAMESPACE_END | PEGASUS_NAMESPACE_END |