You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
64 lines
1.2 KiB
64 lines
1.2 KiB
6 years ago
|
#include "wsfs/message_queue.h"
|
||
|
#include "wsfs/message.h"
|
||
|
|
||
|
void wsfs_message_queue_init(
|
||
|
struct wsfs_message_queue * queue)
|
||
|
{
|
||
|
queue->first = NULL;
|
||
|
queue->last = NULL;
|
||
|
|
||
|
}
|
||
|
|
||
|
void wsfs_message_queue_cleanup(
|
||
|
struct wsfs_message_queue * queue)
|
||
|
{
|
||
|
struct wsfs_message * message = queue->first;
|
||
|
while (NULL != message)
|
||
|
{
|
||
|
struct wsfs_message * next = message->next;
|
||
|
wsfs_message_dispose(message);
|
||
|
message = next;
|
||
|
}
|
||
|
wsfs_message_queue_init(queue);
|
||
|
}
|
||
|
|
||
|
bool wsfs_message_queue_empty(
|
||
|
struct wsfs_message_queue * queue)
|
||
|
{
|
||
|
return (NULL == queue->first);
|
||
|
}
|
||
|
|
||
|
void wsfs_message_queue_push(
|
||
|
struct wsfs_message_queue * queue,
|
||
|
struct wsfs_message * message)
|
||
|
{
|
||
|
message->next = NULL;
|
||
|
|
||
|
if (NULL != queue->last)
|
||
|
{
|
||
|
queue->last->next = message;
|
||
|
queue->last = message;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
queue->first = message;
|
||
|
queue->last = message;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
struct wsfs_message * wsfs_message_queue_pop(
|
||
|
struct wsfs_message_queue * queue)
|
||
|
{
|
||
|
struct wsfs_message * const result = queue->first;
|
||
|
if (NULL != result)
|
||
|
{
|
||
|
queue->first = queue->first->next;
|
||
|
if (NULL == queue->first)
|
||
|
{
|
||
|
queue->last = NULL;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return result;
|
||
|
}
|