git-svn-id: http://moon:8086/svn/projects/HendiControl@21 fda53097-d464-4ada-af97-ba876c37ca34
74 lines
1.2 KiB
C
74 lines
1.2 KiB
C
/*
|
|
* fifo.c
|
|
*
|
|
* Created: 20.02.2019 20:33:06
|
|
* Author: jens
|
|
*/
|
|
|
|
#include "fifo.h"
|
|
|
|
void fifo_init(Fifo *pObj, size_t capacity, size_t itemSize, const char *pName)
|
|
{
|
|
pObj->wi = 0;
|
|
pObj->ri = 0;
|
|
pObj->fill = 0;
|
|
pObj->capacity = capacity;
|
|
pObj->itemSize = itemSize;
|
|
pObj->ppData = (void**)malloc(capacity);
|
|
|
|
for (int i=0; i < capacity; i++)
|
|
{
|
|
pObj->ppData[i] = (void*)malloc(itemSize);
|
|
}
|
|
pObj->pName = pName;
|
|
}
|
|
|
|
void fifo_free(Fifo *pObj)
|
|
{
|
|
for (int i=0; i < pObj->capacity; i++)
|
|
{
|
|
free(pObj->ppData[i]);
|
|
}
|
|
free (pObj->ppData);
|
|
pObj->itemSize = 0;
|
|
pObj->capacity = 0;
|
|
}
|
|
|
|
int fifo_push(Fifo *pObj, void *pItem)
|
|
{
|
|
if (pObj->fill >= pObj->capacity)
|
|
{
|
|
return 0;
|
|
}
|
|
memcpy(pObj->ppData[pObj->wi], pItem, pObj->itemSize);
|
|
pObj->wi++;
|
|
pObj->fill++;
|
|
if (pObj->wi == pObj->capacity)
|
|
{
|
|
pObj->wi = 0;
|
|
}
|
|
return 1;
|
|
}
|
|
|
|
int fifo_pop(Fifo *pObj, void *pItem)
|
|
{
|
|
if (!pObj->fill)
|
|
{
|
|
return 0;
|
|
}
|
|
memcpy(pItem, pObj->ppData[pObj->ri], pObj->itemSize);
|
|
pObj->ri++;
|
|
pObj->fill--;
|
|
if (pObj->ri == pObj->capacity)
|
|
{
|
|
pObj->ri = 0;
|
|
}
|
|
return 1;
|
|
}
|
|
|
|
int fifo_isEmpty(Fifo *pObj)
|
|
{
|
|
return pObj->fill == 0;
|
|
}
|
|
|