📄 rd_adt_queue.h
字号:
#ifndef _USE_ADT_QUEUE_H_
#define _USE_ADT_QUEUE_H_
/***********************************************************
* 声明库说明:抽象数据类型(ADT)队列声明库 *
* 版本: v1.01 *
* 作者: 王卓然 *
* 创建日期: 2007年3月23日 *
* -------------------------------------------------------- *
* [支 持 库] *
* 支持库名称: *
* 需要版本: *
* 支持库说明: *
* -------------------------------------------------------- *
* [版本更新] *
* 修改: 王卓然 *
* 修改日期: 2007年4月17日 *
* 版本: v1.01 *
* -------------------------------------------------------- *
* [版本历史] *
* v1.00 该版本提供了基本的抽象数据类型队列的结构定 *
* 义,以及默认的环形队列处理函数。 *
* v1.01 增加了队列空判断函数,和队列首数据预览函数 *
* -------------------------------------------------------- *
* [使用说明] *
***********************************************************/
/********************
* 头 文 件 配 置 区 *
********************/
/********************
* 系 统 宏 定 义 *
********************/
/*------------------*
* 常 数 宏 定 义 *
*------------------*/
/*------------------*
* 动 作 宏 定 义 *
*------------------*/
# define ADT_QUEUE_DEFAULT_ADD_TO_BUFFER_FUNCTION ADT_Queue_Add_To_Buffer
# define ADT_QUEUE_DEFAULT_GET_FROM_BUFFER_FUNCTION ADT_Queue_Get_From_Buffer
# define ADT_QUEUE_DEFAULT_CHECK_EMPTY_FUNCTION ADT_Queue_Check_Empty
# define ADT_QUEUE_DEFAULT_PEEK_FROM_BUFFER_FUNCTION ADT_Queue_Peek_From_Buffer
# define START_DEFINE_ADT_QUEUE(Name,Size) ADT_QUEUE ADTQ_##Name;\
uint8 ADTQ_##Name##_Buffer[(Size)];\
void ADT_Queue_##Name##_INIT(void)\
{\
ADT_QUEUE *pQueue = &(ADTQ_##Name);\
pQueue->pBuffer = ADTQ_##Name##_Buffer;\
pQueue->nSize = (Size);\
pQueue->nHead = 0;\
pQueue->nTail = 0;\
pQueue->nCount = 0;\
pQueue->fnAddToBuffer = ADT_QUEUE_DEFAULT_ADD_TO_BUFFER_FUNCTION;\
pQueue->fnGetFromBuffer = ADT_QUEUE_DEFAULT_GET_FROM_BUFFER_FUNCTION;\
pQueue->fnCheckEmpty = ADT_QUEUE_DEFAULT_CHECK_EMPTY_FUNCTION;\
pQueue->fnPeekFromBuffer = ADT_QUEUE_DEFAULT_PEEK_FROM_BUFFER_FUNCTION;
# define SET_ADT_QUEUE_ADD_FUNCTION(Func) pQueue->fnAddToBuffer = &(Func);
# define SET_ADT_QUEUE_GET_FUNCTION(Func) pQueue->fnGetFromBuffer = &(Func);
# define SET_ADT_QUEUE_CHECK_EMPTY_FUNCITON(Func) pQueue->fnCheckEmpty = &(Func);
# define SET_ADT_QUEUE_PEEK_FUNCTION(Func) pQueue->fnPeekFromBuffer = &(Func);
# define END_DEFINE_ADT_QUEUE }
# define ADT_QUEUE(Name) ADTQ_##Name
# define INIT_ADT_QUEUE(Name) ADT_Queue_##Name##_INIT();
# define SET_ADT_QUEUE(Queue,Buffer,Size,FuncA,FuncB,FuncC,FuncD) {\
(Queue).pBuffer = (Buffer);\
(Queue).nSize = (Size);\
(Queue).nHead = 0;\
(Queue).nTail = 0;\
(Queue).nCount = 0;\
(Queue).fnAddToBuffer = &(FuncA);\
(Queue).fnGetFromBuffer = &(FuncB);\
(Queue).fnCheckEmpty = &(FuncC);\
(Queue).fnPeekFromBuffer = &(FuncD);\
}
# define NEW_ADT_QUEUE(Queue,Size,FuncA,FuncB,FuncC,FuncD) {\
SET_ADT_QUEUE((Queue),NULL,Size,(FuncA),(FuncB),(FuncC),(FuncD))\
Queue.pBuffer = (uint8 *)malloc((Size));\
Queue.nSize = (Size);\
}
# define ADT_QUEUE_LET_EMPTY(Queue) {\
(Queue).nHead = 0;\
(Queue).nTail = 0;\
(Queue).nCount = 0;\
}
# define ADT_ADD_DATA_TO_QUEUE(Queue,Data) (*((Queue).fnAddToBuffer))(&(Queue),(Data))
# define ADT_GET_DATA_FROM_QUEUE(Queue,Var) (*((Queue).fnGetFromBuffer))(&(Queue),&(Var))
# define ADT_CHECK_QUEUE_EMPTY(Queue) (*((Queue).fnCheckEmpty))(&(Queue))
# define ADT_PEEK_DATA_FROM_QUEUE(Queue,Var) (*((Queue).fnPeekFromBuffer))(&(Queue),&(Var))
/********************
* 用户变量类型定义 *
********************/
typedef struct AbstructDataTypeQueue ADT_QUEUE;
typedef BOOL (*ADD_BUFFER)(ADT_QUEUE *pQueue,uint8 cData);
typedef BOOL (*GET_BUFFER)(ADT_QUEUE *pQueue,uint8 *pData);
typedef BOOL (*CHECK_EMPTY)(ADT_QUEUE *pQueue);
typedef BOOL (*PEEK_BUFFER)(ADT_QUEUE *pQueue,uint8 *pData);
/********************
* 结构体定义区 *
********************/
struct AbstructDataTypeQueue
{
uint8 *pBuffer;
uint nSize;
uint nHead;
uint nTail;
uint nCount;
ADD_BUFFER fnAddToBuffer;
GET_BUFFER fnGetFromBuffer;
CHECK_EMPTY fnCheckEmpty;
PEEK_BUFFER fnPeekFromBuffer;
};
/********************
* 函 数 引 用 区 *
********************/
extern BOOL ADT_Queue_Add_To_Buffer(ADT_QUEUE *pQueue,uint8 cData);
extern BOOL ADT_Queue_Get_From_Buffer(ADT_QUEUE *pQueue,uint8 *pData);
extern BOOL ADT_Queue_Check_Empty(ADT_QUEUE *pQueue);
extern BOOL ADT_Queue_Peek_From_Buffer(ADT_QUEUE *pQueue,uint8 *pData);
/********************
* 全局变量引用区 *
********************/
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -