11 #ifndef ROOT_RDATASOURCE
12 #define ROOT_RDATASOURCE
31 std::string printValue(ROOT::RDF::RDataSource *ds);
43 class TPointerHolder {
45 void *fPointer{
nullptr};
48 TPointerHolder(
void *ptr) : fPointer(ptr) {}
49 void *GetPointer() {
return fPointer; }
50 void *GetPointerAddr() {
return &fPointer; }
51 virtual TPointerHolder *GetDeepCopy() = 0;
52 virtual ~TPointerHolder(){};
58 class TTypedPointerHolder final :
public TPointerHolder {
60 TTypedPointerHolder(T *ptr) : TPointerHolder((void *)ptr) {}
62 virtual TPointerHolder *GetDeepCopy()
64 const auto typedPtr =
static_cast<T *
>(fPointer);
65 return new TTypedPointerHolder(
new T(*typedPtr));
68 ~TTypedPointerHolder() {
delete static_cast<T *
>(fPointer); }
108 using Record_t = std::vector<void *>;
109 friend std::string cling::printValue(::ROOT::RDF::RDataSource *);
111 virtual std::string AsString() {
return "generic data source"; };
114 virtual ~RDataSource() =
default;
121 virtual void SetNSlots(
unsigned int nSlots) = 0;
126 virtual const std::vector<std::string> &GetColumnNames()
const = 0;
130 virtual bool HasColumn(std::string_view)
const = 0;
136 virtual std::string GetTypeName(std::string_view)
const = 0;
146 template <
typename T>
147 std::vector<T **> GetColumnReaders(std::string_view columnName)
149 auto typeErasedVec = GetColumnReadersImpl(columnName,
typeid(T));
150 std::vector<T **> typedVec(typeErasedVec.size());
151 std::transform(typeErasedVec.begin(), typeErasedVec.end(), typedVec.begin(),
152 [](
void *p) {
return static_cast<T **
>(p); });
164 virtual std::vector<std::pair<ULong64_t, ULong64_t>> GetEntryRanges() = 0;
175 virtual bool SetEntry(
unsigned int slot, ULong64_t entry) = 0;
184 virtual void Initialise() {}
192 virtual void InitSlot(
unsigned int , ULong64_t ) {}
199 virtual void FinaliseSlot(
unsigned int ) {}
205 virtual void Finalise() {}
211 virtual std::string GetLabel() {
return "Custom Datasource"; }
215 virtual Record_t GetColumnReadersImpl(std::string_view name,
const std::type_info &) = 0;
224 inline std::string printValue(ROOT::RDF::RDataSource *ds)
226 return ds->AsString();
230 #endif // ROOT_TDATASOURCE