summaryrefslogtreecommitdiffstats
path: root/src/bdd/parse/parseStack.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/bdd/parse/parseStack.c')
-rw-r--r--src/bdd/parse/parseStack.c243
1 files changed, 243 insertions, 0 deletions
diff --git a/src/bdd/parse/parseStack.c b/src/bdd/parse/parseStack.c
new file mode 100644
index 00000000..8329070e
--- /dev/null
+++ b/src/bdd/parse/parseStack.c
@@ -0,0 +1,243 @@
+/**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"
+
+////////////////////////////////////////////////////////////////////////
+/// DECLARATIONS ///
+////////////////////////////////////////////////////////////////////////
+
+struct ParseStackFnStruct
+{
+ DdNode ** 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 DEFITIONS ///
+////////////////////////////////////////////////////////////////////////
+
+/**Function*************************************************************
+
+ Synopsis [Starts the stack.]
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso []
+
+***********************************************************************/
+Parse_StackFn_t * Parse_StackFnStart( int nDepth )
+{
+ Parse_StackFn_t * p;
+ p = ALLOC( Parse_StackFn_t, 1 );
+ memset( p, 0, sizeof(Parse_StackFn_t) );
+ p->pData = ALLOC( DdNode *, nDepth );
+ p->Size = nDepth;
+ return p;
+}
+
+/**Function*************************************************************
+
+ Synopsis [Checks whether the stack is empty.]
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso []
+
+***********************************************************************/
+bool Parse_StackFnIsEmpty( Parse_StackFn_t * p )
+{
+ return (bool)(p->Top == 0);
+}
+
+/**Function*************************************************************
+
+ Synopsis [Pushes an entry into the stack.]
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso []
+
+***********************************************************************/
+void Parse_StackFnPush( Parse_StackFn_t * p, DdNode * 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 []
+
+***********************************************************************/
+DdNode * 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 )
+{
+ FREE( p->pData );
+ FREE( p );
+}
+
+
+
+
+/**Function*************************************************************
+
+ Synopsis [Starts the stack.]
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso []
+
+***********************************************************************/
+Parse_StackOp_t * Parse_StackOpStart( int nDepth )
+{
+ Parse_StackOp_t * p;
+ p = ALLOC( Parse_StackOp_t, 1 );
+ memset( p, 0, sizeof(Parse_StackOp_t) );
+ p->pData = ALLOC( int, nDepth );
+ p->Size = nDepth;
+ return p;
+}
+
+/**Function*************************************************************
+
+ Synopsis [Checks whether the stack is empty.]
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso []
+
+***********************************************************************/
+bool Parse_StackOpIsEmpty( Parse_StackOp_t * p )
+{
+ return (bool)(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 )
+{
+ FREE( p->pData );
+ FREE( p );
+}
+
+
+////////////////////////////////////////////////////////////////////////
+/// END OF FILE ///
+////////////////////////////////////////////////////////////////////////
+
+