- initial import
git-svn-id: http://moon:8086/svn/mips@1 a8ebac50-d88d-4704-bea3-6648445a41b3
This commit is contained in:
@@ -0,0 +1,98 @@
|
||||
#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 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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user