25 #include <type_traits>
37 using ColumnNames_t = std::vector<std::string>;
40 class RCustomColumnBase;
43 struct RInferredType {
51 using namespace ROOT::TypeTraits;
52 using namespace ROOT::Detail::RDF;
53 using namespace ROOT::RDF;
57 struct IsVector_t :
public std::false_type {};
59 template <
typename T,
typename A>
60 struct IsVector_t<std::vector<T, A>> :
public std::true_type {};
62 const std::type_info &TypeName2TypeID(
const std::string &name);
64 std::string TypeID2TypeName(
const std::type_info &
id);
66 std::string ColumnName2ColumnTypeName(
const std::string &colName,
unsigned int namespaceID, TTree *, RDataSource *,
67 bool isCustomColumn,
bool vector2rvec =
true,
unsigned int customColID = 0);
69 char TypeName2ROOTTypeName(
const std::string &b);
71 unsigned int GetNSlots();
74 template <
bool MustRemove,
typename TypeList>
75 struct RemoveFirstParameterIf {
76 using type = TypeList;
79 template <
typename TypeList>
80 struct RemoveFirstParameterIf<true, TypeList> {
81 using type = RemoveFirstParameter_t<TypeList>;
84 template <
bool MustRemove,
typename TypeList>
85 using RemoveFirstParameterIf_t =
typename RemoveFirstParameterIf<MustRemove, TypeList>::type;
87 template <
bool MustRemove,
typename TypeList>
88 struct RemoveFirstTwoParametersIf {
89 using type = TypeList;
92 template <
typename TypeList>
93 struct RemoveFirstTwoParametersIf<true, TypeList> {
94 using typeTmp =
typename RemoveFirstParameterIf<true, TypeList>::type;
95 using type =
typename RemoveFirstParameterIf<true, typeTmp>::type;
98 template <
bool MustRemove,
typename TypeList>
99 using RemoveFirstTwoParametersIf_t =
typename RemoveFirstTwoParametersIf<MustRemove, TypeList>::type;
103 struct IsRVec_t :
public std::false_type {};
105 template <
typename T>
106 struct IsRVec_t<ROOT::VecOps::RVec<T>> :
public std::true_type {};
110 template <typename T, bool IsContainer = IsContainer<typename std::decay<T>::type>::value>
112 using value_type =
typename T::value_type;
115 template <
typename T>
116 struct ValueType<T, false> {
117 using value_type = T;
120 template <
typename T>
121 struct ValueType<ROOT::VecOps::RVec<T>, false> {
122 using value_type = T;
125 std::vector<std::string> ReplaceDotWithUnderscore(
const std::vector<std::string> &columnNames);
128 template <
typename T>
129 void Erase(
const T &that, std::vector<T> &v)
131 v.erase(std::remove(v.begin(), v.end(), that), v.end());
135 void InterpreterDeclare(
const std::string &code);
140 Long64_t InterpreterCalc(
const std::string &code,
const std::string &context =
"");