diff options
Diffstat (limited to 'src/abc8/aig/aigFanout.c')
-rw-r--r-- | src/abc8/aig/aigFanout.c | 189 |
1 files changed, 0 insertions, 189 deletions
diff --git a/src/abc8/aig/aigFanout.c b/src/abc8/aig/aigFanout.c deleted file mode 100644 index d0beb128..00000000 --- a/src/abc8/aig/aigFanout.c +++ /dev/null @@ -1,189 +0,0 @@ -/**CFile**************************************************************** - - FileName [aigFanout.c] - - SystemName [ABC: Logic synthesis and verification system.] - - PackageName [AIG package.] - - Synopsis [Fanout manipulation.] - - Author [Alan Mishchenko] - - Affiliation [UC Berkeley] - - Date [Ver. 1.0. Started - April 28, 2007.] - - Revision [$Id: aigFanout.c,v 1.00 2007/04/28 00:00:00 alanmi Exp $] - -***********************************************************************/ - -#include "aig.h" - -// 0: first iFan -// 1: prev iFan0 -// 2: prev iFan1 -// 3: next iFan0 -// 4: next iFan1 - -//////////////////////////////////////////////////////////////////////// -/// DECLARATIONS /// -//////////////////////////////////////////////////////////////////////// - -static inline int Aig_FanoutCreate( int FanId, int Num ) { assert( Num < 2 ); return (FanId << 1) | Num; } -static inline int * Aig_FanoutObj( int * pData, int ObjId ) { return pData + 5*ObjId; } -static inline int * Aig_FanoutPrev( int * pData, int iFan ) { return pData + 5*(iFan >> 1) + 1 + (iFan & 1); } -static inline int * Aig_FanoutNext( int * pData, int iFan ) { return pData + 5*(iFan >> 1) + 3 + (iFan & 1); } - -//////////////////////////////////////////////////////////////////////// -/// FUNCTION DEFINITIONS /// -//////////////////////////////////////////////////////////////////////// - -/**Function************************************************************* - - Synopsis [Create fanout for all objects in the manager.] - - Description [] - - SideEffects [] - - SeeAlso [] - -***********************************************************************/ -void Aig_ManFanoutStart( Aig_Man_t * p ) -{ - Aig_Obj_t * pObj; - int i; - assert( Aig_ManBufNum(p) == 0 ); - // allocate fanout datastructure - assert( p->pFanData == NULL ); - p->nFansAlloc = 2 * Aig_ManObjNumMax(p); - if ( p->nFansAlloc < (1<<12) ) - p->nFansAlloc = (1<<12); - p->pFanData = ALLOC( int, 5 * p->nFansAlloc ); - memset( p->pFanData, 0, sizeof(int) * 5 * p->nFansAlloc ); - // add fanouts for all objects - Aig_ManForEachObj( p, pObj, i ) - { - if ( Aig_ObjChild0(pObj) ) - Aig_ObjAddFanout( p, Aig_ObjFanin0(pObj), pObj ); - if ( Aig_ObjChild1(pObj) ) - Aig_ObjAddFanout( p, Aig_ObjFanin1(pObj), pObj ); - } -} - -/**Function************************************************************* - - Synopsis [Deletes fanout for all objects in the manager.] - - Description [] - - SideEffects [] - - SeeAlso [] - -***********************************************************************/ -void Aig_ManFanoutStop( Aig_Man_t * p ) -{ - assert( p->pFanData != NULL ); - FREE( p->pFanData ); - p->nFansAlloc = 0; -} - -/**Function************************************************************* - - Synopsis [Adds fanout (pFanout) of node (pObj).] - - Description [] - - SideEffects [] - - SeeAlso [] - -***********************************************************************/ -void Aig_ObjAddFanout( Aig_Man_t * p, Aig_Obj_t * pObj, Aig_Obj_t * pFanout ) -{ - int iFan, * pFirst, * pPrevC, * pNextC, * pPrev, * pNext; - assert( p->pFanData ); - assert( !Aig_IsComplement(pObj) && !Aig_IsComplement(pFanout) ); - assert( pFanout->Id > 0 ); - if ( pObj->Id >= p->nFansAlloc || pFanout->Id >= p->nFansAlloc ) - { - int nFansAlloc = 2 * AIG_MAX( pObj->Id, pFanout->Id ); - p->pFanData = REALLOC( int, p->pFanData, 5 * nFansAlloc ); - memset( p->pFanData + 5 * p->nFansAlloc, 0, sizeof(int) * 5 * (nFansAlloc - p->nFansAlloc) ); - p->nFansAlloc = nFansAlloc; - } - assert( pObj->Id < p->nFansAlloc && pFanout->Id < p->nFansAlloc ); - iFan = Aig_FanoutCreate( pFanout->Id, Aig_ObjWhatFanin(pFanout, pObj) ); - pPrevC = Aig_FanoutPrev( p->pFanData, iFan ); - pNextC = Aig_FanoutNext( p->pFanData, iFan ); - pFirst = Aig_FanoutObj( p->pFanData, pObj->Id ); - if ( *pFirst == 0 ) - { - *pFirst = iFan; - *pPrevC = iFan; - *pNextC = iFan; - } - else - { - pPrev = Aig_FanoutPrev( p->pFanData, *pFirst ); - pNext = Aig_FanoutNext( p->pFanData, *pPrev ); - assert( *pNext == *pFirst ); - *pPrevC = *pPrev; - *pNextC = *pFirst; - *pPrev = iFan; - *pNext = iFan; - } -} - -/**Function************************************************************* - - Synopsis [Removes fanout (pFanout) of node (pObj).] - - Description [] - - SideEffects [] - - SeeAlso [] - -***********************************************************************/ -void Aig_ObjRemoveFanout( Aig_Man_t * p, Aig_Obj_t * pObj, Aig_Obj_t * pFanout ) -{ - int iFan, * pFirst, * pPrevC, * pNextC, * pPrev, * pNext; - assert( p->pFanData && pObj->Id < p->nFansAlloc && pFanout->Id < p->nFansAlloc ); - assert( !Aig_IsComplement(pObj) && !Aig_IsComplement(pFanout) ); - assert( pFanout->Id > 0 ); - iFan = Aig_FanoutCreate( pFanout->Id, Aig_ObjWhatFanin(pFanout, pObj) ); - pPrevC = Aig_FanoutPrev( p->pFanData, iFan ); - pNextC = Aig_FanoutNext( p->pFanData, iFan ); - pPrev = Aig_FanoutPrev( p->pFanData, *pNextC ); - pNext = Aig_FanoutNext( p->pFanData, *pPrevC ); - assert( *pPrev == iFan ); - assert( *pNext == iFan ); - pFirst = Aig_FanoutObj( p->pFanData, pObj->Id ); - assert( *pFirst > 0 ); - if ( *pFirst == iFan ) - { - if ( *pNextC == iFan ) - { - *pFirst = 0; - *pPrev = 0; - *pNext = 0; - *pPrevC = 0; - *pNextC = 0; - return; - } - *pFirst = *pNextC; - } - *pPrev = *pPrevC; - *pNext = *pNextC; - *pPrevC = 0; - *pNextC = 0; -} - -//////////////////////////////////////////////////////////////////////// -/// END OF FILE /// -//////////////////////////////////////////////////////////////////////// - - |