Files
Cnomicon/include/bytequeue.h
2021-01-22 10:16:20 -05:00

113 lines
3.2 KiB
C

/*****************************************************************************
* Copyright (C) 2008
* ProbeStar Telematics, LLC
* All Rights Reserved. Proprietary and Confidential.
*============================================================================
* BYTE Queue
*****************************************************************************/
/* prevent multiple inclusions */
#ifndef __EMBEDDED_BYTEQUEUE__
#define __EMBEDDED_BYTEQUEUE__
/*****************************************************************************
* includes
*****************************************************************************/
#include "embtypes.h"
/*****************************************************************************
* defines
*****************************************************************************/
/*****************************************************************************
* macros
*****************************************************************************/
#define _QueuePut(Q,D) \
{ \
*((Q).pbyBuf+((Q).byFront++)) = (D); \
(Q).byCount++; \
if ( (Q).byFront == (Q).bySize ) \
(Q).byFront = 0; \
}
#define _QueueUnput(Q) \
{ \
if ( (Q).byFront == 0 ) \
(Q).byFront = (Q).bySize; \
*((Q).pbyBuf+(--(Q).byFront)) = (0); \
(Q).byCount--; \
}
#define _QueueGet(Q,D) \
{ \
(D) = *((Q).pbyBuf+((Q).byRear++)); \
(Q).byCount--; \
if ( (Q).byRear == (Q).bySize ) \
(Q).byRear = 0; \
}
#define _QueueUnget(Q,D) \
{ \
if ( (Q).byRear == 0 ) \
(Q).byRear = (Q).bySize; \
*((Q).pbyBuf+(--(Q).byRear)) = (D); \
(Q).byCount++; \
}
#define _QueueAlloc(Q,B,N) (Q).pbyBuf=(B);(Q).bySize=(N)
#define _QueueClear(Q) (Q).byCount=(Q).byFront=(Q).byRear=0
#define _QueueCount(Q) (Q).byCount
#define _QueueSize(Q) (Q).bySize
#define _QueueEmpty(Q) ((Q).byCount==0)
#define _QueueFull(Q) ((Q).byCount>=(Q).bySize)
#define QueueCount(Q) (Q)->byCount
#define QueueSize(Q) (Q)->bySize
#define QueueEmpty(Q) ((Q)->byCount==0)
#define QueueFull(Q) ((Q)->byCount>=(Q)->bySize)
/*****************************************************************************
* structs & typedefs
*****************************************************************************/
typedef struct _Queue {
BYTE byCount;
BYTE byFront;
BYTE byRear;
BYTE bySize;
BYTE *pbyBuf;
} Queue;
/*****************************************************************************
* global constants
*****************************************************************************/
/*****************************************************************************
* global variables
*****************************************************************************/
/*****************************************************************************
* C function prototypes
*****************************************************************************/
/* export C functions to C++ */
#ifdef __cplusplus
extern "C" {
#endif
void QueueAlloc( Queue *pQ, BYTE *pbyData, BYTE bySize );
void QueueClear( Queue *pQ );
BYTE QueueGet( Queue *pQ, BYTE *pbyData );
BYTE QueuePut( Queue *pQ, BYTE *pbyData );
BYTE QueueUnget( Queue *pQ, BYTE byData );
BYTE QueueUnput( Queue *pQ );
#ifdef __cpluscplus
}
#endif
#endif