⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rd_adt_queue.h

📁 LCD1602键盘显示模块实例
💻 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 + -