11#ifndef ROOT_RRESULTPTR
12#define ROOT_RRESULTPTR
43RResultPtr<T>
MakeResultPtr(
const std::shared_ptr<T> &
r, RLoopManager &df,
44 std::shared_ptr<ROOT::Internal::RDF::RActionBase> actionPtr);
74 using SPT_t = std::shared_ptr<T>;
77 template <
typename T1>
80 template <
typename T1>
82 std::shared_ptr<RDFInternal::RActionBase>);
83 template <
class T1,
class T2>
85 template <
class T1,
class T2>
99 template <typename V, bool hasBeginEnd = TTraits::HasBeginAndEnd<V>::value>
100 struct RIterationHelper {
101 using Iterator_t =
void;
102 void GetBegin(
const V &) {
static_assert(
sizeof(V) == 0,
"It does not make sense to ask begin for this class."); }
103 void GetEnd(
const V &) {
static_assert(
sizeof(V) == 0,
"It does not make sense to ask end for this class."); }
106 template <
typename V>
107 struct RIterationHelper<V, true> {
108 using Iterator_t =
decltype(std::begin(std::declval<V>()));
109 static Iterator_t GetBegin(
const V &
v) {
return std::begin(
v); };
110 static Iterator_t GetEnd(
const V &
v) {
return std::end(
v); };
136 std::shared_ptr<RDFInternal::RActionBase> actionPtr)
150 explicit operator bool()
const {
return bool(
fObjPtr); }
151 template<typename TO, typename std::enable_if<std::is_convertible<T, TO>::value,
int>
::type = 0 >
180 typename RIterationHelper<T>::Iterator_t
begin()
184 return RIterationHelper<T>::GetBegin(*
fObjPtr);
189 typename RIterationHelper<T>::Iterator_t
end()
193 return RIterationHelper<T>::GetEnd(*
fObjPtr);
243 auto c = [nSlots, actionPtr, callback](
unsigned int slot) {
244 if (slot != nSlots - 1)
246 auto partialResult =
static_cast<Value_t *
>(actionPtr->PartialUpdate(slot));
247 callback(*partialResult);
287 auto c = [actionPtr, callback](
unsigned int slot) {
288 auto partialResult =
static_cast<Value_t *
>(actionPtr->PartialUpdate(slot));
289 callback(slot, *partialResult);
302template <
class T1,
class T2>
308template <
class T1,
class T2>
unsigned long long ULong64_t
typedef void((*Func_t)())
The head node of a RDF computation graph.
void Run()
Start the event loop with a different mechanism depending on IMT/no IMT, data source/no data source.
unsigned int GetNSlots() const
void RegisterCallback(ULong64_t everyNEvents, std::function< void(unsigned int)> &&f)
Helper class that provides the operation graph nodes.
Smart pointer for the return type of actions.
void TriggerRun()
Triggers the event loop in the RLoopManager.
RResultPtr(RResultPtr &&)=default
T * GetPtr()
Get the pointer to the encapsulated object.
RResultPtr< T > & OnPartialResult(ULong64_t everyNEvents, std::function< void(T &)> callback)
Register a callback that RDataFrame will execute "everyNEvents" on a partial result.
RDFDetail::RLoopManager * fLoopManager
Non-owning pointer to the RLoopManager at the root of this computation graph.
friend bool operator!=(const RResultPtr< T1 > &lhs, const RResultPtr< T2 > &rhs)
RIterationHelper< T >::Iterator_t begin()
Return an iterator to the beginning of the contained object if this makes sense, throw a compilation ...
T Value_t
Convenience alias to simplify access to proxied type.
T * Get()
Get the pointer to the encapsulated result.
const T & GetValue()
Get a const reference to the encapsulated object.
RResultPtr(const RResultPtr &)=default
T & operator*()
Get a pointer to the encapsulated object.
RResultPtr & operator=(const RResultPtr &)=default
RResultPtr< T > & OnPartialResultSlot(ULong64_t everyNEvents, std::function< void(unsigned int, T &)> callback)
Register a callback that RDataFrame will execute in each worker thread concurrently on that thread's ...
RResultPtr & operator=(RResultPtr &&)=default
friend bool operator==(const RResultPtr< T1 > &lhs, const RResultPtr< T2 > &rhs)
std::shared_ptr< RDFInternal::RActionBase > fActionPtr
Owning pointer to the action that will produce this result.
std::shared_ptr< T > SPT_t
T * operator->()
Get a pointer to the encapsulated object.
SPT_t fObjPtr
Shared pointer encapsulating the wrapped result.
static constexpr ULong64_t kOnce
Convenience definition to express a callback must be executed once.
RResultPtr(std::shared_ptr< T > objPtr, RDFDetail::RLoopManager *lm, std::shared_ptr< RDFInternal::RActionBase > actionPtr)
RIterationHelper< T >::Iterator_t end()
Return an iterator to the end of the contained object if this makes sense, throw a compilation error ...
RResultPtr< T > MakeResultPtr(const std::shared_ptr< T > &r, RLoopManager &df, std::shared_ptr< ROOT::Internal::RDF::RActionBase > actionPtr)
Create a RResultPtr and set its pointer to the corresponding RAction This overload is invoked by non-...
bool operator!=(const RResultPtr< T1 > &lhs, const RResultPtr< T2 > &rhs)
bool operator==(const RResultPtr< T1 > &lhs, const RResultPtr< T2 > &rhs)
void function(const Char_t *name_, T fun, const Char_t *docstring=0)
ROOT type_traits extensions.
Namespace for new ROOT classes and functions.