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