Skip to content

Commit 56401f7

Browse files
committed
[ntuple] fix bool-backed enums
Enables bool as an underlying type for custom enums, which was previously overlooked.
1 parent 285d798 commit 56401f7

File tree

4 files changed

+7
-2
lines changed

4 files changed

+7
-2
lines changed

tree/ntuple/src/RFieldMeta.cxx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -538,6 +538,7 @@ ROOT::REnumField::REnumField(std::string_view fieldName, TEnum *enump)
538538
}
539539

540540
switch (enump->GetUnderlyingType()) {
541+
case kBool_t: Attach(std::make_unique<RField<Bool_t>>("_0")); break;
541542
case kChar_t: Attach(std::make_unique<RField<Char_t>>("_0")); break;
542543
case kUChar_t: Attach(std::make_unique<RField<UChar_t>>("_0")); break;
543544
case kShort_t: Attach(std::make_unique<RField<Short_t>>("_0")); break;

tree/ntuple/test/CustomStruct.hxx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@
2222

2323
enum CustomEnum { kCustomEnumVal = 7 };
2424
// TODO(jblomer): use standard integer types for specifying the underlying width; requires TEnum fix.
25+
enum class CustomEnumBool : bool {
26+
};
2527
enum class CustomEnumInt8 : char {};
2628
enum class CustomEnumUInt8 : unsigned char {};
2729
enum class CustomEnumInt16 : short int {};

tree/ntuple/test/CustomStructLinkDef.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#ifdef __CLING__
22

33
#pragma link C++ enum CustomEnum;
4+
#pragma link C++ enum CustomEnumBool;
45
#pragma link C++ enum CustomEnumInt8;
56
#pragma link C++ enum CustomEnumUInt8;
67
#pragma link C++ enum CustomEnumInt16;

tree/ntuple/test/ntuple_types.cxx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,9 @@ TEST(RNTuple, EnumBasics)
4747
EXPECT_EQ(kCustomEnumVal, reader->GetModel().GetDefaultEntry().GetPtr<std::vector<CustomEnum>>("ve")->at(1));
4848
}
4949

50-
using EnumClassInts = ::testing::Types<CustomEnumInt8, CustomEnumUInt8, CustomEnumInt16, CustomEnumUInt16,
51-
CustomEnumInt32, CustomEnumUInt32, CustomEnumInt64, CustomEnumUInt64>;
50+
using EnumClassInts =
51+
::testing::Types<CustomEnumBool, CustomEnumInt8, CustomEnumUInt8, CustomEnumInt16, CustomEnumUInt16, CustomEnumInt32,
52+
CustomEnumUInt32, CustomEnumInt64, CustomEnumUInt64>;
5253

5354
template <typename EnumT>
5455
class EnumClass : public ::testing::Test {

0 commit comments

Comments
 (0)