Blender  V3.3
Macros | Typedefs | Functions
BLI_bitmap.h File Reference
#include "BLI_utildefines.h"

Go to the source code of this file.

Macros

#define _BITMAP_POWER   5
 
#define _BITMAP_MASK   31
 
#define _BITMAP_NUM_BLOCKS(_num)   (((_num) + _BITMAP_MASK) >> _BITMAP_POWER)
 
#define BLI_BITMAP_SIZE(_num)   ((size_t)(_BITMAP_NUM_BLOCKS(_num)) * sizeof(BLI_bitmap))
 
#define BLI_BITMAP_NEW(_num, _alloc_string)    ((BLI_bitmap *)MEM_callocN(BLI_BITMAP_SIZE(_num), _alloc_string))
 
#define BLI_BITMAP_NEW_ALLOCA(_num)    ((BLI_bitmap *)memset(alloca(BLI_BITMAP_SIZE(_num)), 0, BLI_BITMAP_SIZE(_num)))
 
#define BLI_BITMAP_NEW_MEMARENA(_mem, _num)
 
#define BLI_BITMAP_DECLARE(_name, _num)   BLI_bitmap _name[_BITMAP_NUM_BLOCKS(_num)] = {}
 
#define BLI_BITMAP_TEST(_bitmap, _index)
 
#define BLI_BITMAP_TEST_AND_SET_ATOMIC(_bitmap, _index)
 
#define BLI_BITMAP_TEST_BOOL(_bitmap, _index)
 
#define BLI_BITMAP_ENABLE(_bitmap, _index)
 
#define BLI_BITMAP_DISABLE(_bitmap, _index)
 
#define BLI_BITMAP_FLIP(_bitmap, _index)
 
#define BLI_BITMAP_SET(_bitmap, _index, _set)
 
#define BLI_BITMAP_RESIZE(_bitmap, _num)
 

Typedefs

typedef unsigned int BLI_bitmap
 

Functions

void BLI_bitmap_set_all (BLI_bitmap *bitmap, bool set, size_t bits)
 
void BLI_bitmap_flip_all (BLI_bitmap *bitmap, size_t bits)
 
void BLI_bitmap_copy_all (BLI_bitmap *dst, const BLI_bitmap *src, size_t bits)
 
void BLI_bitmap_and_all (BLI_bitmap *dst, const BLI_bitmap *src, size_t bits)
 
void BLI_bitmap_or_all (BLI_bitmap *dst, const BLI_bitmap *src, size_t bits)
 
int BLI_bitmap_find_first_unset (const BLI_bitmap *bitmap, size_t bits)
 

Macro Definition Documentation

◆ _BITMAP_MASK

#define _BITMAP_MASK   31

Definition at line 25 of file BLI_bitmap.h.

◆ _BITMAP_NUM_BLOCKS

#define _BITMAP_NUM_BLOCKS (   _num)    (((_num) + _BITMAP_MASK) >> _BITMAP_POWER)

Number of blocks needed to hold '_num' bits.

Definition at line 30 of file BLI_bitmap.h.

◆ _BITMAP_POWER

#define _BITMAP_POWER   5

Definition at line 23 of file BLI_bitmap.h.

◆ BLI_BITMAP_DECLARE

#define BLI_BITMAP_DECLARE (   _name,
  _num 
)    BLI_bitmap _name[_BITMAP_NUM_BLOCKS(_num)] = {}

Declares a bitmap as a variable.

Definition at line 59 of file BLI_bitmap.h.

◆ BLI_BITMAP_DISABLE

#define BLI_BITMAP_DISABLE (   _bitmap,
  _index 
)
Value:
(CHECK_TYPE_ANY(_bitmap, BLI_bitmap *, const BLI_bitmap *), \
((_bitmap)[(_index) >> _BITMAP_POWER] &= ~(1u << ((_index)&_BITMAP_MASK))))
#define _BITMAP_POWER
Definition: BLI_bitmap.h:23
#define _BITMAP_MASK
Definition: BLI_bitmap.h:25
unsigned int BLI_bitmap
Definition: BLI_bitmap.h:16
#define CHECK_TYPE_ANY(...)

Clear the value of a single bit at '_index'.

Definition at line 88 of file BLI_bitmap.h.

◆ BLI_BITMAP_ENABLE

#define BLI_BITMAP_ENABLE (   _bitmap,
  _index 
)
Value:
(CHECK_TYPE_ANY(_bitmap, BLI_bitmap *, const BLI_bitmap *), \
((_bitmap)[(_index) >> _BITMAP_POWER] |= (1u << ((_index)&_BITMAP_MASK))))

Set the value of a single bit at '_index'.

Definition at line 81 of file BLI_bitmap.h.

◆ BLI_BITMAP_FLIP

#define BLI_BITMAP_FLIP (   _bitmap,
  _index 
)
Value:
(CHECK_TYPE_ANY(_bitmap, BLI_bitmap *, const BLI_bitmap *), \
((_bitmap)[(_index) >> _BITMAP_POWER] ^= (1u << ((_index)&_BITMAP_MASK))))

Flip the value of a single bit at '_index'.

Definition at line 95 of file BLI_bitmap.h.

◆ BLI_BITMAP_NEW

#define BLI_BITMAP_NEW (   _num,
  _alloc_string 
)     ((BLI_bitmap *)MEM_callocN(BLI_BITMAP_SIZE(_num), _alloc_string))

Allocate memory for a bitmap with '_num' bits; free with MEM_freeN().

Definition at line 40 of file BLI_bitmap.h.

◆ BLI_BITMAP_NEW_ALLOCA

#define BLI_BITMAP_NEW_ALLOCA (   _num)     ((BLI_bitmap *)memset(alloca(BLI_BITMAP_SIZE(_num)), 0, BLI_BITMAP_SIZE(_num)))

Allocate a bitmap on the stack.

Definition at line 46 of file BLI_bitmap.h.

◆ BLI_BITMAP_NEW_MEMARENA

#define BLI_BITMAP_NEW_MEMARENA (   _mem,
  _num 
)
Value:
#define BLI_BITMAP_SIZE(_num)
Definition: BLI_bitmap.h:35
#define CHECK_TYPE_INLINE(val, type)
void * BLI_memarena_calloc(struct MemArena *ma, size_t size) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1) ATTR_MALLOC ATTR_ALLOC_SIZE(2)
Definition: BLI_memarena.c:153

Allocate using given MemArena.

Definition at line 52 of file BLI_bitmap.h.

◆ BLI_BITMAP_RESIZE

#define BLI_BITMAP_RESIZE (   _bitmap,
  _num 
)
Value:
{ \
CHECK_TYPE(_bitmap, BLI_bitmap *); \
(_bitmap) = MEM_recallocN(_bitmap, BLI_BITMAP_SIZE(_num)); \
} \
(void)0
#define MEM_recallocN(vmemh, len)
SyclQueue void void size_t num_bytes void

Resize bitmap to have space for '_num' bits.

Definition at line 117 of file BLI_bitmap.h.

◆ BLI_BITMAP_SET

#define BLI_BITMAP_SET (   _bitmap,
  _index,
  _set 
)
Value:
{ \
CHECK_TYPE(_bitmap, BLI_bitmap *); \
if (_set) { \
BLI_BITMAP_ENABLE(_bitmap, _index); \
} \
else { \
BLI_BITMAP_DISABLE(_bitmap, _index); \
} \
} \
(void)0

Set or clear the value of a single bit at '_index'.

Definition at line 102 of file BLI_bitmap.h.

◆ BLI_BITMAP_SIZE

#define BLI_BITMAP_SIZE (   _num)    ((size_t)(_BITMAP_NUM_BLOCKS(_num)) * sizeof(BLI_bitmap))

Size (in bytes) used to hold '_num' bits.

Definition at line 35 of file BLI_bitmap.h.

◆ BLI_BITMAP_TEST

#define BLI_BITMAP_TEST (   _bitmap,
  _index 
)
Value:
(CHECK_TYPE_ANY(_bitmap, BLI_bitmap *, const BLI_bitmap *), \
((_bitmap)[(_index) >> _BITMAP_POWER] & (1u << ((_index)&_BITMAP_MASK))))

Get the value of a single bit at '_index'.

Definition at line 64 of file BLI_bitmap.h.

◆ BLI_BITMAP_TEST_AND_SET_ATOMIC

#define BLI_BITMAP_TEST_AND_SET_ATOMIC (   _bitmap,
  _index 
)
Value:
(CHECK_TYPE_ANY(_bitmap, BLI_bitmap *, const BLI_bitmap *), \
(atomic_fetch_and_or_uint32((uint32_t *)&(_bitmap)[(_index) >> _BITMAP_POWER], \
(1u << ((_index)&_BITMAP_MASK))) & \
(1u << ((_index)&_BITMAP_MASK))))
ATOMIC_INLINE uint32_t atomic_fetch_and_or_uint32(uint32_t *p, uint32_t x)
unsigned int uint32_t
Definition: stdint.h:80

Definition at line 68 of file BLI_bitmap.h.

◆ BLI_BITMAP_TEST_BOOL

#define BLI_BITMAP_TEST_BOOL (   _bitmap,
  _index 
)
Value:
(CHECK_TYPE_ANY(_bitmap, BLI_bitmap *, const BLI_bitmap *), \
(BLI_BITMAP_TEST(_bitmap, _index) != 0))
#define BLI_BITMAP_TEST(_bitmap, _index)
Definition: BLI_bitmap.h:64

Definition at line 74 of file BLI_bitmap.h.

Typedef Documentation

◆ BLI_bitmap

typedef unsigned int BLI_bitmap

Definition at line 16 of file BLI_bitmap.h.

Function Documentation

◆ BLI_bitmap_and_all()

void BLI_bitmap_and_all ( BLI_bitmap dst,
const BLI_bitmap src,
size_t  bits 
)

Combine two bitmaps with boolean AND.

Definition at line 35 of file bitmap.c.

References _BITMAP_NUM_BLOCKS, and src.

◆ BLI_bitmap_copy_all()

void BLI_bitmap_copy_all ( BLI_bitmap dst,
const BLI_bitmap src,
size_t  bits 
)

Copy all bits from one bitmap to another.

Definition at line 30 of file bitmap.c.

References BLI_BITMAP_SIZE, and src.

Referenced by BKE_animsys_nla_remap_keyframe_values(), and nlaevalchan_blendOrcombine_try_copy_to_lower().

◆ BLI_bitmap_find_first_unset()

int BLI_bitmap_find_first_unset ( const BLI_bitmap bitmap,
size_t  bits 
)

Find index of the lowest unset bit. Returns -1 if all the bits are set.

Definition at line 51 of file bitmap.c.

References _BITMAP_NUM_BLOCKS, _BITMAP_POWER, bitscan_forward_uint(), BLI_assert, and result.

Referenced by blender::tests::TEST(), and UniqueName_Value::use_smallest_unused().

◆ BLI_bitmap_flip_all()

void BLI_bitmap_flip_all ( BLI_bitmap bitmap,
size_t  bits 
)

Invert all bits in the bitmap.

Definition at line 22 of file bitmap.c.

References _BITMAP_NUM_BLOCKS.

Referenced by blender::tests::TEST().

◆ BLI_bitmap_or_all()

void BLI_bitmap_or_all ( BLI_bitmap dst,
const BLI_bitmap src,
size_t  bits 
)

Combine two bitmaps with boolean OR.

Definition at line 43 of file bitmap.c.

References _BITMAP_NUM_BLOCKS, and src.

◆ BLI_bitmap_set_all()

void BLI_bitmap_set_all ( BLI_bitmap bitmap,
bool  set,
size_t  bits 
)