36 namespace GraphDrawing {
41 const std::vector<std::string> &prevNodeDefines);
52 template <
typename FilterF,
typename PrevDataFrame>
55 using TypeInd_t = std::make_index_sequence<ColumnTypes_t::list_size>;
62 std::vector<std::array<std::unique_ptr<RColumnReaderBase>, ColumnTypes_t::list_size>>
fValues;
64 std::array<bool, ColumnTypes_t::list_size>
fIsDefine;
70 fFilter(std::move(
f)), fColumnNames(columns), fPrevDataPtr(std::move(pd)), fPrevData(*fPrevDataPtr),
71 fValues(fNSlots), fIsDefine()
73 const auto nColumns = fColumnNames.size();
74 for (
auto i = 0u; i < nColumns; ++i)
75 fIsDefine[i] = fDefines.HasName(fColumnNames[i]);
86 if (entry != fLastCheckedEntry[slot]) {
87 if (!fPrevData.CheckFilters(slot, entry)) {
89 fLastResult[slot] =
false;
93 passed ? ++fAccepted[slot] : ++fRejected[slot];
94 fLastResult[slot] = passed;
96 fLastCheckedEntry[slot] = entry;
98 return fLastResult[slot];
101 template <
typename... ColTypes, std::size_t...
S>
107 return fFilter(fValues[slot][
S]->
template Get<ColTypes>(entry)...);
112 for (
auto &bookedBranch : fDefines.GetColumns())
113 bookedBranch.second->InitSlot(
r, slot);
115 fLoopManager->GetDataSource()};
124 fPrevData.PartialReport(rep);
131 if (fNStopsReceived == fNChildren)
132 fPrevData.StopProcessing();
139 if (fNChildren == 1 && fName.empty())
140 fPrevData.IncrChildrenCount();
146 fPrevData.IncrChildrenCount();
151 fPrevData.AddFilterName(
filters);
152 auto name = (HasName() ? fName :
"Unnamed Filter");
159 for (
auto &column : fDefines.GetColumns())
160 column.second->FinaliseSlot(slot);
162 for (
auto &
v : fValues[slot])
166 std::shared_ptr<RDFGraphDrawing::GraphNode>
GetGraph()
169 auto prevNode = fPrevData.GetGraph();
170 auto prevColumns = prevNode->GetDefinedColumns();
177 if (!thisNode->GetIsNew()) {
184 thisNode->AddDefinedColumns(fDefines.GetNames());
186 upmostNode->SetPrevNode(prevNode);