27 ROOT::Experimental::RNTupleModel::RNTupleModel()
28 : fRootField(std::make_unique<RFieldRoot>())
29 , fDefaultEntry(std::make_unique<REntry>())
32 ROOT::Experimental::RNTupleModel* ROOT::Experimental::RNTupleModel::Clone()
34 auto cloneModel =
new RNTupleModel();
35 auto cloneRootField =
static_cast<RFieldRoot*
>(fRootField->Clone(
""));
36 cloneModel->fRootField = std::unique_ptr<RFieldRoot>(cloneRootField);
37 cloneModel->fDefaultEntry = std::unique_ptr<REntry>(cloneRootField->GenerateEntry());
42 void ROOT::Experimental::RNTupleModel::AddField(std::unique_ptr<Detail::RFieldBase> field)
44 fDefaultEntry->AddValue(field->GenerateValue());
45 fRootField->Attach(std::move(field));
49 std::shared_ptr<ROOT::Experimental::RCollectionNTuple> ROOT::Experimental::RNTupleModel::MakeCollection(
50 std::string_view fieldName, std::unique_ptr<RNTupleModel> collectionModel)
52 auto collectionNTuple = std::make_shared<RCollectionNTuple>(std::move(collectionModel->fDefaultEntry));
53 auto field = std::make_unique<RFieldCollection>(fieldName, collectionNTuple, std::move(collectionModel));
54 fDefaultEntry->CaptureValue(field->CaptureValue(collectionNTuple->GetOffsetPtr()));
55 fRootField->Attach(std::move(field));
56 return collectionNTuple;
59 std::unique_ptr<ROOT::Experimental::REntry> ROOT::Experimental::RNTupleModel::CreateEntry()
61 auto entry = std::make_unique<REntry>();
62 for (
auto& f : *fRootField) {
63 if (f.GetParent() != GetRootField())
65 entry->AddValue(f.GenerateValue());