Derive-C
Loading...
Searching...
No Matches
utils.h
Go to the documentation of this file.
1#pragma once
3
4#define DC_ARENA_GEO_INDEX_TO_BLOCK(IDX, INITIAL_BLOCK_INDEX_BITS) \
5 (uint8_t)(DC_MATH_MSB_INDEX(IDX) < (INITIAL_BLOCK_INDEX_BITS) \
6 ? 0 \
7 : ((1 + DC_MATH_MSB_INDEX(IDX)) - (INITIAL_BLOCK_INDEX_BITS)))
8
9#define DC_ARENA_GEO_INDEX_TO_OFFSET(IDX, BLOCK, INITIAL_BLOCK_INDEX_BITS) \
10 (size_t)(IDX - (BLOCK == 0 ? 0 : (1ULL << ((BLOCK - 1) + (INITIAL_BLOCK_INDEX_BITS)))))
11
12#define DC_ARENA_GEO_BLOCK_TO_SIZE(BLOCK, INITIAL_BLOCK_INDEX_BITS) \
13 (size_t)(BLOCK == 0 ? (1ULL << INITIAL_BLOCK_INDEX_BITS) \
14 : (1ULL << ((BLOCK - 1) + (INITIAL_BLOCK_INDEX_BITS))))
15
16#define DC_ARENA_GEO_BLOCK_OFFSET_TO_INDEX(BLOCK, OFFSET, INITIAL_BLOCK_INDEX_BITS) \
17 ((BLOCK == 0 ? 0 : (1ULL << ((BLOCK - 1) + (INITIAL_BLOCK_INDEX_BITS)))) + OFFSET)
18
19#define DC_ARENA_GEO_MAX_NUM_BLOCKS(INDEX_BITS, INITIAL_BLOCK_INDEX_BITS) \
20 ((INDEX_BITS - INITIAL_BLOCK_INDEX_BITS) + 1)