39 #ifndef picox_core_xutils_h_ 40 #define picox_core_xutils_h_ 63 #if (X_CONF_BYTE_ORDER != X_BYTE_ORDER_LITTLE) && \ 64 (X_CONF_BYTE_ORDER != X_BYTE_ORDER_BIG) && \ 65 (X_CONF_BYTE_ORDER != X_BYTE_ORDER_UNKNOWN) 66 #error Invalid byte order 70 #define X_BYTE_ORDER X_CONF_BYTE_ORDER 75 #define X_BIT(x) (1UL << (x)) 80 #define X_BIT64(x) (1ULL << (x)) 85 #define X_BIT_MASK(n) ((1UL << (n)) - 1) 90 #define X_SWAP(x, y, T) do { T tmp = x; x = y; y = tmp; } while (0) 95 #define X_MIN(a,b) (((a)<(b))?(a):(b)) 100 #define X_MAX(a,b) (((a)>(b))?(a):(b)) 111 #define X_CONSTRAIN(x, a, b) (((x) < (a)) ? (a) : ((b) < (x)) ? (b) : (x)) 116 #define X_BREAK_IF(cond) if(cond) break 121 #define X_CONTINUE_IF(cond) if(cond) continue 126 #define X_EXPR_IF(cond, expr) if(cond) expr 131 #define X_GOTO_IF(cond, label) if(cond) goto label 136 #define X_ASSIGN_IF(cond, x, v) if(cond) x = (v) 141 #define X_ASSIGN_AND_GOTO_IF(cond, x, v, label) if(cond) { (x) = (v); goto label; } 146 #define X_ASSIGN_NOT_NULL(x, v) if (x) *(x) = (v) 151 #define X_RETURN_IF(cond) if(cond) return 156 #define X_RETURN_VALUE_IF(cond, x) if(cond) return x 161 #define X_UNUSED(x) (void)(x) 166 #define X_FOREVER() for (;;) 171 #define X_DIV_ROUNDUP(dividend, divisor) (((dividend) + (divisor) - 1) / (divisor)) 176 #define X_ROUNDUP_MULTIPLE(x, m) (((m) == 0) ? (x) : (((uint32_t)(x) + (m) - 1) / (m)) * (m)) 189 #define X_ROUNDUP_MULTIPLE_PTR(x, m) (((m) == 0) ? (void*)(x) : (void*)((((uintptr_t)(x) + (m) - 1) / (m)) * (m))) 202 #define X_ROUNDDOWN_MULTIPLE(x, m) (((m) == 0) ? (x) : ((uint32_t)(x) - ((x) % (m)))) 215 #define X_ROUNDDOWN_MULTIPLE_PTR(x, m) (((m) == 0) ? (void*)(x) : (void*)((uintptr_t)(x) - (((uintptr_t)(x)) % (m)))) 227 #define X_ROUNDUP_POWER_OF_TWO_5(x) (((x) | (x) >> 16) + 1) 228 #define X_ROUNDUP_POWER_OF_TWO_4(x) X_ROUNDUP_POWER_OF_TWO_5((x) | ((x) >> 8)) 229 #define X_ROUNDUP_POWER_OF_TWO_3(x) X_ROUNDUP_POWER_OF_TWO_4((x) | ((x) >> 4)) 230 #define X_ROUNDUP_POWER_OF_TWO_2(x) X_ROUNDUP_POWER_OF_TWO_3((x) | ((x) >> 2)) 231 #define X_ROUNDUP_POWER_OF_TWO_1(x) X_ROUNDUP_POWER_OF_TWO_2((x) | ((x) >> 1)) 237 #define X_ROUNDUP_POWER_OF_TWO(x) X_ROUNDUP_POWER_OF_TWO_1((uint32_t)(x) - 1) 250 #define X_ROUNDUP_POWER_OF_TWO_PTR(x) ((void*)X_ROUNDUP_POWER_OF_TWO_1((uintptr_t)(x) - 1)) 262 #define X_ROUNDDOWN_POWER_OF_TWO_5(x) ((x) - ((x) >> 1)) 263 #define X_ROUNDDOWN_POWER_OF_TWO_4(x) X_ROUNDDOWN_POWER_OF_TWO_5((x) | ((x) >> 16)) 264 #define X_ROUNDDOWN_POWER_OF_TWO_3(x) X_ROUNDDOWN_POWER_OF_TWO_4((x) | ((x) >> 8)) 265 #define X_ROUNDDOWN_POWER_OF_TWO_2(x) X_ROUNDDOWN_POWER_OF_TWO_3((x) | ((x) >> 4)) 266 #define X_ROUNDDOWN_POWER_OF_TWO_1(x) X_ROUNDDOWN_POWER_OF_TWO_2((x) | ((x) >> 2)) 272 #define X_ROUNDDOWN_POWER_OF_TWO(x) X_ROUNDDOWN_POWER_OF_TWO_1(((uint32_t)(x)) | (((uint32_t)(x)) >> 1)) 285 #define X_ROUNDDOWN_POWER_OF_TWO_PTR(x) ((void*)X_ROUNDDOWN_POWER_OF_TWO_1(((uintptr_t)(x)) | (((uintptr_t)(x)) >> 1))) 298 #define X_IS_MULTIPLE(x, m) (X_ROUNDUP_MULTIPLE(x, m) == (x)) 311 #define X_IS_MULTIPLE_PTR(x, m) (X_ROUNDUP_MULTIPLE_PTR(x, m) == (x)) 324 #define X_IS_POWER_OF_TWO(x) (((x) & -(x)) == (x)) 337 #define X_IS_POWER_OF_TWO_PTR(x) ((((intptr_t)(x)) & -((intptr_t)(x))) == ((intptr_t)(x))) 352 #define X_ROUNDUP_ALIGNMENT(x, a) ((((uint32_t)(x)) + (a) - 1) & ((uint32_t)0 - (a))) 366 #define X_ROUNDUP_ALIGNMENT_PTR(x, a) ((void*)((((uintptr_t)(x)) + (a) - 1) & ((uintptr_t)0 - (a)))) 382 #define X_ROUNDDOWN_ALIGNMENT(x, a) (X_ROUNDUP_ALIGNMENT((x) - (a) + 1, a)) 396 #define X_ROUNDDOWN_ALIGNMENT_PTR(x, a) (X_ROUNDUP_ALIGNMENT_PTR(((uintptr_t)(x)) - (a) + 1, a)) 410 #define X_IS_ALIGNMENT(x) (((uint32_t)(x) > 0) && (((uint32_t)(x) & ((uint32_t)(x) - 1)) == 0)) 423 #define X_IS_ALIGNED(x, a) (X_ROUNDUP_ALIGNMENT_PTR((x), (a)) == (x)) 439 #define X_HIGH_WORD(x) ((uint16_t)((x) >> 16)) 444 #define X_LOW_WORD(x) ((uint16_t)(x)) 449 #define X_HIGH_BYTE(x) ((uint8_t)((x) >> 8)) 454 #define X_LOW_BYTE(x) ((uint8_t)(x)) 459 #define X_HIGH_NIBBLE(x) (((uint8_t)(x)) >> 4) 464 #define X_LOW_NIBBLE(x) (((uint8_t)(x)) & 0x0f) 469 #define X_REVERSE_BITS8(x) (((x) >> 7) & 0x01) | (((x) >> 5) & 0x02) | \ 470 (((x) >> 3) & 0x04) | (((x) >> 1) & 0x08) | \ 471 (((x) << 7) & 0x80) | (((x) << 5) & 0x40) | \ 472 (((x) << 3) & 0x20) | (((x) << 1) & 0x10) 476 #define X_DECLARE_BIT_REVERSE_TABLE \ 477 const uint8_t bit_reverse_table[16] = \ 504 x = (x & 0xF0) >> 4 | (x & 0x0F) << 4;
505 x = (x & 0xCC) >> 2 | (x & 0x33) << 2;
506 x = (x & 0xAA) >> 1 | (x & 0x55) << 1;
509 X_DECLARE_BIT_REVERSE_TABLE;
510 const uint8_t a = bit_reverse_table[(x >> 4)];
511 const uint8_t b = bit_reverse_table[(x & 0xf)] << 4;
517 #define X_REVERSE_BITS16(x) (((uint16_t)(X_REVERSE_BITS8(X_HIGH_BYTE(x)))) | \ 518 (((uint16_t) X_REVERSE_BITS8(X_LOW_BYTE(x))) << 8)) 526 x = ((x >> 1) & 0x5555) | ((x & 0x5555) << 1);
527 x = ((x >> 2) & 0x3333) | ((x & 0x3333) << 2);
528 x = ((x >> 4) & 0x0F0F) | ((x & 0x0F0F) << 4);
529 x = ((x >> 8) & 0x00FF) | ((x & 0x00FF) << 8);
540 #define X_REVERSE_BITS32(x) (((uint32_t)(X_REVERSE_BITS16(X_HIGH_WORD(x)))) | \ 541 (((uint32_t)(X_REVERSE_BITS16(X_LOW_WORD(x)))) << 16)) 549 x = (((x & 0xaaaaaaaa) >> 1) | ((x & 0x55555555) << 1));
550 x = (((x & 0xcccccccc) >> 2) | ((x & 0x33333333) << 2));
551 x = (((x & 0xf0f0f0f0) >> 4) | ((x & 0x0f0f0f0f) << 4));
552 x = (((x & 0xff00ff00) >> 8) | ((x & 0x00ff00ff) << 8));
553 return ((x >> 16) | (x << 16));
563 #define X_REVERSE_ENDIAN16(x) ((((uint16_t)(x)) << 8) | (((uint16_t)(x) >> 8) & 0x00ff)) 576 #define X_REVERSE_ENDIAN32(x) (((((uint32_t)(x)) << 24) | \ 577 (((x) << 8) & 0x00ff0000) | \ 578 (((x) >> 8) & 0x0000ff00) | \ 579 (((x) >> 24) & 0x000000ff))) 592 #define X_ODD_BITS8(x) (((uint8_t)(x)) & 0x55) 597 #define X_ODD_BITS16(x) (((uint16_t)(x)) & 0x5555) 602 #define X_ODD_BITS32(x) (((uint32_t)(x)) & 0x55555555) 607 #define X_EVEN_BITS8(x) (((uint8_t)(x)) & 0xaa) 612 #define X_EVEN_BITS16(x) (((uint16_t)(x)) & 0xaaaa) 617 #define X_EVEN_BITS32(x) (((uint32_t)(x)) & 0xaaaaaaaa) 622 #define X_SWAP_ADJACENT_BITS8(x) ((X_ODD_BITS8(x) << 1) | ((X_EVEN_BITS8(x)) >> 1)) 627 #define X_SWAP_ADJACENT_BITS16(x) ((X_ODD_BITS16(x) << 1) | ((X_EVEN_BITS16(x)) >> 1)) 632 #define X_SWAP_ADJACENT_BITS32(x) ((X_ODD_BITS32(x) << 1) | ((X_EVEN_BITS32(x)) >> 1)) 637 #define X_LOAD_U8(ptr) (*(uint8_t*)(ptr)) 642 #define X_LOAD_U16_LIT(ptr) ((uint16_t)(((uint16_t)*((uint8_t*)(ptr)+1)<<8)|(uint16_t)*(uint8_t*)(ptr))) 647 #define X_LOAD_U32_LIT(ptr) \ 648 ((uint32_t)((((uint32_t)*((uint8_t*)(ptr) + 3)) << 24) | \ 649 (((uint32_t)*((uint8_t*)(ptr) + 2)) << 16) | \ 650 (((uint16_t)*((uint8_t*)(ptr) + 1)) << 8) | \ 656 #define X_LOAD_U16_BIG(ptr) (uint16_t)(((uint16_t)(*((uint8_t*)(ptr)))<<8)|(uint16_t)*((uint8_t*)(ptr) + 1)) 661 #define X_LOAD_U32_BIG(ptr) \ 662 ((uint32_t)((((uint32_t)*(((uint8_t*)(ptr)) + 0)) << 24) | \ 663 (((uint32_t)*(((uint8_t*)(ptr)) + 1)) << 16) | \ 664 (((uint16_t)*(((uint8_t*)(ptr)) + 2)) << 8) | \ 665 *(((uint8_t*)(ptr)) + 3))) 670 #define X_STORE_U8(ptr, val) (*(uint8_t*)(ptr)=(uint8_t)(val)) 675 #define X_STORE_U16_LIT(ptr, val) \ 676 (*(uint8_t*)(ptr)=(uint8_t)(val), \ 677 *((uint8_t*)(ptr)+1)=(uint8_t)((uint16_t)(val)>>8)) \ 682 #define X_STORE_U32_LIT(ptr, val) \ 683 (*(uint8_t*)(ptr)=(uint8_t)(val), \ 684 *((uint8_t*)(ptr)+1)=(uint8_t)((uint16_t)(val)>>8), \ 685 *((uint8_t*)(ptr)+2)=(uint8_t)((uint32_t)(val)>>16), \ 686 *((uint8_t*)(ptr)+3)=(uint8_t)((uint32_t)(val)>>24)) 691 #define X_STORE_U16_BIG(ptr, val) \ 692 (*((uint8_t*)(ptr)+1)=(uint8_t)(val), \ 693 *((uint8_t*)(ptr))=(uint8_t)((uint16_t)(val)>>8)) \ 698 #define X_STORE_U32_BIG(ptr, val) \ 699 (*((uint8_t*)(ptr)+3)=(uint8_t)(val), \ 700 *((uint8_t*)(ptr)+2)=(uint8_t)((uint16_t)(val)>>8), \ 701 *((uint8_t*)(ptr)+1)=(uint8_t)((uint32_t)(val)>>16), \ 702 *((uint8_t*)(ptr)+0)=(uint8_t)((uint32_t)(val)>>24)) 709 return (
const char*)(end) - (
const char*)(begin);
715 static inline bool x_is_within(int32_t x, int32_t begin, int32_t end)
717 return ((begin <= x) && (x < end));
723 static inline bool x_is_uwithin(uint32_t x, uint32_t begin, uint32_t end)
725 return ((begin <= x) && (x < end));
733 return ((begin <= x) && (x < end));
739 static inline bool x_is_within_ptr(
const void* ptr,
const void* begin,
const void* end)
741 const char*
const p = (
const char*)(ptr);
742 const char*
const b = (
const char*)(begin);
743 const char*
const e = (
const char*)(end);
745 return ((b <= p) && (p < e));
750 #define X_DECLARE_LSB_POS_TABLE \ 751 const uint8_t lsb_pos_table[15] = \ 778 X_DECLARE_LSB_POS_TABLE;
780 if (!(x & 0x0f)) { x >>= 4; n += 4;}
781 return n + lsb_pos_table[(x &0x0f) - 1];
789 X_DECLARE_LSB_POS_TABLE;
791 if (!(x & 0x00ff)) { x >>= 8; n += 8;}
792 if (!(x & 0x0f)) { x >>= 4; n += 4;}
793 return n + lsb_pos_table[(x &0x0f) - 1];
801 X_DECLARE_LSB_POS_TABLE;
803 if (!(x & 0x0000ffff)) { x >>= 16; n += 16;}
804 if (!(x & 0x00ff)) { x >>= 8; n += 8;}
805 if (!(x & 0x0f)) { x >>= 4; n += 4;}
806 return n + lsb_pos_table[(x &0x0f) - 1];
814 static inline uint8_t
x_find_lsb8(uint8_t x) {
return x & ((~x) + 1); }
819 static inline uint16_t
x_find_lsb16(uint16_t x) {
return x & ((~x) + 1); }
824 static inline uint32_t
x_find_lsb32(uint32_t x) {
return x & ((~x) + 1); }
828 #define X_DECLARE_MSB_POS_TABLE \ 829 const uint8_t msb_pos_table[15] = \ 856 X_DECLARE_MSB_POS_TABLE;
858 if (x & 0xf0) { x >>= 4; n += 4;}
859 return n + msb_pos_table[(x &0x0f) - 1];
867 X_DECLARE_MSB_POS_TABLE;
869 if (x & 0xff00) { x >>= 8; n += 8;}
870 if (x & 0xf0) { x >>= 4; n += 4;}
871 return n + msb_pos_table[(x &0x0f) - 1];
879 X_DECLARE_MSB_POS_TABLE;
881 if (x & 0xffff0000) { x >>= 16; n += 16;}
882 if (x & 0xff00) { x >>= 8; n += 8;}
883 if (x & 0xf0) { x >>= 4; n += 4;}
884 return n + msb_pos_table[(x &0x0f) - 1];
906 #define X_COUNT_BITS_IMPL(x) int count = 0; while(x) { ++count; x = x & (x - 1); } return count; 931 uint8_t* p = (uint8_t*)(x);
945 uint8_t* p = (uint8_t*)(x);
961 int32_t x, int32_t in_min, int32_t in_max, int32_t out_min, int32_t out_max)
963 return ((int64_t)(x - in_min)) * (out_max - out_min) / (in_max - in_min) + out_min;
970 uint32_t x, uint32_t in_min, uint32_t in_max, uint32_t out_min, uint32_t out_max)
972 return ((uint64_t)(x - in_min)) * (out_max - out_min) / (in_max - in_min) + out_min;
980 #if X_BYTE_ORDER == X_BYTE_ORDER_BIG 982 #elif X_BYTE_ORDER == X_BYTE_ORDER_LITTLE 1007 #if X_BYTE_ORDER == X_BYTE_ORDER_BIG 1009 #elif X_BYTE_ORDER == X_BYTE_ORDER_LITTLE 1021 #if X_BYTE_ORDER == X_BYTE_ORDER_BIG 1023 #elif X_BYTE_ORDER == X_BYTE_ORDER_LITTLE 1035 #if X_BYTE_ORDER == X_BYTE_ORDER_LITTLE 1037 #elif X_BYTE_ORDER == X_BYTE_ORDER_BIG 1049 #if X_BYTE_ORDER == X_BYTE_ORDER_LITTLE 1051 #elif X_BYTE_ORDER == X_BYTE_ORDER_BIG 1063 #if X_BYTE_ORDER == X_BYTE_ORDER_BIG 1065 #elif X_BYTE_ORDER == X_BYTE_ORDER_LITTLE 1077 #if X_BYTE_ORDER == X_BYTE_ORDER_BIG 1079 #elif X_BYTE_ORDER == X_BYTE_ORDER_LITTLE 1091 #if X_BYTE_ORDER == X_BYTE_ORDER_LITTLE 1093 #elif X_BYTE_ORDER == X_BYTE_ORDER_BIG 1105 #if X_BYTE_ORDER == X_BYTE_ORDER_LITTLE 1107 #elif X_BYTE_ORDER == X_BYTE_ORDER_BIG 1125 #endif // picox_core_xutils_h_ static uint32_t x_roundup_power_of_two(uint32_t x)
X_ROUNDUP_POWER_OF_TWO()の関数版です。
Definition: xutils.h:242
static uint32_t x_roundup_multiple(uint32_t x, uint32_t m)
X_ROUNDUP_MULTIPLE()の関数版です。
Definition: xutils.h:181
#define X_ROUNDUP_POWER_OF_TWO(x)
xを最も近い2のべき乗に切り上げた値を返します。
Definition: xutils.h:237
#define X_IS_MULTIPLE_PTR(x, m)
X_IS_MULTIPLE()のポインタ版です。
Definition: xutils.h:311
static uint32_t x_roundup_alignment(uint32_t x, uint32_t a)
X_ROUNDUP_ALIGNMENT()の関数版です。
Definition: xutils.h:357
static IGNORE int x_find_lsb_pos8(uint8_t x)
8bit符号なし整数の下位から最も近くにセットされたビット位置を返します。
Definition: xutils.h:776
#define X_ROUNDUP_ALIGNMENT_PTR(x, a)
X_ROUNDUP_ALIGNMENT()のポインタ版です。
Definition: xutils.h:366
static int x_count_bits32(uint32_t x)
x_count_bits8()の32bit版です
Definition: xutils.h:922
static uint8_t x_find_msb8(uint8_t x)
8bit符号なし整数の上位から最も近くにセットされたビットを返します。
Definition: xutils.h:892
static bool x_is_aligned(const void *ptr, size_t alignment)
ptrが指すアドレスがalignmentの倍数かどうかをBool値で返します。
Definition: xutils.h:428
static void * x_roundup_multiple_ptr(const void *x, uint32_t m)
X_ROUNDUP_MULTIPLE_PTR()の関数版です。
Definition: xutils.h:194
#define X_ROUNDDOWN_ALIGNMENT(x, a)
xをアライメントの倍数に切り下げた値を返します。
Definition: xutils.h:382
#define X_ROUNDDOWN_ALIGNMENT_PTR(x, a)
X_ROUNDDOWN_ALIGNMENT()のポインタ版です。
Definition: xutils.h:396
static IGNORE int x_find_msb_pos8(uint8_t x)
8bit符号なし整数の上位から最も近くにセットされたビット位置を返します。
Definition: xutils.h:854
static bool x_is_multiple(uint32_t x, uint32_t m)
X_IS_MULTIPLE()の関数版です。
Definition: xutils.h:303
static ptrdiff_t x_distance_ptr(const void *begin, const void *end)
void*引数end, beginのバイト単位のアドレス差を返します。
Definition: xutils.h:707
static bool x_is_within(int32_t x, int32_t begin, int32_t end)
(begin <= x) && (x < end)を判定します。
Definition: xutils.h:715
static bool x_is_uwithin(uint32_t x, uint32_t begin, uint32_t end)
(begin <= x) && (x < end)を判定します。
Definition: xutils.h:723
#define X_REVERSE_ENDIAN16(x)
xの下位2バイトのバイトオーダーを逆転した値を返します。
Definition: xutils.h:563
static bool x_is_big_endian(void)
バイトオーダーがビッグエンディアンかどうかを返します。
Definition: xutils.h:978
#define X_REVERSE_ENDIAN32(x)
xの下位4バイトのバイトオーダーを逆転した値を返します。
Definition: xutils.h:576
static int x_find_msb_pos32(uint32_t x)
x_find_msb8()の32bit版です
Definition: xutils.h:877
static uint32_t x_host_to_big32(uint32_t x)
4Byteホストエンディアンデータをビッグエンディアンにして返します。
Definition: xutils.h:1075
static void * x_rounddown_multiple_ptr(const void *x, uintptr_t m)
X_ROUNDDOWN_MULTIPLE()の関数版です。
Definition: xutils.h:220
static int x_find_lsb_pos32(uint32_t x)
x_find_lsb8()の32bit版です
Definition: xutils.h:799
#define X_ROUNDUP_MULTIPLE(x, m)
xをmの倍数に切り上げた値を返します。
Definition: xutils.h:176
#define X_ROUNDDOWN_MULTIPLE_PTR(x, m)
xをmの倍数に切り下げた値を返します。
Definition: xutils.h:215
static void x_reverse_2byte(void *x)
xが指す先頭2バイトを逆転します
Definition: xutils.h:929
#define X_ROUNDDOWN_POWER_OF_TWO_PTR(x)
X_ROUNDDOWN_POWER_OF_TWO()のポインタ版です。
Definition: xutils.h:285
#define X_IS_POWER_OF_TWO(x)
xが2のべき乗かどうかをBool値で返します。
Definition: xutils.h:324
static uint16_t x_find_msb16(uint16_t x)
x_find_msb8()の16bit版です
Definition: xutils.h:897
static bool x_is_within_uptr(uintptr_t x, uintptr_t begin, uintptr_t end)
(begin <= x) && (x < end)を判定します。
Definition: xutils.h:731
static uint32_t x_umap(uint32_t x, uint32_t in_min, uint32_t in_max, uint32_t out_min, uint32_t out_max)
x_map()の符号なし版です。
Definition: xutils.h:969
static uint16_t x_big_to_host16(uint16_t x)
2Byteビッグエンディアンデータをホストのエンディアンにして返します。
Definition: xutils.h:1005
#define X_IS_POWER_OF_TWO_PTR(x)
X_IS_POWER_OF_TWO()のポインタ版です。
Definition: xutils.h:337
#define X_IS_ALIGNMENT(x)
xが1または2のべき乗かどうかをBool値で返します。
Definition: xutils.h:410
#define X_ROUNDDOWN_MULTIPLE(x, m)
xをmの倍数に切り下げた値を返します。
Definition: xutils.h:202
static uint16_t x_find_lsb16(uint16_t x)
x_find_lsb8()の16bit版です
Definition: xutils.h:819
static uint16_t x_host_to_little16(uint16_t x)
2Byteホストエンディアンデータをリトルエンディアンにして返します。
Definition: xutils.h:1089
static void x_reverse_4byte(void *x)
xが指す先頭4バイトを逆転します
Definition: xutils.h:943
static bool x_is_power_of_two_ptr(const void *x)
X_IS_POWER_OF_TWO_PTR()の関数版です。
Definition: xutils.h:342
static IGNORE uint8_t x_reverse_bits8(uint8_t x)
X_REVERSE_BITS8()の関数版です。
Definition: xutils.h:501
static uint16_t x_reverse_endian16(register uint16_t x)
X_REVERSE_ENDIAN16()の関数版です。
Definition: xutils.h:568
static uint32_t x_rounddown_power_of_two(uint32_t x)
X_ROUNDDOWN_POWER_OF_TWO()の関数版です。
Definition: xutils.h:277
static uint32_t x_host_to_little32(uint32_t x)
4Byteホストエンディアンデータをリトルエンディアンにして返します。
Definition: xutils.h:1103
static uint32_t x_rounddown_multiple(uint32_t x, uint32_t m)
X_ROUNDDOWN_MULTIPLE()の関数版です。
Definition: xutils.h:207
static bool x_is_power_of_two(uint32_t x)
X_IS_POWER_OF_TWO()の関数版です。
Definition: xutils.h:329
static uint32_t x_find_msb32(uint32_t x)
x_find_msb8()の32bit版です
Definition: xutils.h:902
static void * x_roundup_power_of_two_ptr(const void *x)
X_ROUNDUP_POWER_OF_TWO_PTR()の関数版です。
Definition: xutils.h:255
static int x_count_bits16(uint16_t x)
x_count_bits8()の16bit版です
Definition: xutils.h:917
static int32_t x_map(int32_t x, int32_t in_min, int32_t in_max, int32_t out_min, int32_t out_max)
数値をある範囲から別の範囲に変換します
Definition: xutils.h:960
static uint32_t x_reverse_bits32(register uint32_t x)
X_REVERSE_BITS32()の関数版です。
Definition: xutils.h:546
static uint32_t x_reverse_endian32(uint32_t x)
X_REVERSE_ENDIAN32()の関数版です。
Definition: xutils.h:584
static bool x_is_alignment(uint32_t x)
X_IS_ALIGNMENT()の関数版です。
Definition: xutils.h:415
static uint16_t x_little_to_host16(uint16_t x)
2Byteリトルエンディアンデータをホストのエンディアンにして返します。
Definition: xutils.h:1033
static void * x_roundup_alignment_ptr(const void *x, size_t a)
X_ROUNDUP_ALIGNMENT_PTR()の関数版です。
Definition: xutils.h:371
static uint8_t x_find_lsb8(uint8_t x)
8bit符号なし整数の下位から最も近くにセットされたビットを返します。
Definition: xutils.h:814
static void * x_rounddown_power_of_two_ptr(const void *x)
X_ROUNDDOWN_POWER_OF_TWO_PTR()の関数版です。
Definition: xutils.h:290
#define X_ROUNDUP_ALIGNMENT(x, a)
xをアライメントの倍数に切り上げた値を返します。
Definition: xutils.h:352
#define X_IS_MULTIPLE(x, m)
xがmの倍数かどうかをBool値で返します。
Definition: xutils.h:298
static int x_find_lsb_pos16(uint16_t x)
x_find_lsb8()の16bit版です
Definition: xutils.h:787
static uint16_t x_reverse_bits16(uint16_t x)
X_REVERSE_BITS16()の関数版です。
Definition: xutils.h:523
static IGNORE int x_count_bits8(uint8_t x)
8bit符号なし変数のセットされたビット数を返します
Definition: xutils.h:912
static uint32_t x_rounddown_alignment(uint32_t x, uint32_t a)
X_ROUNDDOWN_ALIGNMENT()の関数版です。
Definition: xutils.h:387
static bool x_is_little_endian(void)
バイトオーダーがリトルエンディアンかどうかを返します。
Definition: xutils.h:997
static uint32_t x_little_to_host32(uint32_t x)
4Byteリトルエンディアンデータをホストのエンディアンにして返します。
Definition: xutils.h:1047
#define X_ROUNDUP_POWER_OF_TWO_PTR(x)
X_ROUNDUP_POWER_OF_TWO()のポインタ版です。
Definition: xutils.h:250
static uint16_t x_host_to_big16(uint16_t x)
2Byteホストエンディアンデータをビッグエンディアンにして返します。
Definition: xutils.h:1061
static int x_find_msb_pos16(uint16_t x)
x_find_msb8()の16bit版です
Definition: xutils.h:865
#define X_ROUNDUP_MULTIPLE_PTR(x, m)
X_ROUNDUP_MULTIPLE()のポインタ版です。
Definition: xutils.h:189
static bool x_is_multiple_ptr(const void *x, uint32_t m)
X_IS_MULTIPLE_PTR()の関数版です。
Definition: xutils.h:316
static void * x_rounddown_alignment_ptr(const void *x, uint32_t a)
X_ROUNDDOWN_ALIGNMENT_PTR()の関数版です。
Definition: xutils.h:401
#define X_ROUNDDOWN_POWER_OF_TWO(x)
xを最も近い2のべき乗に切り下げた値を返します。
Definition: xutils.h:272
static bool x_is_within_ptr(const void *ptr, const void *begin, const void *end)
ptrが指すアドレスがbegin とendの範囲内かどうかをBool値で返します。
Definition: xutils.h:739
static uint32_t x_big_to_host32(uint32_t x)
4Byteビッグエンディアンデータをホストのエンディアンにして返します。
Definition: xutils.h:1019
static uint32_t x_find_lsb32(uint32_t x)
x_find_lsb8()の32bit版です
Definition: xutils.h:824