19#include <unordered_set>
28 constexpr std::array<ArrowFlag, 3> valid_values = {
33 return std::ranges::any_of(
37 return static_cast<std::underlying_type_t<ArrowFlag>
>(flag) == value;
45 constexpr size_t n_bits =
sizeof(flag_values) * 8;
46 std::unordered_set<ArrowFlag> flags;
47 for (
size_t i = 0; i < n_bits; ++i)
49 const int64_t flag_value =
static_cast<int64_t
>(1) << i;
50 if ((flag_values & flag_value) != 0)
55 throw std::runtime_error(
"Invalid ArrowFlag value");
57 flags.insert(
static_cast<ArrowFlag>(flag_value));
66 int64_t flag_values = 0;
69 flag_values |=
static_cast<int64_t
>(flag);
int64_t to_ArrowFlag_value(const std::unordered_set< ArrowFlag > &flags)
Converts a vector of ArrowFlag values to a bitfield of ArrowFlag values.
constexpr bool is_valid_ArrowFlag_value(int64_t value) noexcept
std::unordered_set< ArrowFlag > to_set_of_ArrowFlags(int64_t flag_values)
Converts a bitfield of ArrowFlag values to a set of ArrowFlag values.