29#ifndef ABC__misc__extra__extra_h
30#define ABC__misc__extra__extra_h
34#define inline __inline
101extern char *
Extra_FileGetSimilarName(
char * pFileNameWrong,
char * pS1,
char * pS2,
char * pS3,
char * pS4,
char * pS5 );
117extern int Extra_FileIsType(
char * pFileName,
char * pS1,
char * pS2,
char * pS3 );
124extern int Extra_ReadHex(
unsigned Sign[],
char * pString,
int nDigits );
128extern void Extra_PrintHex( FILE * pFile,
unsigned * pTruth,
int nVars );
129extern void Extra_PrintHex2( FILE * pFile,
unsigned * pTruth,
int nVars );
137 char * pCharsComment,
char * pCharsStop,
char * pCharsClean );
198extern void Extra_Truth4VarNPN(
unsigned short ** puCanons,
char ** puPhases,
char ** puPerms,
unsigned char ** puMap );
199extern void Extra_Truth4VarN(
unsigned short ** puCanons,
char *** puPhases,
char ** ppCounters,
int nPhasesMax );
204extern void Extra_TruthExpand(
int nVars,
int nWords,
unsigned * puTruth,
unsigned uPhase,
unsigned * puTruthR );
211extern void Extra_BubbleSort(
int Order[],
int Costs[],
int nSize,
int fIncreasing );
221extern int Extra_TruthCanonFastN(
int nVarsMax,
int nVarsReal,
unsigned * pt,
unsigned ** pptRes,
char ** ppfRes );
246static inline void Extra_ProgressBarUpdate(
ProgressBar *
p,
int nItemsCur,
char * pString )
251static inline int Extra_BitWordNum(
int nBits ) {
return nBits/(8*
sizeof(unsigned)) + ((nBits%(8*
sizeof(
unsigned))) > 0); }
252static inline int Extra_TruthWordNum(
int nVars ) {
return nVars <= 5 ? 1 : (1 << (nVars - 5)); }
254static inline void Extra_TruthSetBit(
unsigned *
p,
int Bit ) {
p[Bit>>5] |= (unsigned)(1<<(Bit & 31)); }
255static inline void Extra_TruthXorBit(
unsigned *
p,
int Bit ) {
p[Bit>>5] ^= (unsigned)(1<<(Bit & 31)); }
256static inline int Extra_TruthHasBit(
unsigned *
p,
int Bit ) {
return (
p[Bit>>5] & (
unsigned)(1<<(Bit & 31))) > 0; }
258static inline int Extra_WordCountOnes(
unsigned uWord )
260 uWord = (uWord & 0x55555555) + ((uWord>>1) & 0x55555555);
261 uWord = (uWord & 0x33333333) + ((uWord>>2) & 0x33333333);
262 uWord = (uWord & 0x0F0F0F0F) + ((uWord>>4) & 0x0F0F0F0F);
263 uWord = (uWord & 0x00FF00FF) + ((uWord>>8) & 0x00FF00FF);
264 return (uWord & 0x0000FFFF) + (uWord>>16);
266static inline int Extra_TruthCountOnes(
unsigned * pIn,
int nVars )
269 for ( w = Extra_TruthWordNum(nVars)-1; w >= 0; w-- )
270 Counter += Extra_WordCountOnes(pIn[w]);
273static inline int Extra_TruthIsEqual(
unsigned * pIn0,
unsigned * pIn1,
int nVars )
276 for ( w = Extra_TruthWordNum(nVars)-1; w >= 0; w-- )
277 if ( pIn0[w] != pIn1[w] )
281static inline int Extra_TruthIsConst0(
unsigned * pIn,
int nVars )
284 for ( w = Extra_TruthWordNum(nVars)-1; w >= 0; w-- )
289static inline int Extra_TruthIsConst1(
unsigned * pIn,
int nVars )
292 for ( w = Extra_TruthWordNum(nVars)-1; w >= 0; w-- )
293 if ( pIn[w] != ~(
unsigned)0 )
297static inline int Extra_TruthIsImply(
unsigned * pIn1,
unsigned * pIn2,
int nVars )
300 for ( w = Extra_TruthWordNum(nVars)-1; w >= 0; w-- )
301 if ( pIn1[w] & ~pIn2[w] )
305static inline void Extra_TruthCopy(
unsigned * pOut,
unsigned * pIn,
int nVars )
308 for ( w = Extra_TruthWordNum(nVars)-1; w >= 0; w-- )
311static inline void Extra_TruthClear(
unsigned * pOut,
int nVars )
314 for ( w = Extra_TruthWordNum(nVars)-1; w >= 0; w-- )
317static inline void Extra_TruthFill(
unsigned * pOut,
int nVars )
320 for ( w = Extra_TruthWordNum(nVars)-1; w >= 0; w-- )
321 pOut[w] = ~(
unsigned)0;
323static inline void Extra_TruthNot(
unsigned * pOut,
unsigned * pIn,
int nVars )
326 for ( w = Extra_TruthWordNum(nVars)-1; w >= 0; w-- )
329static inline void Extra_TruthAnd(
unsigned * pOut,
unsigned * pIn0,
unsigned * pIn1,
int nVars )
332 for ( w = Extra_TruthWordNum(nVars)-1; w >= 0; w-- )
333 pOut[w] = pIn0[w] & pIn1[w];
335static inline void Extra_TruthOr(
unsigned * pOut,
unsigned * pIn0,
unsigned * pIn1,
int nVars )
338 for ( w = Extra_TruthWordNum(nVars)-1; w >= 0; w-- )
339 pOut[w] = pIn0[w] | pIn1[w];
341static inline void Extra_TruthSharp(
unsigned * pOut,
unsigned * pIn0,
unsigned * pIn1,
int nVars )
344 for ( w = Extra_TruthWordNum(nVars)-1; w >= 0; w-- )
345 pOut[w] = pIn0[w] & ~pIn1[w];
347static inline void Extra_TruthNand(
unsigned * pOut,
unsigned * pIn0,
unsigned * pIn1,
int nVars )
350 for ( w = Extra_TruthWordNum(nVars)-1; w >= 0; w-- )
351 pOut[w] = ~(pIn0[w] & pIn1[w]);
353static inline void Extra_TruthAndPhase(
unsigned * pOut,
unsigned * pIn0,
unsigned * pIn1,
int nVars,
int fCompl0,
int fCompl1 )
356 if ( fCompl0 && fCompl1 )
358 for ( w = Extra_TruthWordNum(nVars)-1; w >= 0; w-- )
359 pOut[w] = ~(pIn0[w] | pIn1[w]);
361 else if ( fCompl0 && !fCompl1 )
363 for ( w = Extra_TruthWordNum(nVars)-1; w >= 0; w-- )
364 pOut[w] = ~pIn0[w] & pIn1[w];
366 else if ( !fCompl0 && fCompl1 )
368 for ( w = Extra_TruthWordNum(nVars)-1; w >= 0; w-- )
369 pOut[w] = pIn0[w] & ~pIn1[w];
373 for ( w = Extra_TruthWordNum(nVars)-1; w >= 0; w-- )
374 pOut[w] = pIn0[w] & pIn1[w];
380extern void Extra_TruthStretch(
unsigned * pOut,
unsigned * pIn,
int nVars,
int nVarsAll,
unsigned Phase );
381extern void Extra_TruthShrink(
unsigned * pOut,
unsigned * pIn,
int nVars,
int nVarsAll,
unsigned Phase );
389extern void Extra_TruthMux(
unsigned * pOut,
unsigned * pCof0,
unsigned * pCof1,
int nVars,
int iVar );
394extern unsigned Extra_TruthSemiCanonicize(
unsigned * pInOut,
unsigned * pAux,
int nVars,
char * pCanonPerm,
short * pStore );
402extern int Extra_UtilGetopt(
int argc,
char *argv[],
const char *optstring );
#define ABC_NAMESPACE_HEADER_END
#define ABC_NAMESPACE_HEADER_START
NAMESPACES ///.
ABC_NAMESPACE_IMPL_START typedef char ProgressBar
unsigned __int64 word
DECLARATIONS ///.