16 #ifndef ROOT7_RNTupleModel
17 #define ROOT7_RNTupleModel
31 namespace Experimental {
33 class RCollectionNTuple;
49 std::unique_ptr<RFieldRoot> fRootField;
51 std::unique_ptr<REntry> fDefaultEntry;
55 RNTupleModel(
const RNTupleModel&) =
delete;
56 RNTupleModel& operator =(
const RNTupleModel&) =
delete;
57 ~RNTupleModel() =
default;
59 RNTupleModel* Clone();
60 static std::unique_ptr<RNTupleModel> Create() {
return std::make_unique<RNTupleModel>(); }
63 template <
typename T,
typename... ArgsT>
64 std::shared_ptr<T> MakeField(std::string_view fieldName, ArgsT&&... args) {
65 auto field = std::make_unique<RField<T>>(fieldName);
66 auto ptr = fDefaultEntry->AddValue<T>(field.get(), std::forward<ArgsT>(args)...);
67 fRootField->Attach(std::move(field));
72 void AddField(std::unique_ptr<Detail::RFieldBase> field);
75 void AddField(std::string_view fieldName, T* fromWhere) {
76 auto field = std::make_unique<RField<T>>(fieldName);
77 fDefaultEntry->CaptureValue(field->CaptureValue(fromWhere));
78 fRootField->Attach(std::move(field));
82 T* Get(std::string_view fieldName) {
83 return fDefaultEntry->Get<T>(fieldName);
87 std::shared_ptr<RCollectionNTuple> MakeCollection(
88 std::string_view fieldName,
89 std::unique_ptr<RNTupleModel> collectionModel);
91 RFieldRoot *GetRootField()
const {
return fRootField.get(); }
92 REntry* GetDefaultEntry() {
return fDefaultEntry.get(); }
93 std::unique_ptr<REntry> CreateEntry();
94 RNTupleVersion GetVersion()
const {
return RNTupleVersion(); }
95 std::string GetDescription()
const {
return ""; }
96 RNTupleUuid GetUuid()
const {
return RNTupleUuid(); }