/**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" ABC_NAMESPACE_IMPL_START //////////////////////////////////////////////////////////////////////// /// 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 /// //////////////////////////////////////////////////////////////////////// ABC_NAMESPACE_IMPL_END