2020-07-11 10:18:03 +08:00

98 lines
2.7 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*******************************************************************************
* @brief <20><>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>(queue link)<29><><EFBFBD><EFBFBD>
*
* Change Logs
* Date Author Notes
* 2016-06-24 Morro <20><>ʼ<EFBFBD><CABC>
* 2018-03-17 Morro <20><><EFBFBD>Ӷ<EFBFBD><D3B6><EFBFBD>Ԫ<EFBFBD><D4AA>ͳ<EFBFBD>ƹ<EFBFBD><C6B9><EFBFBD>
*******************************************************************************/
#ifndef _QLINK_H_
#define _QLINK_H_
#ifdef __cplusplus
extern "C" {
#endif
#include <stddef.h>
/*<2A><>ʽ<EFBFBD><CABD><EFBFBD>н<EFBFBD><D0BD><EFBFBD> ---------------------------------------------------------------*/
struct qlink_node {
struct qlink_node *next;
};
/*<2A><>ʽ<EFBFBD><CABD><EFBFBD>й<EFBFBD><D0B9><EFBFBD><EFBFBD><EFBFBD> -------------------------------------------------------------*/
struct qlink {
unsigned int count;
struct qlink_node *front, *rear;
};
/*******************************************************************************
* @brief <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>
* @param[in] q - <20><><EFBFBD>й<EFBFBD><D0B9><EFBFBD><EFBFBD><EFBFBD>
* @return none
******************************************************************************/
static inline void qlink_init(struct qlink *q)
{
q->front = q->rear= NULL;
q->count = 0;
}
/*******************************************************************************
* @brief <20><><EFBFBD>Ӳ<EFBFBD><D3B2><EFBFBD>
* @param[in] q - <20><><EFBFBD>й<EFBFBD><D0B9><EFBFBD><EFBFBD><EFBFBD>
* @return nond
******************************************************************************/
static inline void qlink_put(struct qlink *q, struct qlink_node *n)
{
if (q->count == 0)
q->front = n;
else
q->rear->next = n;
q->rear = n;
n->next = NULL;
q->count++;
}
/*******************************************************************************
* @brief Ԥ<><D4A4><EFBFBD>Ӳ<EFBFBD><D3B2><EFBFBD>(<28><>ȡ<EFBFBD><C8A1><EFBFBD>׽<EFBFBD><D7BD><EFBFBD>)
* @param[in] q - <20><><EFBFBD>й<EFBFBD><D0B9><EFBFBD><EFBFBD><EFBFBD>
* @return nond
******************************************************************************/
static inline struct qlink_node *qlink_peek(struct qlink *q)
{
return q->front;
}
/*******************************************************************************
* @brief <20><><EFBFBD>Ӳ<EFBFBD><D3B2><EFBFBD>
* @param[in] q - <20><><EFBFBD>й<EFBFBD><D0B9><EFBFBD><EFBFBD><EFBFBD>
* @return nond
******************************************************************************/
static inline struct qlink_node *qlink_get(struct qlink *q)
{
struct qlink_node *n;
if (q->count == 0)
return NULL;
n = q->front;
q->front = q->front->next;
q->count--;
return n;
}
/*******************************************************************************
* @brief <20><><EFBFBD><EFBFBD>Ԫ<EFBFBD>ظ<EFBFBD><D8B8><EFBFBD>
* @param[in] q - <20><><EFBFBD>й<EFBFBD><D0B9><EFBFBD><EFBFBD><EFBFBD>
* @return nond
******************************************************************************/
static inline int qlink_count(struct qlink *q)
{
return q->count;
}
#ifdef __cplusplus
}
#endif
#endif