214 lines
4.6 KiB
C
Raw Permalink Normal View History

2025-04-26 16:03:23 +08:00
/**
******************************************************************************
* @file
* @author
* @version
* @date
* @brief
:1.. 2.,"隊列頭指
()"滿".
seq為空循環隊列的判定條件為: seq.front==seq.rear
seq為滿循環隊列的判定條件為: (seq.rear+1)%MAXSIZE==seq.front
: ,buf至少2個.
* @function List:
******************************************************************************
* @attention
*
*
* <h2><center>&copy; COPYRIGHT 2021 </center></h2>
******************************************************************************
* @History:
* @Author:
* @Data:
* @Version:
*/
#ifndef _QUEUE_ENTITY_H_
#define _QUEUE_ENTITY_H_
/*lint -e749 */ /* 枚舉 not referenced*/
/*lint -e750 */ /* 宏 not referenced*/
/*lint -e751 */ /* 變量 not referenced*/
/*lint -e752 */ /* 函數 not referenced*/
/*lint -e753 */ /* 枚舉 not referenced*/
/*lint -e754 */ /* 結構體成員 not referenced*/
#include "common_types.h"
#include "queue_entity_cfg.h"
typedef enum
{
QUEUE_ERRO = 0u,
QUEUE_OK = !QUEUE_ERRO
}QUEUE_OPERATE_FLAG_E;
typedef enum
{
QUEUE_FALSE = 0u,
QUEUE_TRUE = !QUEUE_FALSE
}QUEUE_RIGHT_FLAG_E;
typedef enum
{
QUEUE_MINUS = 0u, /* 元素減少發送次數 */
QUEUE_DEL = !QUEUE_MINUS /* 元素直接刪除 */
}QUEUE_DEL_FLAG_E;
typedef u8 sequential_queue_elem;
typedef struct
{
u16 length; /*隊列長度*/
sequential_queue_elem *base; /*數據*/
u8 unit_sizes; /*元素的字節長度*/
u16 front; /*頭指針*/
u16 rear; /*尾指針*/
}sequential_queue_s;
/**
* @brief
* @param input: seq : pdata ; length隊列長度,unit_sizes ;
* @param output:
* @return none:
* @calls
* @calls by
* @others
*/
void queue_init(sequential_queue_s *seq, sequential_queue_elem *pdata, u8 length , u8 unit_sizes);
/**
* @brief
* @param input: seq :
* @param output:
* @return none:
* @calls
* @calls by
* @others
*/
void queue_clear(sequential_queue_s *seq);
/**
* @brief ;
* @param input: seq :
* @param output:
* @return QUEUE_RIGHT_FLAG_E: seq為空隊列ture false
* @calls
* @calls by
* @others
*/
QUEUE_RIGHT_FLAG_E queue_get_empty(sequential_queue_s seq);
QUEUE_OPERATE_FLAG_E queue_get_element(sequential_queue_s seq,u8 i ,sequential_queue_elem *element);
/**
* @brief ;
* @param input: seq :
* @param output:
* @return
* @calls
* @calls by
* @others
*/
u16 queue_get_length(sequential_queue_s seq);
/**
* @brief e返回seq的隊頭元素
* @param input: seq :
* @param output: element: ;
* @return
* @calls
* @calls by
* @others
*/
QUEUE_OPERATE_FLAG_E queue_get_head(sequential_queue_s *seq,sequential_queue_elem *element);
/**
* @brief 滿e為seq新的隊尾元素
* @param input: seq :
* @param output: element: ;
* @return
* @calls
* @calls by
* @others
*/
QUEUE_OPERATE_FLAG_E queue_add_element(sequential_queue_s *seq,const sequential_queue_elem *element);
/**
* @brief 滿e為seq新的隊尾元素
* @param input: seq :
* @param output: element: ;
* @return
* @calls
* @calls by
* @others
*/
QUEUE_OPERATE_FLAG_E queue_del_element(sequential_queue_s *seq,sequential_queue_elem *element);
#if 1
/**
* @brief Q中的某一個元素
* @param input: seq : i表示元素地址; fdo
* @param output: element: ;
* @return
* @calls
* @calls by
* @others
*/
QUEUE_OPERATE_FLAG_E queue_del_one_element_by_flag(sequential_queue_s *seq,u16 i,sequential_queue_elem *element,QUEUE_DEL_FLAG_E fdo);
QUEUE_OPERATE_FLAG_E queue_del_one_element(sequential_queue_s *seq,u16 i,sequential_queue_elem *element);
#endif
#endif