00001
00021 #include "cutInt.h"
00022
00026
00030
00042 Cut_Cut_t * Cut_NodeReadCutsNew( Cut_Man_t * p, int Node )
00043 {
00044 if ( Node >= p->vCutsNew->nSize )
00045 return NULL;
00046 return Vec_PtrEntry( p->vCutsNew, Node );
00047 }
00048
00060 Cut_Cut_t * Cut_NodeReadCutsOld( Cut_Man_t * p, int Node )
00061 {
00062 assert( Node < p->vCutsOld->nSize );
00063 return Vec_PtrEntry( p->vCutsOld, Node );
00064 }
00065
00077 Cut_Cut_t * Cut_NodeReadCutsTemp( Cut_Man_t * p, int Node )
00078 {
00079 assert( Node < p->vCutsTemp->nSize );
00080 return Vec_PtrEntry( p->vCutsTemp, Node );
00081 }
00082
00094 void Cut_NodeWriteCutsNew( Cut_Man_t * p, int Node, Cut_Cut_t * pList )
00095 {
00096 Vec_PtrWriteEntry( p->vCutsNew, Node, pList );
00097 }
00098
00110 void Cut_NodeWriteCutsOld( Cut_Man_t * p, int Node, Cut_Cut_t * pList )
00111 {
00112 Vec_PtrWriteEntry( p->vCutsOld, Node, pList );
00113 }
00114
00126 void Cut_NodeWriteCutsTemp( Cut_Man_t * p, int Node, Cut_Cut_t * pList )
00127 {
00128 Vec_PtrWriteEntry( p->vCutsTemp, Node, pList );
00129 }
00130
00142 void Cut_NodeSetTriv( Cut_Man_t * p, int Node )
00143 {
00144 assert( Cut_NodeReadCutsNew(p, Node) == NULL );
00145 Cut_NodeWriteCutsNew( p, Node, Cut_CutCreateTriv(p, Node) );
00146 }
00147
00159 void Cut_NodeTryDroppingCuts( Cut_Man_t * p, int Node )
00160 {
00161 int nFanouts;
00162 assert( p->vFanCounts );
00163 nFanouts = Vec_IntEntry( p->vFanCounts, Node );
00164 assert( nFanouts > 0 );
00165 if ( --nFanouts == 0 )
00166 Cut_NodeFreeCuts( p, Node );
00167 Vec_IntWriteEntry( p->vFanCounts, Node, nFanouts );
00168 }
00169
00181 void Cut_NodeFreeCuts( Cut_Man_t * p, int Node )
00182 {
00183 Cut_Cut_t * pList, * pCut, * pCut2;
00184 pList = Cut_NodeReadCutsNew( p, Node );
00185 if ( pList == NULL )
00186 return;
00187 Cut_ListForEachCutSafe( pList, pCut, pCut2 )
00188 Cut_CutRecycle( p, pCut );
00189 Cut_NodeWriteCutsNew( p, Node, NULL );
00190 }
00191
00192
00196
00197