| /**CFile**************************************************************** |
| |
| FileName [parseStack.c] |
| |
| PackageName [MVSIS 1.3: Multi-valued logic synthesis system.] |
| |
| Synopsis [Stacks used by the formula parser.] |
| |
| Author [MVSIS Group] |
| |
| Affiliation [UC Berkeley] |
| |
| Date [Ver. 1.0. Started - August 18, 2003.] |
| |
| Revision [$Id: parseStack.c,v 1.0 2003/02/01 00:00:00 alanmi Exp $] |
| |
| ***********************************************************************/ |
| |
| #include "parseInt.h" |
| |
| ABC_NAMESPACE_IMPL_START |
| |
| |
| //////////////////////////////////////////////////////////////////////// |
| /// DECLARATIONS /// |
| //////////////////////////////////////////////////////////////////////// |
| |
| struct ParseStackFnStruct |
| { |
| void ** pData; // the array of elements |
| int Top; // the index |
| int Size; // the stack size |
| }; |
| |
| struct ParseStackOpStruct |
| { |
| int * pData; // the array of elements |
| int Top; // the index |
| int Size; // the stack size |
| }; |
| |
| //////////////////////////////////////////////////////////////////////// |
| /// FUNCTION DEFINITIONS /// |
| //////////////////////////////////////////////////////////////////////// |
| |
| /**Function************************************************************* |
| |
| Synopsis [Starts the stack.] |
| |
| Description [] |
| |
| SideEffects [] |
| |
| SeeAlso [] |
| |
| ***********************************************************************/ |
| Parse_StackFn_t * Parse_StackFnStart( int nDepth ) |
| { |
| Parse_StackFn_t * p; |
| p = ABC_ALLOC( Parse_StackFn_t, 1 ); |
| memset( p, 0, sizeof(Parse_StackFn_t) ); |
| p->pData = ABC_ALLOC( void *, nDepth ); |
| p->Size = nDepth; |
| return p; |
| } |
| |
| /**Function************************************************************* |
| |
| Synopsis [Checks whether the stack is empty.] |
| |
| Description [] |
| |
| SideEffects [] |
| |
| SeeAlso [] |
| |
| ***********************************************************************/ |
| int Parse_StackFnIsEmpty( Parse_StackFn_t * p ) |
| { |
| return (int)(p->Top == 0); |
| } |
| |
| /**Function************************************************************* |
| |
| Synopsis [Pushes an entry into the stack.] |
| |
| Description [] |
| |
| SideEffects [] |
| |
| SeeAlso [] |
| |
| ***********************************************************************/ |
| void Parse_StackFnPush( Parse_StackFn_t * p, void * bFunc ) |
| { |
| if ( p->Top >= p->Size ) |
| { |
| printf( "Parse_StackFnPush(): Stack size is too small!\n" ); |
| return; |
| } |
| p->pData[ p->Top++ ] = bFunc; |
| } |
| |
| /**Function************************************************************* |
| |
| Synopsis [Pops an entry out of the stack.] |
| |
| Description [] |
| |
| SideEffects [] |
| |
| SeeAlso [] |
| |
| ***********************************************************************/ |
| void * Parse_StackFnPop( Parse_StackFn_t * p ) |
| { |
| if ( p->Top == 0 ) |
| { |
| printf( "Parse_StackFnPush(): Trying to extract data from the empty stack!\n" ); |
| return NULL; |
| } |
| return p->pData[ --p->Top ]; |
| } |
| |
| /**Function************************************************************* |
| |
| Synopsis [Deletes the stack.] |
| |
| Description [] |
| |
| SideEffects [] |
| |
| SeeAlso [] |
| |
| ***********************************************************************/ |
| void Parse_StackFnFree( Parse_StackFn_t * p ) |
| { |
| ABC_FREE( p->pData ); |
| ABC_FREE( p ); |
| } |
| |
| |
| |
| |
| /**Function************************************************************* |
| |
| Synopsis [Starts the stack.] |
| |
| Description [] |
| |
| SideEffects [] |
| |
| SeeAlso [] |
| |
| ***********************************************************************/ |
| Parse_StackOp_t * Parse_StackOpStart( int nDepth ) |
| { |
| Parse_StackOp_t * p; |
| p = ABC_ALLOC( Parse_StackOp_t, 1 ); |
| memset( p, 0, sizeof(Parse_StackOp_t) ); |
| p->pData = ABC_ALLOC( int, nDepth ); |
| p->Size = nDepth; |
| return p; |
| } |
| |
| /**Function************************************************************* |
| |
| Synopsis [Checks whether the stack is empty.] |
| |
| Description [] |
| |
| SideEffects [] |
| |
| SeeAlso [] |
| |
| ***********************************************************************/ |
| int Parse_StackOpIsEmpty( Parse_StackOp_t * p ) |
| { |
| return (int)(p->Top == 0); |
| } |
| |
| /**Function************************************************************* |
| |
| Synopsis [Pushes an entry into the stack.] |
| |
| Description [] |
| |
| SideEffects [] |
| |
| SeeAlso [] |
| |
| ***********************************************************************/ |
| void Parse_StackOpPush( Parse_StackOp_t * p, int Oper ) |
| { |
| if ( p->Top >= p->Size ) |
| { |
| printf( "Parse_StackOpPush(): Stack size is too small!\n" ); |
| return; |
| } |
| p->pData[ p->Top++ ] = Oper; |
| } |
| |
| /**Function************************************************************* |
| |
| Synopsis [Pops an entry out of the stack.] |
| |
| Description [] |
| |
| SideEffects [] |
| |
| SeeAlso [] |
| |
| ***********************************************************************/ |
| int Parse_StackOpPop( Parse_StackOp_t * p ) |
| { |
| if ( p->Top == 0 ) |
| { |
| printf( "Parse_StackOpPush(): Trying to extract data from the empty stack!\n" ); |
| return -1; |
| } |
| return p->pData[ --p->Top ]; |
| } |
| |
| /**Function************************************************************* |
| |
| Synopsis [Deletes the stack.] |
| |
| Description [] |
| |
| SideEffects [] |
| |
| SeeAlso [] |
| |
| ***********************************************************************/ |
| void Parse_StackOpFree( Parse_StackOp_t * p ) |
| { |
| ABC_FREE( p->pData ); |
| ABC_FREE( p ); |
| } |
| |
| |
| //////////////////////////////////////////////////////////////////////// |
| /// END OF FILE /// |
| //////////////////////////////////////////////////////////////////////// |
| |
| |
| ABC_NAMESPACE_IMPL_END |
| |