25 namespace GraphDrawing {
26 std::shared_ptr<GraphNode> CreateRangeNode(
const ROOT::Detail::RDF::RRangeBase *rangePtr);
33 namespace RDFGraphDrawing = ROOT::Internal::RDF::GraphDrawing;
35 template <
typename PrevData>
36 class RRange final :
public RRangeBase {
37 const std::shared_ptr<PrevData> fPrevDataPtr;
41 RRange(
unsigned int start,
unsigned int stop,
unsigned int stride, std::shared_ptr<PrevData> pd)
42 : RRangeBase(pd->GetLoopManagerUnchecked(), start, stop, stride, pd->GetLoopManagerUnchecked()->GetNSlots()),
43 fPrevDataPtr(std::move(pd)), fPrevData(*fPrevDataPtr) {}
45 RRange(
const RRange &) =
delete;
46 RRange &operator=(
const RRange &) =
delete;
49 ~RRange() { fLoopManager->Deregister(
this); }
52 bool CheckFilters(
unsigned int slot, Long64_t entry)
final
54 if (entry != fLastCheckedEntry) {
57 if (!fPrevData.CheckFilters(slot, entry)) {
63 if (fNProcessedEntries <= fStart || (fStop > 0 && fNProcessedEntries > fStop) ||
64 (fStride != 1 && fNProcessedEntries % fStride != 0))
68 if (fNProcessedEntries == fStop) {
70 fPrevData.StopProcessing();
73 fLastCheckedEntry = entry;
80 void Report(ROOT::RDF::RCutFlowReport &rep)
const final { fPrevData.PartialReport(rep); }
82 void PartialReport(ROOT::RDF::RCutFlowReport &rep)
const final { fPrevData.PartialReport(rep); }
84 void StopProcessing() final
87 if (fNStopsReceived == fNChildren && !fHasStopped)
88 fPrevData.StopProcessing();
91 void IncrChildrenCount() final
96 fPrevData.IncrChildrenCount();
100 void AddFilterName(std::vector<std::string> &filters) { fPrevData.AddFilterName(filters); }
101 std::shared_ptr<RDFGraphDrawing::GraphNode> GetGraph()
105 auto prevNode = fPrevData.GetGraph();
106 auto prevColumns = prevNode->GetDefinedColumns();
108 auto thisNode = RDFGraphDrawing::CreateRangeNode(
this);
113 if (!thisNode->GetIsNew()) {
116 thisNode->SetPrevNode(prevNode);
119 thisNode->AddDefinedColumns(prevColumns);
129 #endif // ROOT_RDFRANGE