@ -548,9 +548,9 @@ struct IMGUI_API ImRect
bool IsInverted ( ) const { return Min . x > Max . x | | Min . y > Max . y ; }
ImVec4 ToVec4 ( ) const { return ImVec4 ( Min . x , Min . y , Max . x , Max . y ) ; }
} ;
IM_MSVC_RUNTIME_CHECKS_RESTORE
// Helper: ImBitArray
# define IM_BITARRAY_TESTBIT(_ARRAY, _N) ((_ARRAY[(_N) >> 5] & ((ImU32)1 << ((_N) & 31))) != 0) // Macro version of ImBitArrayTestBit(): ensure args have side-effect or are costly!
inline bool ImBitArrayTestBit ( const ImU32 * arr , int n ) { ImU32 mask = ( ImU32 ) 1 < < ( n & 31 ) ; return ( arr [ n > > 5 ] & mask ) ! = 0 ; }
inline void ImBitArrayClearBit ( ImU32 * arr , int n ) { ImU32 mask = ( ImU32 ) 1 < < ( n & 31 ) ; arr [ n > > 5 ] & = ~ mask ; }
inline void ImBitArraySetBit ( ImU32 * arr , int n ) { ImU32 mask = ( ImU32 ) 1 < < ( n & 31 ) ; arr [ n > > 5 ] | = mask ; }
@ -576,11 +576,11 @@ struct ImBitArray
ImBitArray ( ) { ClearAllBits ( ) ; }
void ClearAllBits ( ) { memset ( Storage , 0 , sizeof ( Storage ) ) ; }
void SetAllBits ( ) { memset ( Storage , 255 , sizeof ( Storage ) ) ; }
bool TestBit ( int n ) const { n + = OFFSET ; IM_ASSERT ( n > = 0 & & n < BITCOUNT ) ; return ImBitArrayTestBit ( Storage , n ) ; }
bool TestBit ( int n ) const { n + = OFFSET ; IM_ASSERT ( n > = 0 & & n < BITCOUNT ) ; return IM_BITARRAY_TESTBIT ( Storage , n ) ; }
void SetBit ( int n ) { n + = OFFSET ; IM_ASSERT ( n > = 0 & & n < BITCOUNT ) ; ImBitArraySetBit ( Storage , n ) ; }
void ClearBit ( int n ) { n + = OFFSET ; IM_ASSERT ( n > = 0 & & n < BITCOUNT ) ; ImBitArrayClearBit ( Storage , n ) ; }
void SetBitRange ( int n , int n2 ) { n + = OFFSET ; n2 + = OFFSET ; IM_ASSERT ( n > = 0 & & n < BITCOUNT & & n2 > n & & n2 < = BITCOUNT ) ; ImBitArraySetBitRange ( Storage , n , n2 ) ; } // Works on range [n..n2)
bool operator [ ] ( int n ) const { n + = OFFSET ; IM_ASSERT ( n > = 0 & & n < BITCOUNT ) ; return ImBitArrayTestBit ( Storage , n ) ; }
bool operator [ ] ( int n ) const { n + = OFFSET ; IM_ASSERT ( n > = 0 & & n < BITCOUNT ) ; return IM_BITARRAY_TESTBIT ( Storage , n ) ; }
} ;
// Helper: ImBitVector
@ -590,10 +590,11 @@ struct IMGUI_API ImBitVector
ImVector < ImU32 > Storage ;
void Create ( int sz ) { Storage . resize ( ( sz + 31 ) > > 5 ) ; memset ( Storage . Data , 0 , ( size_t ) Storage . Size * sizeof ( Storage . Data [ 0 ] ) ) ; }
void Clear ( ) { Storage . clear ( ) ; }
bool TestBit ( int n ) const { IM_ASSERT ( n < ( Storage . Size < < 5 ) ) ; return ImBitArrayTestBit ( Storage . Data , n ) ; }
bool TestBit ( int n ) const { IM_ASSERT ( n < ( Storage . Size < < 5 ) ) ; return IM_BITARRAY_TESTBIT ( Storage . Data , n ) ; }
void SetBit ( int n ) { IM_ASSERT ( n < ( Storage . Size < < 5 ) ) ; ImBitArraySetBit ( Storage . Data , n ) ; }
void ClearBit ( int n ) { IM_ASSERT ( n < ( Storage . Size < < 5 ) ) ; ImBitArrayClearBit ( Storage . Data , n ) ; }
} ;
IM_MSVC_RUNTIME_CHECKS_RESTORE
// Helper: ImSpan<>
// Pointing to a span of data we don't own.