61 lines
2.0 KiB
C
61 lines
2.0 KiB
C
/***
|
||
* @Author: shenghao.xu
|
||
* @Date: 2023-04-04 08:39:32
|
||
* @LastEditors: shenghao.xu
|
||
* @LastEditTime: 2023-04-04 08:44:19
|
||
* @Description:提供循环队列功能
|
||
* @email:545403892@qq.com
|
||
* @Copyright (c) 2023 by shenghao.xu, All Rights Reserved.
|
||
*/
|
||
|
||
#ifndef __SQQUEUE_H
|
||
#define __SQQUEUE_H
|
||
#include <stdbool.h>
|
||
#include "data_type_def.h"
|
||
|
||
typedef struct _sqqueue_t
|
||
{
|
||
uint8_t *base; // 队列存储元素的首地址
|
||
uint8_t entry_size; // 队列元素的宽度
|
||
uint16_t sqq_len; // 队列总长,可用长度为sqq_len-1
|
||
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;
|
||
|
||
/**
|
||
* 初始化循环队列对象
|
||
*
|
||
* @param p_this: 指向用sqqueue_ctrl_t实例化的对象
|
||
* @param entry_size: 循环队列中元素的宽度
|
||
* @param sqq_len: 队列长度,其中可用长度为sqq_len-1,其中一个成员用来维护队列
|
||
*
|
||
* @return 初始化成功返回true,否者返回false
|
||
*/
|
||
bool sqqueue_ctrl_init(sqqueue_ctrl_t *const p_this,
|
||
uint8_t entry_size,
|
||
uint16_t sqq_len);
|
||
|
||
#endif
|
||
/**
|
||
* @}
|
||
*/
|