AT-Command/samples/none_os/framework/qlink.h

101 lines
2.7 KiB
C
Raw Permalink Normal View History

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