21 #include <cuda/std/climits>
30 namespace CUDF_EXPORT
cudf {
37 #define LIKELY(EXPR) __builtin_expect(!!(EXPR), 1)
39 #define LIKELY(EXPR) (!!(EXPR))
43 #define constexpr_assert(CHECK) static_cast<void>(0)
45 #define constexpr_assert(CHECK) (LIKELY(CHECK) ? void(0) : [] { assert(!#CHECK); }())
57 static_assert(CHAR_BIT == 8,
"Size of a byte must be 8 bits.");
58 return sizeof(T) * CHAR_BIT;
76 return bit_index / detail::size_in_bits<bitmask_type>();
87 return bit_index % detail::size_in_bits<bitmask_type>();
101 assert(
nullptr != bitmask);
116 assert(
nullptr != bitmask);
130 assert(
nullptr != bitmask);
148 return bitmask !=
nullptr ?
bit_is_set(bitmask, bit_index) : default_value;
161 constexpr_assert(0 <= n && n <
static_cast<size_type>(detail::size_in_bits<bitmask_type>()));
175 constexpr
size_type word_size{detail::size_in_bits<bitmask_type>()};
176 constexpr_assert(0 <= n && n < word_size);
197 assert(
nullptr != bitmask);
215 assert(
nullptr != bitmask);
constexpr CUDF_HOST_DEVICE std::size_t size_in_bits()
返回给定类型可以容纳的位数。
CUDF_HOST_DEVICE void set_bit_unsafe(bitmask_type *bitmask, size_type bit_index)
将指定的位设置为 1
constexpr CUDF_HOST_DEVICE size_type intra_word_index(size_type bit_index)
返回指定位在字内的位置。
constexpr CUDF_HOST_DEVICE size_type word_index(size_type bit_index)
返回包含指定位的字的索引。
constexpr CUDF_HOST_DEVICE bitmask_type set_least_significant_bits(size_type n)
返回一个设置了 n 个最低有效位的位掩码字。
CUDF_HOST_DEVICE bool bit_value_or(bitmask_type const *bitmask, size_type bit_index, bool default_value)
类似 optional 的接口,用于检查位掩码的指定位是否设置。
CUDF_HOST_DEVICE bool bit_is_set(bitmask_type const *bitmask, size_type bit_index)
指示指定的位是否设置为 1
constexpr CUDF_HOST_DEVICE bitmask_type set_most_significant_bits(size_type n)
返回一个设置了 n 个最高有效位的位掩码字。
CUDF_HOST_DEVICE void clear_bit_unsafe(bitmask_type *bitmask, size_type bit_index)
将指定的位设置为 0
int32_t size_type
用于列和表的行索引类型。
uint32_t bitmask_type
存储为 32 位无符号整数的位掩码类型。
#define CUDF_HOST_DEVICE
指示函数或方法可在主机和设备上使用。