/** * _INTERNAL_WORD_H - various word size functions / macros */ #ifndef _MYOSIN_WORD_H #define _MYOSIN_WORD_H #include #include /** * WORD_LSB_ONE - Set low bit of each byte on arch word size to one. */ #define WORD_LSB_ONE ((size_t)-1 / (unsigned char)-1) /** * WORD_MSB_ONE - Set high bit of each byte on arch word size to one. */ #define WORD_MSB_ONE (WORD_LSB_ONE * ((unsigned char)-1 / 2 + 1)) /** * word_has_zero - Word has a zero character * @w: Word */ static inline char word_has_zero(size_t w) { return !!((w - WORD_LSB_ONE) & (~w & WORD_MSB_ONE)); } /** * word_has_char - Word has a character * @w: Word */ static inline char word_has_char(size_t w, char c) { return !!((w - WORD_LSB_ONE) & ((~w & WORD_MSB_ONE)^(WORD_LSB_ONE * c))); } #endif /* !_INTERNAL_WORD_H */