| /**CFile**************************************************************** |
| |
| FileName [nwkObj.c] |
| |
| SystemName [ABC: Logic synthesis and verification system.] |
| |
| PackageName [Logic network representation.] |
| |
| Synopsis [Manipulation of objects.] |
| |
| Author [Alan Mishchenko] |
| |
| Affiliation [UC Berkeley] |
| |
| Date [Ver. 1.0. Started - June 20, 2005.] |
| |
| Revision [$Id: nwkObj.c,v 1.00 2005/06/20 00:00:00 alanmi Exp $] |
| |
| ***********************************************************************/ |
| |
| #include "nwk.h" |
| |
| ABC_NAMESPACE_IMPL_START |
| |
| |
| //////////////////////////////////////////////////////////////////////// |
| /// DECLARATIONS /// |
| //////////////////////////////////////////////////////////////////////// |
| |
| //////////////////////////////////////////////////////////////////////// |
| /// FUNCTION DEFINITIONS /// |
| //////////////////////////////////////////////////////////////////////// |
| |
| /**Function************************************************************* |
| |
| Synopsis [Creates an object.] |
| |
| Description [] |
| |
| SideEffects [] |
| |
| SeeAlso [] |
| |
| ***********************************************************************/ |
| Nwk_Obj_t * Nwk_ManCreateObj( Nwk_Man_t * p, int nFanins, int nFanouts ) |
| { |
| Nwk_Obj_t * pObj; |
| pObj = (Nwk_Obj_t *)Aig_MmFlexEntryFetch( p->pMemObjs, sizeof(Nwk_Obj_t) + (nFanins + nFanouts + p->nFanioPlus) * sizeof(Nwk_Obj_t *) ); |
| memset( pObj, 0, sizeof(Nwk_Obj_t) ); |
| pObj->pFanio = (Nwk_Obj_t **)((char *)pObj + sizeof(Nwk_Obj_t)); |
| pObj->Id = Vec_PtrSize( p->vObjs ); |
| Vec_PtrPush( p->vObjs, pObj ); |
| pObj->pMan = p; |
| pObj->nFanioAlloc = nFanins + nFanouts + p->nFanioPlus; |
| return pObj; |
| } |
| |
| |
| /**Function************************************************************* |
| |
| Synopsis [Creates a primary input.] |
| |
| Description [] |
| |
| SideEffects [] |
| |
| SeeAlso [] |
| |
| ***********************************************************************/ |
| Nwk_Obj_t * Nwk_ManCreateCi( Nwk_Man_t * p, int nFanouts ) |
| { |
| Nwk_Obj_t * pObj; |
| pObj = Nwk_ManCreateObj( p, 1, nFanouts ); |
| pObj->PioId = Vec_PtrSize( p->vCis ); |
| Vec_PtrPush( p->vCis, pObj ); |
| pObj->Type = NWK_OBJ_CI; |
| p->nObjs[NWK_OBJ_CI]++; |
| return pObj; |
| } |
| |
| /**Function************************************************************* |
| |
| Synopsis [Creates a primary output.] |
| |
| Description [] |
| |
| SideEffects [] |
| |
| SeeAlso [] |
| |
| ***********************************************************************/ |
| Nwk_Obj_t * Nwk_ManCreateCo( Nwk_Man_t * p ) |
| { |
| Nwk_Obj_t * pObj; |
| pObj = Nwk_ManCreateObj( p, 1, 1 ); |
| pObj->PioId = Vec_PtrSize( p->vCos ); |
| Vec_PtrPush( p->vCos, pObj ); |
| pObj->Type = NWK_OBJ_CO; |
| p->nObjs[NWK_OBJ_CO]++; |
| return pObj; |
| } |
| |
| /**Function************************************************************* |
| |
| Synopsis [Creates a latch.] |
| |
| Description [] |
| |
| SideEffects [] |
| |
| SeeAlso [] |
| |
| ***********************************************************************/ |
| Nwk_Obj_t * Nwk_ManCreateLatch( Nwk_Man_t * p ) |
| { |
| Nwk_Obj_t * pObj; |
| pObj = Nwk_ManCreateObj( p, 1, 1 ); |
| pObj->Type = NWK_OBJ_LATCH; |
| p->nObjs[NWK_OBJ_LATCH]++; |
| return pObj; |
| } |
| |
| /**Function************************************************************* |
| |
| Synopsis [Creates a node.] |
| |
| Description [] |
| |
| SideEffects [] |
| |
| SeeAlso [] |
| |
| ***********************************************************************/ |
| Nwk_Obj_t * Nwk_ManCreateNode( Nwk_Man_t * p, int nFanins, int nFanouts ) |
| { |
| Nwk_Obj_t * pObj; |
| pObj = Nwk_ManCreateObj( p, nFanins, nFanouts ); |
| pObj->Type = NWK_OBJ_NODE; |
| p->nObjs[NWK_OBJ_NODE]++; |
| return pObj; |
| } |
| |
| |
| /**Function************************************************************* |
| |
| Synopsis [Deletes the node.] |
| |
| Description [] |
| |
| SideEffects [] |
| |
| SeeAlso [] |
| |
| ***********************************************************************/ |
| void Nwk_ManDeleteNode( Nwk_Obj_t * pObj ) |
| { |
| Vec_Ptr_t * vNodes = pObj->pMan->vTemp; |
| Nwk_Obj_t * pTemp; |
| int i; |
| assert( Nwk_ObjFanoutNum(pObj) == 0 ); |
| // delete fanins |
| Nwk_ObjCollectFanins( pObj, vNodes ); |
| Vec_PtrForEachEntry( Nwk_Obj_t *, vNodes, pTemp, i ) |
| Nwk_ObjDeleteFanin( pObj, pTemp ); |
| // remove from the list of objects |
| Vec_PtrWriteEntry( pObj->pMan->vObjs, pObj->Id, NULL ); |
| pObj->pMan->nObjs[pObj->Type]--; |
| memset( pObj, 0, sizeof(Nwk_Obj_t) ); |
| pObj->Id = -1; |
| } |
| |
| /**Function************************************************************* |
| |
| Synopsis [Deletes the node and MFFC of the node.] |
| |
| Description [] |
| |
| SideEffects [] |
| |
| SeeAlso [] |
| |
| ***********************************************************************/ |
| void Nwk_ManDeleteNode_rec( Nwk_Obj_t * pObj ) |
| { |
| Vec_Ptr_t * vNodes; |
| int i; |
| assert( !Nwk_ObjIsCi(pObj) ); |
| assert( Nwk_ObjFanoutNum(pObj) == 0 ); |
| vNodes = Vec_PtrAlloc( 100 ); |
| Nwk_ObjCollectFanins( pObj, vNodes ); |
| Nwk_ManDeleteNode( pObj ); |
| Vec_PtrForEachEntry( Nwk_Obj_t *, vNodes, pObj, i ) |
| if ( Nwk_ObjIsNode(pObj) && Nwk_ObjFanoutNum(pObj) == 0 ) |
| Nwk_ManDeleteNode_rec( pObj ); |
| Vec_PtrFree( vNodes ); |
| } |
| |
| //////////////////////////////////////////////////////////////////////// |
| /// END OF FILE /// |
| //////////////////////////////////////////////////////////////////////// |
| |
| |
| ABC_NAMESPACE_IMPL_END |
| |