19#ifndef ABC__opt__fxch__fxch_h
20#define ABC__opt__fxch__fxch_h
147static inline int Fxch_CountOnes(
unsigned num )
149 num = ( num & 0x55555555 ) + ( ( num >> 1) & 0x55555555 );
150 num = ( num & 0x33333333 ) + ( ( num >> 2) & 0x33333333 );
151 num = ( num & 0x0F0F0F0F ) + ( ( num >> 4) & 0x0F0F0F0F );
152 num = ( num & 0x00FF00FF ) + ( ( num >> 8) & 0x00FF00FF );
153 return ( num & 0x0000FFFF ) + ( num >> 16 );
187 return Vec_WecEntry( pFxchMan->
vCubes, iCube );
190static inline int Fxch_ManGetLit(
Fxch_Man_t* pFxchMan,
194 return Vec_IntEntry( Vec_WecEntry(pFxchMan->
vCubes, iCube), iLit );
struct Fxch_SCHashTable_t_ Fxch_SCHashTable_t
int Abc_NtkFxchPerform(Abc_Ntk_t *pNtk, int nMaxDivExt, int fVerbose, int fVeryVerbose)
void Fxch_ManSCHashTablesFree(Fxch_Man_t *pFxchMan)
int Fxch_DivAdd(Fxch_Man_t *pFxchMan, int fUpdate, int fSingleCube, int fBase)
void Fxch_ManMapLiteralsIntoCubes(Fxch_Man_t *pFxchMan, int nVars)
int Fxch_ManComputeLevelDiv(Fxch_Man_t *pFxchMan, Vec_Int_t *vCubeFree)
Fxch_SCHashTable_t * Fxch_SCHashTableCreate(Fxch_Man_t *pFxchMan, int nEntries)
struct Fxch_SubCube_t_ Fxch_SubCube_t
int Fxch_DivRemoveLits(Vec_Int_t *vCube0, Vec_Int_t *vCube1, Vec_Int_t *vDiv, int *fCompl)
void Fxch_ManUpdate(Fxch_Man_t *pFxchMan, int iDiv)
int Fxch_ManComputeLevelCube(Fxch_Man_t *pFxchMan, Vec_Int_t *vCube)
void Fxch_ManDivCreate(Fxch_Man_t *pFxchMan)
Vec_Wec_t * Abc_NtkFxRetrieve(Abc_Ntk_t *pNtk)
FUNCTION DEFINITIONS ///.
int Fxch_DivIsNotConstant1(Vec_Int_t *vDiv)
int Fxch_SCHashTableRemove(Fxch_SCHashTable_t *pSCHashTable, Vec_Wec_t *vCubes, uint32_t SubCubeID, uint32_t iCube, uint32_t iLit0, uint32_t iLit1, char fUpdate)
int Fxch_DivCreate(Fxch_Man_t *pFxchMan, Fxch_SubCube_t *pSubCube0, Fxch_SubCube_t *pSubCube1)
void Fxch_DivSepareteCubes(Vec_Int_t *vDiv, Vec_Int_t *vCube0, Vec_Int_t *vCube1)
Fxch_Man_t * Fxch_ManAlloc(Vec_Wec_t *vCubes)
PUBLIC INTERFACE ///.
int Fxch_FastExtract(Vec_Wec_t *vCubes, int ObjIdMax, int nMaxDivExt, int fVerbose, int fVeryVerbose)
void Fxch_ManPrintStats(Fxch_Man_t *pFxchMan)
void Fxch_ManFree(Fxch_Man_t *pFxchMan)
void Abc_NtkFxInsert(Abc_Ntk_t *pNtk, Vec_Wec_t *vCubes)
void Fxch_ManComputeLevel(Fxch_Man_t *pFxchMan)
void Fxch_SCHashTablePrint(Fxch_SCHashTable_t *)
unsigned int Fxch_SCHashTableMemory(Fxch_SCHashTable_t *)
ABC_NAMESPACE_HEADER_START typedef unsigned char uint8_t
void Fxch_ManPrintDivs(Fxch_Man_t *pFxchMan)
void Fxch_DivPrint(Fxch_Man_t *pFxchMan, int iDiv)
struct Fxch_SCHashTable_Entry_t_ Fxch_SCHashTable_Entry_t
void Fxch_ManSCHashTablesInit(Fxch_Man_t *pFxchMan)
int Fxch_DivRemove(Fxch_Man_t *pFxchMan, int fUpdate, int fSingleCube, int fBase)
void Fxch_ManGenerateLitHashKeys(Fxch_Man_t *pFxchMan)
int Abc_NtkFxCheck(Abc_Ntk_t *pNtk)
void Fxch_SCHashTableDelete(Fxch_SCHashTable_t *)
int Fxch_SCHashTableInsert(Fxch_SCHashTable_t *pSCHashTable, Vec_Wec_t *vCubes, uint32_t SubCubeID, uint32_t iCube, uint32_t iLit0, uint32_t iLit1, char fUpdate)
struct Abc_Ntk_t_ Abc_Ntk_t
#define ABC_NAMESPACE_HEADER_END
#define ABC_NAMESPACE_HEADER_START
NAMESPACES ///.
typedefABC_NAMESPACE_IMPL_START struct Vec_Int_t_ Vec_Int_t
DECLARATIONS ///.
struct Fxch_Man_t_ Fxch_Man_t
TYPEDEF DECLARATIONS ///.
Vec_Int_t * vCubesToUpdate
Vec_Int_t * vCubesToRemove
Fxch_SCHashTable_t * pSCHashTable
Vec_Wec_t * vDivCubePairs
Fxch_SCHashTable_Entry_t * pBins
STRUCTURES DEFINITIONS ///.
typedefABC_NAMESPACE_HEADER_START struct Vec_Flt_t_ Vec_Flt_t
INCLUDES ///.
struct Hsh_VecMan_t_ Hsh_VecMan_t
typedefABC_NAMESPACE_HEADER_START struct Vec_Que_t_ Vec_Que_t
INCLUDES ///.
typedefABC_NAMESPACE_HEADER_START struct Vec_Wec_t_ Vec_Wec_t
INCLUDES ///.