SDL 2.0
SDL_bits.h File Reference
#include "SDL_stdinc.h"
#include "begin_code.h"
#include "close_code.h"
+ Include dependency graph for SDL_bits.h:

Go to the source code of this file.

Functions

SDL_FORCE_INLINE int SDL_MostSignificantBitIndex32 (Uint32 x)
 
SDL_FORCE_INLINE SDL_bool SDL_HasExactlyOneBitSet32 (Uint32 x)
 

Detailed Description

CategoryBits

Functions for fiddling with bits and bitmasks.

Definition in file SDL_bits.h.

Function Documentation

◆ SDL_HasExactlyOneBitSet32()

SDL_FORCE_INLINE SDL_bool SDL_HasExactlyOneBitSet32 ( Uint32  x)

Definition at line 116 of file SDL_bits.h.

117{
118 if (x && !(x & (x - 1))) {
119 return SDL_TRUE;
120 }
121 return SDL_FALSE;
122}
@ SDL_TRUE
Definition SDL_stdinc.h:189
@ SDL_FALSE
Definition SDL_stdinc.h:188

References SDL_FALSE, and SDL_TRUE.

◆ SDL_MostSignificantBitIndex32()

SDL_FORCE_INLINE int SDL_MostSignificantBitIndex32 ( Uint32  x)

Get the index of the most significant bit. Result is undefined when called with 0. This operation can also be stated as "count leading zeroes" and "log base 2".

Returns
the index of the most significant bit, or -1 if the value is 0. Use this function to get the index of the most significant (set) bit in a
Parameters
xthe number to find the MSB of.
Returns
the index of the most significant bit of x, or -1 if x is 0.

Definition at line 66 of file SDL_bits.h.

67{
68#if defined(__GNUC__) && (__GNUC__ >= 4 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4))
69 /* Count Leading Zeroes builtin in GCC.
70 * http://gcc.gnu.org/onlinedocs/gcc-4.3.4/gcc/Other-Builtins.html
71 */
72 if (x == 0) {
73 return -1;
74 }
75 return 31 - __builtin_clz(x);
76#elif defined(__WATCOMC__) && defined(__386__)
77 if (x == 0) {
78 return -1;
79 }
80 return _SDL_bsr_watcom(x);
81#elif defined(_MSC_VER)
82 unsigned long index;
83 if (_BitScanReverse(&index, x)) {
84 return index;
85 }
86 return -1;
87#else
88 /* Based off of Bit Twiddling Hacks by Sean Eron Anderson
89 * <seander@cs.stanford.edu>, released in the public domain.
90 * http://graphics.stanford.edu/~seander/bithacks.html#IntegerLog
91 */
92 const Uint32 b[] = {0x2, 0xC, 0xF0, 0xFF00, 0xFFFF0000};
93 const int S[] = {1, 2, 4, 8, 16};
94
95 int msbIndex = 0;
96 int i;
97
98 if (x == 0) {
99 return -1;
100 }
101
102 for (i = 4; i >= 0; i--)
103 {
104 if (x & b[i])
105 {
106 x >>= S[i];
107 msbIndex |= S[i];
108 }
109 }
110
111 return msbIndex;
112#endif
113}
uint32_t Uint32
Definition SDL_stdinc.h:231