forked from gary/ems
2
0
Fork 0
sun_ems/ems_c/bsp/bsp_msgQueue.c

84 lines
2.7 KiB
C
Raw Permalink Normal View History

2025-05-13 17:49:49 +08:00
#include "bsp_msgQueue.h"
/*****************************************************************************
* @brief NULL
* @param[in] Queue *queue
* @return void
*****************************************************************************/
void initQueue(Queue *queue)
{
queue->head = NULL;
queue->tail = NULL;
// 无需在此设置 topic因为每个节点有各自的 topic。
}
/*****************************************************************************
* @brief
* @param[in] Queue *queue
* @return int 10
*****************************************************************************/
int isQueueEmpty(Queue *queue)
{
return queue->head == NULL;
}
/*****************************************************************************
* @brief
* @param[in] Queue *queue
* QueueNode *queueNode
* @return void
*****************************************************************************/
void enqueue(Queue *queue, QueueNode *queueNode)
{
// 确保传入的节点和队列都不为空
if (queueNode == NULL)
{
fprintf(stderr, "Cannot enqueue a null node.\n");
return;
}
// 新节点的下一个指针应为空,以断开其与任何之前队列的连接
queueNode->next = NULL;
// 如果队列为空,则新节点为队列的头和尾
if (queue->tail == NULL)
{
queue->head = queueNode;
queue->tail = queueNode;
}
else
{
// 将新节点链接到当前尾节点的下一个,并更新队列的尾指针
queue->tail->next = queueNode;
queue->tail = queueNode;
}
}
/*****************************************************************************
* @brief
* @param[in] Queue *queue
* @return char*
* NULL
*****************************************************************************/
char *dequeue(Queue *queue)
{
if (isQueueEmpty(queue))
{
fprintf(stderr, "Queue is empty\n");
return NULL;
}
QueueNode *node = queue->head;
char *value = node->data;
queue->head = node->next;
if (queue->head == NULL)
{
queue->tail = NULL;
}
if (node->topic != NULL)
{
printf("Node Topic: %s\n", node->topic);
free(node->topic);
}
free(node);
return value;
}