/**Function************************************************************* Synopsis [Writing library into file.] Description [] SideEffects [] SeeAlso [] ***********************************************************************/ static void Abc_SclWriteSurface( Vec_Str_t * vOut, SC_Surface * p ) { Vec_Flt_t * vVec; float Entry; int i, k; Vec_StrPutI( vOut, Vec_FltSize(p->vIndex0) ); Vec_FltForEachEntry( p->vIndex0, Entry, i ) Vec_StrPutF( vOut, Entry ); Vec_StrPutI( vOut, Vec_FltSize(p->vIndex1) ); Vec_FltForEachEntry( p->vIndex1, Entry, i ) Vec_StrPutF( vOut, Entry ); Vec_PtrForEachEntry( Vec_Flt_t *, p->vData, vVec, i ) Vec_FltForEachEntry( vVec, Entry, k ) Vec_StrPutF( vOut, Entry ); for ( i = 0; i < 3; i++ ) Vec_StrPutF( vOut, p->approx[0][i] ); for ( i = 0; i < 4; i++ ) Vec_StrPutF( vOut, p->approx[1][i] ); for ( i = 0; i < 6; i++ ) Vec_StrPutF( vOut, p->approx[2][i] ); }
/**Function************************************************************* Synopsis [Reading library from file.] Description [] SideEffects [] SeeAlso [] ***********************************************************************/ static void Abc_SclReadSurface( Vec_Str_t * vOut, int * pPos, SC_Surface * p ) { Vec_Flt_t * vVec; int i, j; for ( i = Vec_StrGetI(vOut, pPos); i != 0; i-- ) Vec_FltPush( p->vIndex0, Vec_StrGetF(vOut, pPos) ); for ( i = Vec_StrGetI(vOut, pPos); i != 0; i-- ) Vec_FltPush( p->vIndex1, Vec_StrGetF(vOut, pPos) ); for ( i = 0; i < Vec_FltSize(p->vIndex0); i++ ) { vVec = Vec_FltAlloc( Vec_FltSize(p->vIndex1) ); Vec_PtrPush( p->vData, vVec ); for ( j = 0; j < Vec_FltSize(p->vIndex1); j++ ) Vec_FltPush( vVec, Vec_StrGetF(vOut, pPos) ); } for ( i = 0; i < 3; i++ ) p->approx[0][i] = Vec_StrGetF( vOut, pPos ); for ( i = 0; i < 4; i++ ) p->approx[1][i] = Vec_StrGetF( vOut, pPos ); for ( i = 0; i < 6; i++ ) p->approx[2][i] = Vec_StrGetF( vOut, pPos ); }
SC_LibForEachWireLoadSel( p, pWLS, i ) { Vec_StrPutS( vOut, pWLS->pName ); Vec_StrPutI( vOut, Vec_FltSize(pWLS->vAreaFrom) ); for ( j = 0; j < Vec_FltSize(pWLS->vAreaFrom); j++) { Vec_StrPutF( vOut, Vec_FltEntry(pWLS->vAreaFrom, j) ); Vec_StrPutF( vOut, Vec_FltEntry(pWLS->vAreaTo, j) ); Vec_StrPutS( vOut, (char *)Vec_PtrEntry(pWLS->vWireLoadModel, j) ); } }
ABC_NAMESPACE_IMPL_START //////////////////////////////////////////////////////////////////////// /// DECLARATIONS /// //////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////// /// FUNCTION DEFINITIONS /// //////////////////////////////////////////////////////////////////////// /**Function************************************************************* Synopsis [Reading library from file.] Description [] SideEffects [] SeeAlso [] ***********************************************************************/ static void Abc_SclReadSurface( Vec_Str_t * vOut, int * pPos, SC_Surface * p ) { Vec_Flt_t * vVec; int i, j; for ( i = Vec_StrGetI(vOut, pPos); i != 0; i-- ) Vec_FltPush( p->vIndex0, Vec_StrGetF(vOut, pPos) ); for ( i = Vec_StrGetI(vOut, pPos); i != 0; i-- ) Vec_FltPush( p->vIndex1, Vec_StrGetF(vOut, pPos) ); for ( i = 0; i < Vec_FltSize(p->vIndex0); i++ ) { vVec = Vec_FltAlloc( Vec_FltSize(p->vIndex1) ); Vec_PtrPush( p->vData, vVec ); for ( j = 0; j < Vec_FltSize(p->vIndex1); j++ ) Vec_FltPush( vVec, Vec_StrGetF(vOut, pPos) ); } for ( i = 0; i < 3; i++ ) p->approx[0][i] = Vec_StrGetF( vOut, pPos ); for ( i = 0; i < 4; i++ ) p->approx[1][i] = Vec_StrGetF( vOut, pPos ); for ( i = 0; i < 6; i++ ) p->approx[2][i] = Vec_StrGetF( vOut, pPos ); }
ABC_NAMESPACE_IMPL_START //////////////////////////////////////////////////////////////////////// /// DECLARATIONS /// //////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////// /// FUNCTION DEFINITIONS /// //////////////////////////////////////////////////////////////////////// /**Function************************************************************* Synopsis [Returns the wireload model for the given area.] Description [] SideEffects [] SeeAlso [] ***********************************************************************/ SC_WireLoad * Abc_SclFindWireLoadModel( SC_Lib * p, float Area ) { SC_WireLoad * pWL = NULL; char * pWLoadUsed = NULL; int i; if ( p->default_wire_load_sel && strlen(p->default_wire_load_sel) ) { SC_WireLoadSel * pWLS = NULL; SC_LibForEachWireLoadSel( p, pWLS, i ) if ( !strcmp(pWLS->pName, p->default_wire_load_sel) ) break; if ( i == Vec_PtrSize(p->vWireLoadSels) ) { Abc_Print( -1, "Cannot find wire load selection model \"%s\".\n", p->default_wire_load_sel ); exit(1); } for ( i = 0; i < Vec_FltSize(pWLS->vAreaFrom); i++) if ( Area >= Vec_FltEntry(pWLS->vAreaFrom, i) && Area < Vec_FltEntry(pWLS->vAreaTo, i) ) { pWLoadUsed = (char *)Vec_PtrEntry(pWLS->vWireLoadModel, i); break; } if ( i == Vec_FltSize(pWLS->vAreaFrom) ) pWLoadUsed = (char *)Vec_PtrEntryLast(pWLS->vWireLoadModel); }