56 void TIOFeatures::Clear(Experimental::EIOFeatures input_bits)
58 Clear(static_cast<EIOFeatures>(input_bits));
67 void TIOFeatures::Clear(Experimental::EIOUnsupportedFeatures input_bits)
69 Clear(static_cast<EIOFeatures>(input_bits));
78 void TIOFeatures::Clear(EIOFeatures input_bits)
80 TBasket::EIOBits enum_bits =
static_cast<TBasket::EIOBits
>(input_bits);
81 auto bits =
static_cast<UChar_t
>(enum_bits);
82 if (R__unlikely((bits & static_cast<UChar_t>(TBasket::EIOBits::kSupported)) != bits)) {
83 Error(
"TestFeature",
"A feature is being cleared that is not supported.");
89 static std::string GetUnsupportedName(TBasket::EUnsupportedIOBits enum_flag)
91 UChar_t flag =
static_cast<UChar_t
>(enum_flag);
93 std::string retval =
"unknown";
95 TClass *cl = TBasket::Class();
100 TEnum *eUnsupportedIOBits = (TEnum *)cl->GetListOfEnums()->FindObject(
"EUnsupportedIOBits");
101 if (eUnsupportedIOBits ==
nullptr) {
105 for (
auto constant : ROOT::Detail::TRangeStaticCast<TEnumConstant>(eUnsupportedIOBits->GetConstants())) {
106 if (constant->GetValue() == flag) {
107 retval = constant->GetName();
123 bool TIOFeatures::Set(Experimental::EIOFeatures input_bits)
125 return Set(static_cast<EIOFeatures>(input_bits));
137 bool TIOFeatures::Set(EIOFeatures input_bits)
139 TBasket::EIOBits enum_bits =
static_cast<TBasket::EIOBits
>(input_bits);
140 auto bits =
static_cast<UChar_t
>(enum_bits);
141 if (R__unlikely((bits & static_cast<UChar_t>(TBasket::EIOBits::kSupported)) != bits)) {
142 UChar_t unsupported = bits &
static_cast<UChar_t
>(TBasket::EUnsupportedIOBits::kUnsupported);
144 Error(
"SetFeature",
"A feature was request (%s) but this feature is no longer supported.",
145 GetUnsupportedName(static_cast<TBasket::EUnsupportedIOBits>(unsupported)).c_str());
147 Error(
"SetFeature",
"An unknown feature was requested (flag=%s); cannot enable it.",
148 std::bitset<32>(unsupported).to_string().c_str());
170 bool TIOFeatures::Set(
const std::string &value)
172 TClass *cl = TBasket::Class();
174 Error(
"Set",
"Could not retrieve TBasket's class");
177 TEnum *eIOBits =
static_cast<TEnum*
>(cl->GetListOfEnums()->FindObject(
"EIOBits"));
178 if (eIOBits ==
nullptr) {
179 Error(
"Set",
"Could not locate TBasket::EIOBits enum");
182 for (
auto constant : ROOT::Detail::TRangeStaticCast<TEnumConstant>(eIOBits->GetConstants())) {
183 if (!strcmp(constant->GetName(), value.c_str())) {
184 return Set(static_cast<EIOFeatures>(constant->GetValue()));
187 Error(
"Set",
"Could not locate %s in TBasket::EIOBits", value.c_str());
195 void TIOFeatures::Print()
const
197 TClass *cl = TBasket::Class();
199 Error(
"Print",
"Could not retrieve TBasket's class");
202 TEnum *eIOBits =
static_cast<TEnum *
>(cl->GetListOfEnums()->FindObject(
"EIOBits"));
203 if (eIOBits ==
nullptr) {
204 Error(
"Print",
"Could not locate TBasket::EIOBits enum");
207 std::stringstream ss;
208 bool hasFeatures =
false;
209 ss <<
"TIOFeatures{";
210 for (
auto constant : ROOT::Detail::TRangeStaticCast<TEnumConstant>(eIOBits->GetConstants())) {
211 if ((constant->GetValue() & fIOBits) == constant->GetValue()) {
212 ss << (hasFeatures ?
", " :
"") << constant->GetName();
217 Printf(
"%s", ss.str().c_str());
226 bool TIOFeatures::Test(Experimental::EIOFeatures input_bits)
const
228 return Test(static_cast<EIOFeatures>(input_bits));
237 bool TIOFeatures::Test(EIOFeatures input_bits)
const
239 TBasket::EIOBits enum_bits =
static_cast<TBasket::EIOBits
>(input_bits);
240 auto bits =
static_cast<UChar_t
>(enum_bits);
241 if (R__unlikely((bits & static_cast<UChar_t>(TBasket::EIOBits::kSupported)) != bits)) {
242 Error(
"TestFeature",
"A feature is being tested for that is not supported or known.");
245 return (fIOBits & bits) == bits;
248 UChar_t TIOFeatures::GetFeatures()
const