#ifndef SMAUG_COMMON_H
#define SMAUG_COMMON_H
#define TRUE 1
#define FALSE 0
#define LOWER(c) ((c) >= 'A' && (c) <= 'Z' ? (c)+'a'-'A' : (c))
#define IS_SET(flag, bit) ((flag) & (bit))
typedef int sh_int;
typedef int bool;
typedef struct extended_bitvector EXT_BV;
/*
* Defines for extended bitvectors
*/
#ifndef INTBITS
#define INTBITS 32
#endif
#define XBM 31 /* extended bitmask ( INTBITS - 1 ) */
#define RSV 5 /* right-shift value ( sqrt(XBM+1) ) */
#define XBI 4 /* integers in an extended bitvector */
#define MAX_BITS XBI * INTBITS
/*
* Structure for extended bitvectors -- Thoric
*/
struct extended_bitvector {
unsigned int bits[XBI]; /* Needs to be unsigned to compile in Redhat 6 - Samson */
};
/*
* The functions for these prototypes can be found in misc.c
* They are up here because they are used by the macros below
*/
bool ext_is_empty(EXT_BV *bits);
void ext_clear_bits(EXT_BV *bits);
int ext_has_bits(EXT_BV *var, EXT_BV *bits);
bool ext_same_bits(EXT_BV *var, EXT_BV *bits);
void ext_set_bits(EXT_BV *var, EXT_BV *bits);
void ext_remove_bits(EXT_BV *var, EXT_BV *bits);
void ext_toggle_bits(EXT_BV *var, EXT_BV *bits);
/*
* Here are the extended bitvector macros:
*/
#define xIS_SET(var, bit) ((var).bits[(bit) >> RSV] & 1 << ((bit) & XBM))
#define xSET_BIT(var, bit) ((var).bits[(bit) >> RSV] |= 1 << ((bit) & XBM))
#define xSET_BITS(var, bit) (ext_set_bits(&(var), &(bit)))
#define xREMOVE_BIT(var, bit) ((var).bits[(bit) >> RSV] &= ~(1 << ((bit) & XBM)))
#define xREMOVE_BITS(var, bit) (ext_remove_bits(&(var), &(bit)))
#define xTOGGLE_BIT(var, bit) ((var).bits[(bit) >> RSV] ^= 1 << ((bit) & XBM))
#define xTOGGLE_BITS(var, bit) (ext_toggle_bits(&(var), &(bit)))
#define xCLEAR_BITS(var) (ext_clear_bits(&(var)))
#define xIS_EMPTY(var) (ext_is_empty(&(var)))
#define xHAS_BITS(var, bit) (ext_has_bits(&(var), &(bit)))
#define xSAME_BITS(var, bit) (ext_same_bits(&(var), &(bit)))
/* and boring old ones */
#define IS_SET(flag, bit) ((flag) & (bit))
#define SET_BIT(var, bit) ((var) |= (bit))
#define REMOVE_BIT(var, bit) ((var) &= ~(bit))
#define TOGGLE_BIT(var, bit) ((var) ^= (bit))
#define HAS_SPELL_INDEX -1
#endif