// for multi-tasking, a common mutex should be used in these functions
// if there's no need for overflow checking, iNumElements can be removed,
// and an empty array is indicated when pGet == pPut
// if PutElement returns a 1, the array just went from empty to non-empty.
#define MAXSIZE 1024 // up to 1024 integers
static int aIntegers[MAXSIZE];
static constant int *pBase = &aIntegers[0];
static constant int *pEnd = &aIntegers[MAXSIZE];
static int *pPut = &aIntegers[0];
static int *pGet = &aIntegers[0];
static int iNumElements = 0;
int PutElement(int iElement)
{
if(iNumElements == MAXSIZE) // prevent overflow, caller code should check this
return;
*pPut++ = iElement
if(pPut >= pEnd)
pPut = pBase;
iNumElements += 1;
return(iNumElements);
}
int GetElement(void)
{
int iValue;
if(iNumElements == 0) // return 0 if empty array, calling code should do this check
return(0);
iNumElements -= 1;
iValue = *pGet++;
if(pGet >= pEnd)
pGet = pBase;
return(iValue);
}
int PeekElement(void)
{
if(iNumElements == 0) // return 0 if empty array, calling code should do this check
return(0);
return(*pGet);
}