/**CFile**************************************************************** FileName [xsatUtils.h] SystemName [ABC: Logic synthesis and verification system.] PackageName [xSAT - A SAT solver written in C. Read the license file for more info.] Synopsis [Utility functions used in xSAT] Author [Bruno Schmitt ] Affiliation [UC Berkeley / UFRGS] Date [Ver. 1.0. Started - November 10, 2016.] Revision [] ***********************************************************************/ #ifndef ABC__sat__xSAT__xsatUtils_h #define ABC__sat__xSAT__xsatUtils_h //////////////////////////////////////////////////////////////////////// /// INCLUDES /// //////////////////////////////////////////////////////////////////////// #include "misc/util/abc_global.h" ABC_NAMESPACE_HEADER_START /**Function************************************************************* Synopsis [] Description [] SideEffects [] SeeAlso [] ***********************************************************************/ static inline void xSAT_UtilSelectSort( void** pArray, int nSize, int(* CompFnct )( const void *, const void * ) ) { int i, j, iBest; void* pTmp; for ( i = 0; i < ( nSize - 1 ); i++ ) { iBest = i; for ( j = i + 1; j < nSize; j++ ) { if ( CompFnct( pArray[j], pArray[iBest] ) ) iBest = j; } pTmp = pArray[i]; pArray[i] = pArray[iBest]; pArray[iBest] = pTmp; } } /**Function************************************************************* Synopsis [] Description [] SideEffects [] SeeAlso [] ***********************************************************************/ static void xSAT_UtilSort( void** pArray, int nSize, int(* CompFnct )( const void *, const void *) ) { if ( nSize <= 15 ) xSAT_UtilSelectSort( pArray, nSize, CompFnct ); else { void* pPivot = pArray[nSize / 2]; void* pTmp; int i = -1; int j = nSize; for(;;) { do i++; while( CompFnct( pArray[i], pPivot ) ); do j--; while( CompFnct( pPivot, pArray[j] ) ); if ( i >= j ) break; pTmp = pArray[i]; pArray[i] = pArray[j]; pArray[j] = pTmp; } xSAT_UtilSort( pArray, i, CompFnct ); xSAT_UtilSort( pArray + i, ( nSize - i ), CompFnct ); } } ABC_NAMESPACE_HEADER_END #endif //////////////////////////////////////////////////////////////////////// /// END OF FILE /// ////////////////////////////////////////////////////////////////////////