component/inc/sqqueue.h

53 lines
2.0 KiB
C

/**
* @file sqqueue.h
* @author xxx
* @date 2023-06-25 13:07:02
* @brief 提供循环队列功能
* @copyright Copyright (c) 2023 by xxx, All Rights Reserved.
*/
#ifndef __SQQUEUE_H
#define __SQQUEUE_H
#include "data_type_def.h"
typedef struct _sqqueue_t
{
uint8_t *base; // 队列存储元素的首地址
uint8_t entry_size; // 队列元素的宽度
uint16_t sqq_len; // 队列总长
uint16_t front; // 队列头下标
uint16_t rear; // 队列尾下标
} sqqueue_t;
/**
* 通用循环队列伪类
* 该队列有九个操作,分别为单元素入队列、多元素入队列、出队列,
* 单元素撤销入队列(队尾删除)、取队列长度、判空、清空队列、遍历和删除指定位置
*/
typedef struct _sqqueue_ctrl_t
{
sqqueue_t sqq;
BOOL(*enter)
(struct _sqqueue_ctrl_t *const p_this, const void *const e); // 单元素入队列
BOOL(*string_enter)
(struct _sqqueue_ctrl_t *const p_this, const void *const string, uint16_t len); // 多元素入队列
void *(*del)(struct _sqqueue_ctrl_t *const p_this); // 出队列
void *(*revoke)(struct _sqqueue_ctrl_t *const p_this); // 撤销入队列
uint16_t (*get_len)(const struct _sqqueue_ctrl_t *const p_this); // 取队列长度
BOOL(*full)
(const struct _sqqueue_ctrl_t *const p_this); // 判满
void (*clear_sqq)(struct _sqqueue_ctrl_t *const p_this); // 清空队列
void (*traverse)(struct _sqqueue_ctrl_t *const p_this, void (*vi)(const void *e)); // 遍历
void (*remove)(struct _sqqueue_ctrl_t *const p_this, uint16_t location); // 删除指定位置
} sqqueue_ctrl_t;
BOOL sqqueue_ctrl_init(sqqueue_ctrl_t *const p_this,
uint8_t entry_size,
uint16_t sqq_len); ///< 初始化
void sqqueue_ctrl_dinit(sqqueue_ctrl_t *const p_this); ///< 销毁
#endif
/**
* @}
*/