Change API in anticipation of conversion to os-specific implementation.

This commit is contained in:
W. Eric Norum
2003-02-26 19:33:10 +00:00
parent 9cf668711b
commit f64cf11377
2 changed files with 42 additions and 47 deletions
+30 -38
View File
@@ -78,8 +78,8 @@ epicsMessageQueue::send(void *message, unsigned int size)
return true;
}
bool
epicsMessageQueue::receive(void *message, unsigned int *size, bool withTimeout, double timeout)
int
epicsMessageQueue::receive(void *message, bool withTimeout, double timeout)
{
char *myOutPtr;
unsigned long l;
@@ -90,7 +90,7 @@ epicsMessageQueue::receive(void *message, unsigned int *size, bool withTimeout,
queueMutex.unlock();
if (withTimeout) {
if (queueEvent.wait(timeout) == false)
return false;
return -1;
}
else {
queueEvent.wait();
@@ -98,7 +98,7 @@ epicsMessageQueue::receive(void *message, unsigned int *size, bool withTimeout,
queueMutex.lock();
myOutPtr = (char *)outPtr;
}
*size = l = *(unsigned long *)myOutPtr;
l = *(unsigned long *)myOutPtr;
memcpy(message, (unsigned long *)myOutPtr + 1, l);
if (myOutPtr == lastMessageSlot)
myOutPtr = firstMessageSlot;
@@ -107,36 +107,36 @@ epicsMessageQueue::receive(void *message, unsigned int *size, bool withTimeout,
this->outPtr = myOutPtr;
full = false;
queueMutex.unlock();
return true;
return l;
}
void
epicsMessageQueue::receive(void *message, unsigned int *size)
int
epicsMessageQueue::receive(void *message )
{
this->receive(message, size, false, 0.0);
return this->receive(message, false, 0.0);
}
bool
epicsMessageQueue::receive(void *message, unsigned int *size, double timeout)
int
epicsMessageQueue::receive(void *message, double timeout)
{
return this->receive(message, size, true, timeout);
return this->receive(message, true, timeout);
}
bool
epicsMessageQueue::isFull() const
unsigned int
epicsMessageQueue::pending() const
{
return full;
}
char *myInPtr, *myOutPtr;
int nmsg;
bool
epicsMessageQueue::isEmpty()
{
bool empty;
queueMutex.lock();
empty = ((outPtr == inPtr) && !full);
queueMutex.unlock();
return empty;
myInPtr = (char *)inPtr;
myOutPtr = (char *)outPtr;
if (myInPtr >= myOutPtr)
nmsg = (myInPtr - myOutPtr) / slotSize;
else
nmsg = capacity - (myOutPtr - myInPtr) / slotSize;
if (full)
nmsg = capacity;
return nmsg;
}
void
@@ -188,33 +188,25 @@ epicsShareFunc int epicsShareAPI epicsMessageQueueSend(
return ((epicsMessageQueue *)id)->send(message, messageSize);
}
epicsShareFunc void epicsShareAPI epicsMessageQueueReceive(
epicsShareFunc int epicsShareAPI epicsMessageQueueReceive(
epicsMessageQueueId id,
void *message,
unsigned int *messageSize)
void *message)
{
((epicsMessageQueue *)id)->receive(message, messageSize);
return ((epicsMessageQueue *)id)->receive(message);
}
epicsShareFunc int epicsShareAPI epicsMessageQueueReceiveWithTimeout(
epicsMessageQueueId id,
void *message,
unsigned int *messageSize,
double timeout)
{
return ((epicsMessageQueue *)id)->receive(message, messageSize, timeout);
return ((epicsMessageQueue *)id)->receive(message, timeout);
}
epicsShareFunc int epicsShareAPI epicsMessageQueueIsFull(
epicsShareFunc int epicsShareAPI epicsMessageQueuePending(
epicsMessageQueueId id)
{
return ((epicsMessageQueue *)id)->isFull();
}
epicsShareFunc int epicsShareAPI epicsMessageQueueIsEmpty(
epicsMessageQueueId id)
{
return ((epicsMessageQueue *)id)->isEmpty();
return ((epicsMessageQueue *)id)->pending();
}
epicsShareFunc void epicsShareAPI epicsMessageQueueShow(