16 #ifndef ROOT7_RFieldValue
17 #define ROOT7_RFieldValue
24 namespace Experimental {
42 friend class RFieldBase;
53 RColumnElementBase fMappedElement;
56 RFieldValue() : fField(nullptr), fRawPtr(nullptr) {}
60 RFieldValue(
bool , Detail::RFieldBase* field,
void* value) : fField(field), fRawPtr(value) {}
61 RFieldValue(
bool ,
const Detail::RColumnElementBase& elem, Detail::RFieldBase* field,
void* value)
62 : fField(field), fRawPtr(value), fMappedElement(elem) {}
65 template <
typename T,
typename... ArgsT>
66 RFieldValue(RFieldBase* field, T* where, ArgsT&&... args) : fField(field), fRawPtr(where)
68 new (where) T(std::forward<ArgsT>(args)...);
71 template <
typename T,
typename... ArgsT>
72 RFieldValue(
const Detail::RColumnElementBase& elem, Detail::RFieldBase* field, T* where, ArgsT&&... args)
73 : fField(field), fRawPtr(where), fMappedElement(elem)
75 new (where) T(std::forward<ArgsT>(args)...);
79 T* Get()
const {
return static_cast<T*
>(fRawPtr); }
81 void* GetRawPtr()
const {
return fRawPtr; }
82 RFieldBase* GetField()
const {
return fField; }