Skip to content

Commit

Permalink
Replace #defines with C++ constants and inline functions in exor.h (
Browse files Browse the repository at this point in the history
#656)

* Remove support for `int` sizes other than 32 bits

No viable platform uses anything other than 32 bits for `int`.

* Replace `#define`s with enum constants and inline functions in `exor.h`

This avoids issues with short/common identifiers like `BPI`
and `DIFFERENT` colliding with identifiers used in other projects.
  • Loading branch information
rocallahan authored Sep 24, 2024
1 parent f263510 commit 51dd6a0
Showing 1 changed file with 28 additions and 32 deletions.
60 changes: 28 additions & 32 deletions lib/abcesop/eabc/exor.h
Original file line number Diff line number Diff line change
Expand Up @@ -55,38 +55,34 @@ namespace abc::exorcism {
/// MACRO DEFINITIONS ///
////////////////////////////////////////////////////////////////////////

// the number of bits per integer (can be 16, 32, 64 - tested for 32)
#define BPI 32
#define BPIMASK 31
#define LOGBPI 5

// the maximum number of input variables
#define MAXVARS 1000

// the number of cubes that are allocated additionally
#define ADDITIONAL_CUBES 33

// the factor showing how many cube pairs will be allocated
#define CUBE_PAIR_FACTOR 20
// the following number of cube pairs are allocated:
// nCubesAlloc/CUBE_PAIR_FACTOR

#if BPI == 64
#define DIFFERENT 0x5555555555555555
#define BIT_COUNT(w) (BitCount[(w)&0xffff] + BitCount[((w)>>16)&0xffff] + BitCount[((w)>>32)&0xffff] + BitCount[(w)>>48])
#elif BPI == 32
#define DIFFERENT 0x55555555
#define BIT_COUNT(w) (BitCount[(w)&0xffff] + BitCount[(w)>>16])
#else
#define DIFFERENT 0x5555
#define BIT_COUNT(w) (BitCount[(w)])
#endif


#define VarWord(element) ((element)>>LOGBPI)
#define VarBit(element) ((element)&BPIMASK)

#define TICKS_TO_SECONDS(time) ((float)(time)/(float)(CLOCKS_PER_SEC))
enum {
// the number of bits per integer
BPI = 32,
BPIMASK = 31,
LOGBPI = 5,

// the maximum number of input variables
MAXVARS = 1000,

// the number of cubes that are allocated additionally
ADDITIONAL_CUBES = 33,

// the factor showing how many cube pairs will be allocated
CUBE_PAIR_FACTOR = 20,
// the following number of cube pairs are allocated:
// nCubesAlloc/CUBE_PAIR_FACTOR

DIFFERENT = 0x55555555,
};

extern unsigned char BitCount[];

static inline int BIT_COUNT(int w) { return BitCount[(w)&0xffff] + BitCount[(w)>>16]; }

static inline int VarWord(int element) { return element>>LOGBPI; }
static inline int VarBit(int element) { return element&BPIMASK; }

static inline float TICKS_TO_SECONDS(abctime time) { return (float)time/(float)CLOCKS_PER_SEC; }

////////////////////////////////////////////////////////////////////////
/// CUBE COVER and CUBE typedefs ///
Expand Down

0 comments on commit 51dd6a0

Please sign in to comment.