/**CFile**************************************************************** FileName [luckyInt.h] SystemName [ABC: Logic synthesis and verification system.] PackageName [Semi-canonical form computation package.] Synopsis [Internal declarations.] Author [Jake] Date [Started - August 2012] ***********************************************************************/ #ifndef ABC__bool__lucky__LUCKY_INT_H_ #define ABC__bool__lucky__LUCKY_INT_H_ #include #include #include #include #include #include // comment out this line to run Lucky Code outside of ABC #define _RUNNING_ABC_ #ifdef _RUNNING_ABC_ #include "misc/util/abc_global.h" #else #define ABC_NAMESPACE_HEADER_START #define ABC_NAMESPACE_HEADER_END #define ABC_NAMESPACE_IMPL_START #define ABC_NAMESPACE_IMPL_END typedef unsigned __int64 word; #define bool int #define false 0 #define true 1 #define inline __inline // compatible with MS VS 6.0 #define ABC_ALLOC(type, num) ((type *) malloc(sizeof(type) * (num))) #endif ABC_NAMESPACE_HEADER_START typedef struct { int nVars; int nWords; int nFuncs; word ** pFuncs; }Abc_TtStore_t; typedef struct { int direction; int position; } varInfo; typedef struct { varInfo* posArray; int* realArray; int varN; int positionToSwap1; int positionToSwap2; } swapInfo; typedef struct { int varN; int* swapArray; int swapCtr; int totalSwaps; int* flipArray; int flipCtr; int totalFlips; }permInfo; static inline void TimePrint( char* Message ) { static int timeBegin; double time = 1.0*(clock() - timeBegin)/CLOCKS_PER_SEC ; if ( Message != NULL) printf("%s = %f sec.\n", Message, time); timeBegin = clock(); } static word SFmask[5][4] = { {0x8888888888888888,0x4444444444444444,0x2222222222222222,0x1111111111111111}, {0xC0C0C0C0C0C0C0C0,0x3030303030303030,0x0C0C0C0C0C0C0C0C,0x0303030303030303}, {0xF000F000F000F000,0x0F000F000F000F00,0x00F000F000F000F0,0x000F000F000F000F}, {0xFF000000FF000000,0x00FF000000FF0000,0x0000FF000000FF00,0x000000FF000000FF}, {0xFFFF000000000000,0x0000FFFF00000000,0x00000000FFFF0000,0x000000000000FFFF} }; static inline int CompareWords(word x, word y) { if(x>y) return 1; else if(x