summaryrefslogtreecommitdiffstats
path: root/src/opt/fxu/fxuList.c
diff options
context:
space:
mode:
authorAlan Mishchenko <alanmi@berkeley.edu>2007-10-01 08:01:00 -0700
committerAlan Mishchenko <alanmi@berkeley.edu>2007-10-01 08:01:00 -0700
commit4812c90424dfc40d26725244723887a2d16ddfd9 (patch)
treeb32ace96e7e2d84d586e09ba605463b6f49c3271 /src/opt/fxu/fxuList.c
parente54d9691616b9a0326e2fdb3156bb4eeb8abfcd7 (diff)
downloadabc-4812c90424dfc40d26725244723887a2d16ddfd9.tar.gz
abc-4812c90424dfc40d26725244723887a2d16ddfd9.tar.bz2
abc-4812c90424dfc40d26725244723887a2d16ddfd9.zip
Version abc71001
Diffstat (limited to 'src/opt/fxu/fxuList.c')
-rw-r--r--src/opt/fxu/fxuList.c522
1 files changed, 522 insertions, 0 deletions
diff --git a/src/opt/fxu/fxuList.c b/src/opt/fxu/fxuList.c
new file mode 100644
index 00000000..52995804
--- /dev/null
+++ b/src/opt/fxu/fxuList.c
@@ -0,0 +1,522 @@
+/**CFile****************************************************************
+
+ FileName [fxuList.c]
+
+ PackageName [MVSIS 2.0: Multi-valued logic synthesis system.]
+
+ Synopsis [Operations on lists.]
+
+ Author [MVSIS Group]
+
+ Affiliation [UC Berkeley]
+
+ Date [Ver. 1.0. Started - February 1, 2003.]
+
+ Revision [$Id: fxuList.c,v 1.0 2003/02/01 00:00:00 alanmi Exp $]
+
+***********************************************************************/
+
+#include "fxuInt.h"
+
+////////////////////////////////////////////////////////////////////////
+/// DECLARATIONS ///
+////////////////////////////////////////////////////////////////////////
+
+////////////////////////////////////////////////////////////////////////
+/// FUNCTION DEFINITIONS ///
+////////////////////////////////////////////////////////////////////////
+
+// matrix -> var
+
+/**Function*************************************************************
+
+ Synopsis []
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso []
+
+***********************************************************************/
+void Fxu_ListMatrixAddVariable( Fxu_Matrix * p, Fxu_Var * pLink )
+{
+ Fxu_ListVar * pList = &p->lVars;
+ if ( pList->pHead == NULL )
+ {
+ pList->pHead = pLink;
+ pList->pTail = pLink;
+ pLink->pPrev = NULL;
+ pLink->pNext = NULL;
+ }
+ else
+ {
+ pLink->pNext = NULL;
+ pList->pTail->pNext = pLink;
+ pLink->pPrev = pList->pTail;
+ pList->pTail = pLink;
+ }
+ pList->nItems++;
+}
+
+/**Function*************************************************************
+
+ Synopsis []
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso []
+
+***********************************************************************/
+void Fxu_ListMatrixDelVariable( Fxu_Matrix * p, Fxu_Var * pLink )
+{
+ Fxu_ListVar * pList = &p->lVars;
+ if ( pList->pHead == pLink )
+ pList->pHead = pLink->pNext;
+ if ( pList->pTail == pLink )
+ pList->pTail = pLink->pPrev;
+ if ( pLink->pPrev )
+ pLink->pPrev->pNext = pLink->pNext;
+ if ( pLink->pNext )
+ pLink->pNext->pPrev = pLink->pPrev;
+ pList->nItems--;
+}
+
+
+// matrix -> cube
+
+/**Function*************************************************************
+
+ Synopsis []
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso []
+
+***********************************************************************/
+void Fxu_ListMatrixAddCube( Fxu_Matrix * p, Fxu_Cube * pLink )
+{
+ Fxu_ListCube * pList = &p->lCubes;
+ if ( pList->pHead == NULL )
+ {
+ pList->pHead = pLink;
+ pList->pTail = pLink;
+ pLink->pPrev = NULL;
+ pLink->pNext = NULL;
+ }
+ else
+ {
+ pLink->pNext = NULL;
+ pList->pTail->pNext = pLink;
+ pLink->pPrev = pList->pTail;
+ pList->pTail = pLink;
+ }
+ pList->nItems++;
+}
+
+/**Function*************************************************************
+
+ Synopsis []
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso []
+
+***********************************************************************/
+void Fxu_ListMatrixDelCube( Fxu_Matrix * p, Fxu_Cube * pLink )
+{
+ Fxu_ListCube * pList = &p->lCubes;
+ if ( pList->pHead == pLink )
+ pList->pHead = pLink->pNext;
+ if ( pList->pTail == pLink )
+ pList->pTail = pLink->pPrev;
+ if ( pLink->pPrev )
+ pLink->pPrev->pNext = pLink->pNext;
+ if ( pLink->pNext )
+ pLink->pNext->pPrev = pLink->pPrev;
+ pList->nItems--;
+}
+
+
+// matrix -> single
+
+/**Function*************************************************************
+
+ Synopsis []
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso []
+
+***********************************************************************/
+void Fxu_ListMatrixAddSingle( Fxu_Matrix * p, Fxu_Single * pLink )
+{
+ Fxu_ListSingle * pList = &p->lSingles;
+ if ( pList->pHead == NULL )
+ {
+ pList->pHead = pLink;
+ pList->pTail = pLink;
+ pLink->pPrev = NULL;
+ pLink->pNext = NULL;
+ }
+ else
+ {
+ pLink->pNext = NULL;
+ pList->pTail->pNext = pLink;
+ pLink->pPrev = pList->pTail;
+ pList->pTail = pLink;
+ }
+ pList->nItems++;
+}
+
+/**Function*************************************************************
+
+ Synopsis []
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso []
+
+***********************************************************************/
+void Fxu_ListMatrixDelSingle( Fxu_Matrix * p, Fxu_Single * pLink )
+{
+ Fxu_ListSingle * pList = &p->lSingles;
+ if ( pList->pHead == pLink )
+ pList->pHead = pLink->pNext;
+ if ( pList->pTail == pLink )
+ pList->pTail = pLink->pPrev;
+ if ( pLink->pPrev )
+ pLink->pPrev->pNext = pLink->pNext;
+ if ( pLink->pNext )
+ pLink->pNext->pPrev = pLink->pPrev;
+ pList->nItems--;
+}
+
+
+// table -> divisor
+
+/**Function*************************************************************
+
+ Synopsis []
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso []
+
+***********************************************************************/
+void Fxu_ListTableAddDivisor( Fxu_Matrix * p, Fxu_Double * pLink )
+{
+ Fxu_ListDouble * pList = &(p->pTable[pLink->Key]);
+ if ( pList->pHead == NULL )
+ {
+ pList->pHead = pLink;
+ pList->pTail = pLink;
+ pLink->pPrev = NULL;
+ pLink->pNext = NULL;
+ }
+ else
+ {
+ pLink->pNext = NULL;
+ pList->pTail->pNext = pLink;
+ pLink->pPrev = pList->pTail;
+ pList->pTail = pLink;
+ }
+ pList->nItems++;
+ p->nDivs++;
+}
+
+/**Function*************************************************************
+
+ Synopsis []
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso []
+
+***********************************************************************/
+void Fxu_ListTableDelDivisor( Fxu_Matrix * p, Fxu_Double * pLink )
+{
+ Fxu_ListDouble * pList = &(p->pTable[pLink->Key]);
+ if ( pList->pHead == pLink )
+ pList->pHead = pLink->pNext;
+ if ( pList->pTail == pLink )
+ pList->pTail = pLink->pPrev;
+ if ( pLink->pPrev )
+ pLink->pPrev->pNext = pLink->pNext;
+ if ( pLink->pNext )
+ pLink->pNext->pPrev = pLink->pPrev;
+ pList->nItems--;
+ p->nDivs--;
+}
+
+
+// cube -> literal
+
+/**Function*************************************************************
+
+ Synopsis []
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso []
+
+***********************************************************************/
+void Fxu_ListCubeAddLiteral( Fxu_Cube * pCube, Fxu_Lit * pLink )
+{
+ Fxu_ListLit * pList = &(pCube->lLits);
+ if ( pList->pHead == NULL )
+ {
+ pList->pHead = pLink;
+ pList->pTail = pLink;
+ pLink->pHPrev = NULL;
+ pLink->pHNext = NULL;
+ }
+ else
+ {
+ pLink->pHNext = NULL;
+ pList->pTail->pHNext = pLink;
+ pLink->pHPrev = pList->pTail;
+ pList->pTail = pLink;
+ }
+ pList->nItems++;
+}
+
+/**Function*************************************************************
+
+ Synopsis []
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso []
+
+***********************************************************************/
+void Fxu_ListCubeDelLiteral( Fxu_Cube * pCube, Fxu_Lit * pLink )
+{
+ Fxu_ListLit * pList = &(pCube->lLits);
+ if ( pList->pHead == pLink )
+ pList->pHead = pLink->pHNext;
+ if ( pList->pTail == pLink )
+ pList->pTail = pLink->pHPrev;
+ if ( pLink->pHPrev )
+ pLink->pHPrev->pHNext = pLink->pHNext;
+ if ( pLink->pHNext )
+ pLink->pHNext->pHPrev = pLink->pHPrev;
+ pList->nItems--;
+}
+
+
+// var -> literal
+
+/**Function*************************************************************
+
+ Synopsis []
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso []
+
+***********************************************************************/
+void Fxu_ListVarAddLiteral( Fxu_Var * pVar, Fxu_Lit * pLink )
+{
+ Fxu_ListLit * pList = &(pVar->lLits);
+ if ( pList->pHead == NULL )
+ {
+ pList->pHead = pLink;
+ pList->pTail = pLink;
+ pLink->pVPrev = NULL;
+ pLink->pVNext = NULL;
+ }
+ else
+ {
+ pLink->pVNext = NULL;
+ pList->pTail->pVNext = pLink;
+ pLink->pVPrev = pList->pTail;
+ pList->pTail = pLink;
+ }
+ pList->nItems++;
+}
+
+/**Function*************************************************************
+
+ Synopsis []
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso []
+
+***********************************************************************/
+void Fxu_ListVarDelLiteral( Fxu_Var * pVar, Fxu_Lit * pLink )
+{
+ Fxu_ListLit * pList = &(pVar->lLits);
+ if ( pList->pHead == pLink )
+ pList->pHead = pLink->pVNext;
+ if ( pList->pTail == pLink )
+ pList->pTail = pLink->pVPrev;
+ if ( pLink->pVPrev )
+ pLink->pVPrev->pVNext = pLink->pVNext;
+ if ( pLink->pVNext )
+ pLink->pVNext->pVPrev = pLink->pVPrev;
+ pList->nItems--;
+}
+
+
+
+// divisor -> pair
+
+/**Function*************************************************************
+
+ Synopsis []
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso []
+
+***********************************************************************/
+void Fxu_ListDoubleAddPairLast( Fxu_Double * pDiv, Fxu_Pair * pLink )
+{
+ Fxu_ListPair * pList = &pDiv->lPairs;
+ if ( pList->pHead == NULL )
+ {
+ pList->pHead = pLink;
+ pList->pTail = pLink;
+ pLink->pDPrev = NULL;
+ pLink->pDNext = NULL;
+ }
+ else
+ {
+ pLink->pDNext = NULL;
+ pList->pTail->pDNext = pLink;
+ pLink->pDPrev = pList->pTail;
+ pList->pTail = pLink;
+ }
+ pList->nItems++;
+}
+
+/**Function*************************************************************
+
+ Synopsis []
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso []
+
+***********************************************************************/
+void Fxu_ListDoubleAddPairFirst( Fxu_Double * pDiv, Fxu_Pair * pLink )
+{
+ Fxu_ListPair * pList = &pDiv->lPairs;
+ if ( pList->pHead == NULL )
+ {
+ pList->pHead = pLink;
+ pList->pTail = pLink;
+ pLink->pDPrev = NULL;
+ pLink->pDNext = NULL;
+ }
+ else
+ {
+ pLink->pDPrev = NULL;
+ pList->pHead->pDPrev = pLink;
+ pLink->pDNext = pList->pHead;
+ pList->pHead = pLink;
+ }
+ pList->nItems++;
+}
+
+/**Function*************************************************************
+
+ Synopsis [Adds the entry in the middle of the list after the spot.]
+
+ Description [Assumes that spot points to the link, after which the given
+ link should be added. Spot cannot be NULL or the tail of the list.
+ Therefore, the head and the tail of the list are not changed.]
+
+ SideEffects []
+
+ SeeAlso []
+
+***********************************************************************/
+void Fxu_ListDoubleAddPairMiddle( Fxu_Double * pDiv, Fxu_Pair * pSpot, Fxu_Pair * pLink )
+{
+ Fxu_ListPair * pList = &pDiv->lPairs;
+ assert( pSpot );
+ assert( pSpot != pList->pTail );
+ pLink->pDPrev = pSpot;
+ pLink->pDNext = pSpot->pDNext;
+ pLink->pDPrev->pDNext = pLink;
+ pLink->pDNext->pDPrev = pLink;
+ pList->nItems++;
+}
+
+/**Function*************************************************************
+
+ Synopsis []
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso []
+
+***********************************************************************/
+void Fxu_ListDoubleDelPair( Fxu_Double * pDiv, Fxu_Pair * pLink )
+{
+ Fxu_ListPair * pList = &pDiv->lPairs;
+ if ( pList->pHead == pLink )
+ pList->pHead = pLink->pDNext;
+ if ( pList->pTail == pLink )
+ pList->pTail = pLink->pDPrev;
+ if ( pLink->pDPrev )
+ pLink->pDPrev->pDNext = pLink->pDNext;
+ if ( pLink->pDNext )
+ pLink->pDNext->pDPrev = pLink->pDPrev;
+ pList->nItems--;
+}
+
+/**Function*************************************************************
+
+ Synopsis []
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso []
+
+***********************************************************************/
+void Fxu_ListDoubleAddPairPlace( Fxu_Double * pDiv, Fxu_Pair * pPair, Fxu_Pair * pPairSpot )
+{
+ printf( "Fxu_ListDoubleAddPairPlace() is called!\n" );
+}
+
+
+
+////////////////////////////////////////////////////////////////////////
+/// END OF FILE ///
+////////////////////////////////////////////////////////////////////////
+
+