blob: 2e6d266d4458294bcb977b09c2717a52e63450c6 [file] [log] [blame]
/**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