1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
| | /**
* _INTERNAL_WORD_H - various word size functions / macros
*/
#ifndef _MYOSIN_WORD_H
#define _MYOSIN_WORD_H
#include <stddef.h>
#include <stdint.h>
/**
* 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 */
|