From 5bc3fc62a2de2406997ea2a2be6003bbc40c4892 Mon Sep 17 00:00:00 2001 From: Aditya Date: Sat, 1 Mar 2025 23:43:28 +0530 Subject: [PATCH] [ntuple] Add alignment calculation in RClassField::Attach method 1. Get the TypeName of the class 2. Loop over all the data members, and find maximum alignment requirement 3. Update the maximum alignment considering both the class members and child fields 4. This takes into account the transient members along with the persistent members. --- tree/ntuple/v7/src/RFieldMeta.cxx | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/tree/ntuple/v7/src/RFieldMeta.cxx b/tree/ntuple/v7/src/RFieldMeta.cxx index 7590afcfa4020..2a1a8067cccf8 100644 --- a/tree/ntuple/v7/src/RFieldMeta.cxx +++ b/tree/ntuple/v7/src/RFieldMeta.cxx @@ -185,6 +185,15 @@ ROOT::Experimental::RClassField::RClassField(std::string_view fieldName, TClass void ROOT::Experimental::RClassField::Attach(std::unique_ptr child, RSubFieldInfo info) { + auto *cls = TClass::GetClass(GetTypeName().c_str()); + if(cls) { + TIter memberIter(cls->GetListOfDataMembers()); + TDataMember *dataMember; + while ((dataMember = (TDataMember*)memberIter())) { + std::size_t maxAlign = dataMember->GetUnitSize(); + fMaxAlignment = std::max(fMaxAlignment, maxAlign); + } + } fMaxAlignment = std::max(fMaxAlignment, child->GetAlignment()); fSubFieldsInfo.push_back(info); RFieldBase::Attach(std::move(child));