| /**CFile**************************************************************** | |
| FileName [bdcTable.c] | |
| SystemName [ABC: Logic synthesis and verification system.] | |
| PackageName [Truth-table-based bi-decomposition engine.] | |
| Synopsis [Hash table for intermediate nodes.] | |
| Author [Alan Mishchenko] | |
| Affiliation [UC Berkeley] | |
| Date [Ver. 1.0. Started - January 30, 2007.] | |
| Revision [$Id: bdcTable.c,v 1.00 2007/01/30 00:00:00 alanmi Exp $] | |
| ***********************************************************************/ | |
| #include "bdcInt.h" | |
| ABC_NAMESPACE_IMPL_START | |
| //////////////////////////////////////////////////////////////////////// | |
| /// DECLARATIONS /// | |
| //////////////////////////////////////////////////////////////////////// | |
| //////////////////////////////////////////////////////////////////////// | |
| /// FUNCTION DEFINITIONS /// | |
| //////////////////////////////////////////////////////////////////////// | |
| /**Function************************************************************* | |
| Synopsis [Checks containment of the function in the ISF.] | |
| Description [] | |
| SideEffects [] | |
| SeeAlso [] | |
| ***********************************************************************/ | |
| int Bdc_TableCheckContainment( Bdc_Man_t * p, Bdc_Isf_t * pIsf, unsigned * puTruth ) | |
| { | |
| return Kit_TruthIsImply( pIsf->puOn, puTruth, p->nVars ) && | |
| Kit_TruthIsDisjoint( puTruth, pIsf->puOff, p->nVars ); | |
| } | |
| /**Function************************************************************* | |
| Synopsis [Adds the new entry to the hash table.] | |
| Description [] | |
| SideEffects [] | |
| SeeAlso [] | |
| ***********************************************************************/ | |
| Bdc_Fun_t * Bdc_TableLookup( Bdc_Man_t * p, Bdc_Isf_t * pIsf ) | |
| { | |
| int fDisableCache = 0; | |
| Bdc_Fun_t * pFunc; | |
| if ( fDisableCache && Kit_WordCountOnes(pIsf->uSupp) > 1 ) | |
| return NULL; | |
| if ( pIsf->uSupp == 0 ) | |
| { | |
| assert( p->pTable[pIsf->uSupp] == p->pNodes ); | |
| if ( Kit_TruthIsConst1( pIsf->puOn, p->nVars ) ) | |
| return p->pNodes; | |
| assert( Kit_TruthIsConst1( pIsf->puOff, p->nVars ) ); | |
| return Bdc_Not(p->pNodes); | |
| } | |
| for ( pFunc = p->pTable[pIsf->uSupp]; pFunc; pFunc = pFunc->pNext ) | |
| if ( Bdc_TableCheckContainment( p, pIsf, pFunc->puFunc ) ) | |
| return pFunc; | |
| Bdc_IsfNot( pIsf ); | |
| for ( pFunc = p->pTable[pIsf->uSupp]; pFunc; pFunc = pFunc->pNext ) | |
| if ( Bdc_TableCheckContainment( p, pIsf, pFunc->puFunc ) ) | |
| { | |
| Bdc_IsfNot( pIsf ); | |
| return Bdc_Not(pFunc); | |
| } | |
| Bdc_IsfNot( pIsf ); | |
| return NULL; | |
| } | |
| /**Function************************************************************* | |
| Synopsis [Adds the new entry to the hash table.] | |
| Description [] | |
| SideEffects [] | |
| SeeAlso [] | |
| ***********************************************************************/ | |
| void Bdc_TableAdd( Bdc_Man_t * p, Bdc_Fun_t * pFunc ) | |
| { | |
| if ( p->pTable[pFunc->uSupp] == NULL ) | |
| Vec_IntPush( p->vSpots, pFunc->uSupp ); | |
| pFunc->pNext = p->pTable[pFunc->uSupp]; | |
| p->pTable[pFunc->uSupp] = pFunc; | |
| } | |
| /**Function************************************************************* | |
| Synopsis [Adds the new entry to the hash table.] | |
| Description [] | |
| SideEffects [] | |
| SeeAlso [] | |
| ***********************************************************************/ | |
| void Bdc_TableClear( Bdc_Man_t * p ) | |
| { | |
| int Spot, i; | |
| Vec_IntForEachEntry( p->vSpots, Spot, i ) | |
| p->pTable[Spot] = NULL; | |
| Vec_IntClear( p->vSpots ); | |
| } | |
| //////////////////////////////////////////////////////////////////////// | |
| /// END OF FILE /// | |
| //////////////////////////////////////////////////////////////////////// | |
| ABC_NAMESPACE_IMPL_END | |