24 ROOT::Experimental::Detail::RColumnElementBase
25 ROOT::Experimental::Detail::RColumnElementBase::Generate(EColumnType type) {
27 case EColumnType::kReal32:
28 return RColumnElement<float, EColumnType::kReal32>(
nullptr);
29 case EColumnType::kReal64:
30 return RColumnElement<double, EColumnType::kReal64>(
nullptr);
31 case EColumnType::kByte:
32 return RColumnElement<std::uint8_t, EColumnType::kByte>(
nullptr);
33 case EColumnType::kInt32:
34 return RColumnElement<std::int32_t, EColumnType::kInt32>(
nullptr);
35 case EColumnType::kInt64:
36 return RColumnElement<std::int64_t, EColumnType::kInt64>(
nullptr);
37 case EColumnType::kBit:
38 return RColumnElement<bool, EColumnType::kBit>(
nullptr);
39 case EColumnType::kIndex:
40 return RColumnElement<ClusterSize_t, EColumnType::kIndex>(
nullptr);
41 case EColumnType::kSwitch:
42 return RColumnElement<RColumnSwitch, EColumnType::kSwitch>(
nullptr);
47 return RColumnElementBase();
50 void ROOT::Experimental::Detail::RColumnElement<bool, ROOT::Experimental::EColumnType::kBit>::Pack(
51 void *dst,
void *src, std::size_t count)
const
53 bool *boolArray =
reinterpret_cast<bool *
>(src);
54 char *charArray =
reinterpret_cast<char *
>(dst);
55 std::bitset<8> bitSet;
57 for (; i < count; ++i) {
58 bitSet.set(i % 8, boolArray[i]);
60 char packed = bitSet.to_ulong();
61 charArray[i / 8] = packed;
65 char packed = bitSet.to_ulong();
66 charArray[i / 8] = packed;
70 void ROOT::Experimental::Detail::RColumnElement<bool, ROOT::Experimental::EColumnType::kBit>::Unpack(
71 void *dst,
void *src, std::size_t count)
const
73 bool *boolArray =
reinterpret_cast<bool *
>(dst);
74 char *charArray =
reinterpret_cast<char *
>(src);
75 std::bitset<8> bitSet;
76 for (std::size_t i = 0; i < count; i += 8) {
77 bitSet = charArray[i / 8];
78 for (std::size_t j = i; j < std::min(count, i + 8); ++j) {
79 boolArray[j] = bitSet[j % 8];