30 namespace Experimental {
43 std::vector<Detail::RFieldValue> fValues;
46 std::vector<std::shared_ptr<void>> fValuePtrs;
48 std::vector<std::size_t> fManagedValues;
51 using Iterator_t = decltype(fValues)::iterator;
54 REntry(
const REntry& other) =
delete;
55 REntry& operator=(
const REntry& other) =
delete;
59 void AddValue(
const Detail::RFieldValue& value);
62 void CaptureValue(
const Detail::RFieldValue& value);
65 template<
typename T,
typename... ArgsT>
66 std::shared_ptr<T> AddValue(RField<T>* field, ArgsT&&... args) {
67 auto ptr = std::make_shared<T>(std::forward<ArgsT>(args)...);
68 fValues.emplace_back(Detail::RFieldValue(field->CaptureValue(ptr.get())));
69 fValuePtrs.emplace_back(ptr);
73 Detail::RFieldValue GetValue(std::string_view fieldName) {
74 for (
auto& v : fValues) {
75 if (v.GetField()->GetName() == fieldName)
78 return Detail::RFieldValue();
82 T* Get(std::string_view fieldName) {
83 for (
auto& v : fValues) {
84 if (v.GetField()->GetName() == fieldName) {
85 R__ASSERT(v.GetField()->GetType() == RField<T>::TypeName());
86 return static_cast<T*
>(v.GetRawPtr());
92 Iterator_t begin() {
return fValues.begin(); }
93 Iterator_t end() {
return fValues.end(); }