Files
mips/src/jman/stack.c
T
jens a655e1c5d9 - use build in data types
git-svn-id: http://moon:8086/svn/mips@35 a8ebac50-d88d-4704-bea3-6648445a41b3
2015-05-28 19:19:01 +00:00

99 lines
1.5 KiB
C

#include <stdlib.h>
#include <string.h>
#include "stack.h"
stack_t* Stack_free_top(stack_t *pObj)
{
stack_t *pCurr, *pNext;
if (pObj == NULL)
return pObj;
pCurr = pObj->pNext;
while(pCurr)
{
if (pCurr->pData)
jfree(pCurr->pData);
pNext = pCurr->pNext;
jfree(pCurr);
pCurr = pNext;
}
return pObj;
}
stack_t* Stack_free(stack_t *pObj)
{
stack_t *pCurr;
if (pObj == NULL)
return pObj;
while(pObj->pNext)
pObj = pObj->pNext;
while(pObj)
{
pCurr = pObj->pPrev;
if (pObj->pData)
jfree(pObj->pData);
jfree(pObj);
pObj = pCurr;
}
return pObj;
}
stack_t* Stack_push(stack_t *pObj, void **ppData, uint32_t size)
{
stack_t *pCurr;
if (!pObj)
{
pCurr = (stack_t*)jmalloc(sizeof(stack_t));
memset(pCurr, 0, sizeof(stack_t));
}
else
{
pCurr = pObj->pNext;
if (!pCurr)
{
pCurr = (stack_t*)jmalloc(sizeof(stack_t));
memset(pCurr, 0, sizeof(stack_t));
}
}
pCurr->pPrev = pObj;
if (size)
{
if (!pCurr->pData)
pCurr->pData = (void*)jmalloc(size);
if (pCurr->pPrev)
{
if (pCurr->pPrev->size == size)
memcpy(pCurr->pData, pCurr->pPrev->pData, size);
}
else
memset(pCurr->pData, 0, size);
}
pCurr->size = size;
*ppData = pCurr->pData;
return pCurr;
}
stack_t* Stack_pop(stack_t *pObj, void **ppData)
{
stack_t *pCurr;
if (pObj == NULL)
return pObj;
if (pObj->pPrev == NULL)
return pObj->pPrev;
pCurr = pObj->pPrev;
*ppData = pCurr->pData;
return pCurr;
}