epm/User/lib/inc/sqqueue.h

61 lines
2.0 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/***
* @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
/**
* @}
*/