123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140 |
- /*******************************************************************************
- * Copyright 2003, Marvell Semiconductor Israel LTD. *
- * THIS CODE CONTAINS CONFIDENTIAL INFORMATION OF MARVELL. *
- * NO RIGHTS ARE GRANTED HEREIN UNDER ANY PATENT, MASK WORK RIGHT OR COPYRIGHT *
- * OF MARVELL OR ANY THIRD PARTY. MARVELL RESERVES THE RIGHT AT ITS SOLE *
- * DISCRETION TO REQUEST THAT THIS CODE BE IMMEDIATELY RETURNED TO MARVELL. *
- * THIS CODE IS PROVIDED "AS IS". MARVELL MAKES NO WARRANTIES, EXPRESSED, *
- * IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, COMPLETENESS OR PERFORMANCE. *
- * *
- * MARVELL COMPRISES MARVELL TECHNOLOGY GROUP LTD. (MTGL) AND ITS SUBSIDIARIES, *
- * MARVELL INTERNATIONAL LTD. (MIL), MARVELL TECHNOLOGY, INC. (MTI), MARVELL *
- * SEMICONDUCTOR, INC. (MSI), MARVELL ASIA PTE LTD. (MAPL), MARVELL JAPAN K.K. *
- * (MJKK), MARVELL SEMICONDUCTOR ISRAEL LTD (MSIL). *
- ********************************************************************************
- * mvStack.h - Header File for :
- *
- * FILENAME: $Workfile: mvStack.h $
- * REVISION: $Revision: 1.1 $
- * LAST UPDATE: $Modtime: $
- *
- * DESCRIPTION:
- * This file defines simple Stack (LIFO) functionality.
- *
- *******************************************************************************/
- #ifndef __mvStack_h__
- #define __mvStack_h__
- /* includes */
- #include "mvTypes.h"
- /* defines */
- /* typedefs */
- /* Data structure describes general purpose Stack */
- typedef struct
- {
- int stackIdx;
- int numOfElements;
- MV_U32* stackElements;
- } MV_STACK;
- static INLINE MV_BOOL mvStackIsFull(void* stackHndl)
- {
- MV_STACK* pStack = (MV_STACK*)stackHndl;
- if(pStack->stackIdx == pStack->numOfElements)
- return MV_TRUE;
- return MV_FALSE;
- }
- static INLINE MV_BOOL mvStackIsEmpty(void* stackHndl)
- {
- MV_STACK* pStack = (MV_STACK*)stackHndl;
- if(pStack->stackIdx == 0)
- return MV_TRUE;
- return MV_FALSE;
- }
- /* Purpose: Push new element to stack
- * Inputs:
- * - void* stackHndl - Stack handle as returned by "mvStackCreate()" function.
- * - MV_U32 value - New element.
- *
- * Return: MV_STATUS MV_FULL - Failure. Stack is full.
- * MV_OK - Success. Element is put to stack.
- */
- static INLINE void mvStackPush(void* stackHndl, MV_U32 value)
- {
- MV_STACK* pStack = (MV_STACK*)stackHndl;
- #ifdef MV_RT_DEBUG
- if(pStack->stackIdx == pStack->numOfElements)
- {
- mvOsPrintf("mvStackPush: Stack is FULL\n");
- return;
- }
- #endif /* MV_RT_DEBUG */
- pStack->stackElements[pStack->stackIdx] = value;
- pStack->stackIdx++;
- }
- /* Purpose: Pop element from the top of stack and copy it to "pValue"
- * Inputs:
- * - void* stackHndl - Stack handle as returned by "mvStackCreate()" function.
- * - MV_U32 value - Element in the top of stack.
- *
- * Return: MV_STATUS MV_EMPTY - Failure. Stack is empty.
- * MV_OK - Success. Element is removed from the stack and
- * copied to pValue argument
- */
- static INLINE MV_U32 mvStackPop(void* stackHndl)
- {
- MV_STACK* pStack = (MV_STACK*)stackHndl;
- #ifdef MV_RT_DEBUG
- if(pStack->stackIdx == 0)
- {
- mvOsPrintf("mvStackPop: Stack is EMPTY\n");
- return 0;
- }
- #endif /* MV_RT_DEBUG */
- pStack->stackIdx--;
- return pStack->stackElements[pStack->stackIdx];
- }
- static INLINE int mvStackIndex(void* stackHndl)
- {
- MV_STACK* pStack = (MV_STACK*)stackHndl;
- return pStack->stackIdx;
- }
- static INLINE int mvStackFreeElements(void* stackHndl)
- {
- MV_STACK* pStack = (MV_STACK*)stackHndl;
- return (pStack->numOfElements - pStack->stackIdx);
- }
- /* mvStack.h API list */
- /* Create new Stack */
- void* mvStackCreate(int numOfElements);
- /* Delete existing stack */
- MV_STATUS mvStackDelete(void* stackHndl);
- /* Print status of the stack */
- void mvStackStatus(void* stackHndl, MV_BOOL isPrintElements);
- #endif /* __mvStack_h__ */
|