2022-12-31 14:42:31 +00:00
|
|
|
|
/*******************************************************************************
|
|
|
|
|
* @brief <EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>(queue link)<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
*
|
|
|
|
|
* Copyright (c) 2017~2020, <morro_luo@163.com>
|
|
|
|
|
*
|
|
|
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
|
|
|
* Change Logs
|
|
|
|
|
* Date Author Notes
|
|
|
|
|
* 2016-06-24 Morro <EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>
|
|
|
|
|
* 2018-03-17 Morro <EFBFBD><EFBFBD><EFBFBD>Ӷ<EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD><EFBFBD>ͳ<EFBFBD>ƹ<EFBFBD><EFBFBD><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 <EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
* @param[in] q - <EFBFBD><EFBFBD><EFBFBD>й<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
* @return none
|
|
|
|
|
******************************************************************************/
|
|
|
|
|
static inline void qlink_init(struct qlink *q)
|
|
|
|
|
{
|
|
|
|
|
q->front = q->rear= NULL;
|
|
|
|
|
q->count = 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*******************************************************************************
|
|
|
|
|
* @brief <EFBFBD><EFBFBD><EFBFBD>Ӳ<EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
* @param[in] q - <EFBFBD><EFBFBD><EFBFBD>й<EFBFBD><EFBFBD><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 Ԥ<EFBFBD><EFBFBD><EFBFBD>Ӳ<EFBFBD><EFBFBD><EFBFBD>(<EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
|
|
|
|
* @param[in] q - <EFBFBD><EFBFBD><EFBFBD>й<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
* @return nond
|
|
|
|
|
******************************************************************************/
|
|
|
|
|
static inline struct qlink_node *qlink_peek(struct qlink *q)
|
|
|
|
|
{
|
|
|
|
|
return q->front;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*******************************************************************************
|
|
|
|
|
* @brief <EFBFBD><EFBFBD><EFBFBD>Ӳ<EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
* @param[in] q - <EFBFBD><EFBFBD><EFBFBD>й<EFBFBD><EFBFBD><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 <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD>ظ<EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
* @param[in] q - <EFBFBD><EFBFBD><EFBFBD>й<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
* @return nond
|
|
|
|
|
******************************************************************************/
|
|
|
|
|
static inline int qlink_count(struct qlink *q)
|
|
|
|
|
{
|
|
|
|
|
return q->count;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#endif
|