| /**CFile**************************************************************** |
| |
| FileName [cutNode.c] |
| |
| SystemName [ABC: Logic synthesis and verification system.] |
| |
| PackageName [K-feasible cut computation package.] |
| |
| Synopsis [Procedures to compute cuts for a node.] |
| |
| Author [Alan Mishchenko] |
| |
| Affiliation [UC Berkeley] |
| |
| Date [Ver. 1.0. Started - June 20, 2005.] |
| |
| Revision [$Id: cutNode.c,v 1.00 2005/06/20 00:00:00 alanmi Exp $] |
| |
| ***********************************************************************/ |
| |
| #include "cutInt.h" |
| |
| ABC_NAMESPACE_IMPL_START |
| |
| |
| //////////////////////////////////////////////////////////////////////// |
| /// DECLARATIONS /// |
| //////////////////////////////////////////////////////////////////////// |
| |
| //////////////////////////////////////////////////////////////////////// |
| /// FUNCTION DEFINITIONS /// |
| //////////////////////////////////////////////////////////////////////// |
| |
| /**Function************************************************************* |
| |
| Synopsis [Returns the pointer to the linked list of cuts.] |
| |
| Description [] |
| |
| SideEffects [] |
| |
| SeeAlso [] |
| |
| ***********************************************************************/ |
| Cut_Cut_t * Cut_NodeReadCutsNew( Cut_Man_t * p, int Node ) |
| { |
| if ( Node >= p->vCutsNew->nSize ) |
| return NULL; |
| return (Cut_Cut_t *)Vec_PtrEntry( p->vCutsNew, Node ); |
| } |
| |
| /**Function************************************************************* |
| |
| Synopsis [Returns the pointer to the linked list of cuts.] |
| |
| Description [] |
| |
| SideEffects [] |
| |
| SeeAlso [] |
| |
| ***********************************************************************/ |
| Cut_Cut_t * Cut_NodeReadCutsOld( Cut_Man_t * p, int Node ) |
| { |
| assert( Node < p->vCutsOld->nSize ); |
| return (Cut_Cut_t *)Vec_PtrEntry( p->vCutsOld, Node ); |
| } |
| |
| /**Function************************************************************* |
| |
| Synopsis [Returns the pointer to the linked list of cuts.] |
| |
| Description [] |
| |
| SideEffects [] |
| |
| SeeAlso [] |
| |
| ***********************************************************************/ |
| Cut_Cut_t * Cut_NodeReadCutsTemp( Cut_Man_t * p, int Node ) |
| { |
| assert( Node < p->vCutsTemp->nSize ); |
| return (Cut_Cut_t *)Vec_PtrEntry( p->vCutsTemp, Node ); |
| } |
| |
| /**Function************************************************************* |
| |
| Synopsis [Returns the pointer to the linked list of cuts.] |
| |
| Description [] |
| |
| SideEffects [] |
| |
| SeeAlso [] |
| |
| ***********************************************************************/ |
| void Cut_NodeWriteCutsNew( Cut_Man_t * p, int Node, Cut_Cut_t * pList ) |
| { |
| Vec_PtrWriteEntry( p->vCutsNew, Node, pList ); |
| } |
| |
| /**Function************************************************************* |
| |
| Synopsis [Returns the pointer to the linked list of cuts.] |
| |
| Description [] |
| |
| SideEffects [] |
| |
| SeeAlso [] |
| |
| ***********************************************************************/ |
| void Cut_NodeWriteCutsOld( Cut_Man_t * p, int Node, Cut_Cut_t * pList ) |
| { |
| Vec_PtrWriteEntry( p->vCutsOld, Node, pList ); |
| } |
| |
| /**Function************************************************************* |
| |
| Synopsis [Returns the pointer to the linked list of cuts.] |
| |
| Description [] |
| |
| SideEffects [] |
| |
| SeeAlso [] |
| |
| ***********************************************************************/ |
| void Cut_NodeWriteCutsTemp( Cut_Man_t * p, int Node, Cut_Cut_t * pList ) |
| { |
| Vec_PtrWriteEntry( p->vCutsTemp, Node, pList ); |
| } |
| |
| /**Function************************************************************* |
| |
| Synopsis [Sets the trivial cut for the node.] |
| |
| Description [] |
| |
| SideEffects [] |
| |
| SeeAlso [] |
| |
| ***********************************************************************/ |
| void Cut_NodeSetTriv( Cut_Man_t * p, int Node ) |
| { |
| assert( Cut_NodeReadCutsNew(p, Node) == NULL ); |
| Cut_NodeWriteCutsNew( p, Node, Cut_CutCreateTriv(p, Node) ); |
| } |
| |
| /**Function************************************************************* |
| |
| Synopsis [Consider dropping cuts if they are useless by now.] |
| |
| Description [] |
| |
| SideEffects [] |
| |
| SeeAlso [] |
| |
| ***********************************************************************/ |
| void Cut_NodeTryDroppingCuts( Cut_Man_t * p, int Node ) |
| { |
| int nFanouts; |
| assert( p->vFanCounts ); |
| nFanouts = Vec_IntEntry( p->vFanCounts, Node ); |
| assert( nFanouts > 0 ); |
| if ( --nFanouts == 0 ) |
| Cut_NodeFreeCuts( p, Node ); |
| Vec_IntWriteEntry( p->vFanCounts, Node, nFanouts ); |
| } |
| |
| /**Function************************************************************* |
| |
| Synopsis [Deallocates the cuts at the node.] |
| |
| Description [] |
| |
| SideEffects [] |
| |
| SeeAlso [] |
| |
| ***********************************************************************/ |
| void Cut_NodeFreeCuts( Cut_Man_t * p, int Node ) |
| { |
| Cut_Cut_t * pList, * pCut, * pCut2; |
| pList = Cut_NodeReadCutsNew( p, Node ); |
| if ( pList == NULL ) |
| return; |
| Cut_ListForEachCutSafe( pList, pCut, pCut2 ) |
| Cut_CutRecycle( p, pCut ); |
| Cut_NodeWriteCutsNew( p, Node, NULL ); |
| } |
| |
| |
| //////////////////////////////////////////////////////////////////////// |
| /// END OF FILE /// |
| //////////////////////////////////////////////////////////////////////// |
| |
| |
| ABC_NAMESPACE_IMPL_END |
| |