12#ifndef O2_FRAMEWORK_CONCEPTS_H
13#define O2_FRAMEWORK_CONCEPTS_H
40concept not_void =
requires {
requires !std::same_as<T, void>; };
50 typename C::compatible_signature;
52 typename C::self_index_t;
53 requires std::same_as<typename C::self_index_t, std::true_type>;
59 typename C::binding_t;
84template <
typename T,
typename B>
86 { t.B::mColumnIterator };
90template <
typename...
C>
95using is_dynamic_t = std::conditional_t<is_dynamic_column<T>, std::true_type, std::false_type>;
98using is_indexing_t = std::conditional_t<is_indexing_column<T>, std::true_type, std::false_type>;
127concept is_table =
requires(T t) { t.isSOATable(); };
165concept is_join =
requires(T t) { t.isJoin(); };
199 typename aod::MetadataTrait<
o2::aod::Hash<T::originals[T::originals.size() - 1].desc_hash>>::metadata::base_table_t;
208 typename T::expression_pack_t{};
214 typename T::index_pack_t{};
243concept is_produces =
requires(T t) {
typename T::cursor_t;
typename T::persistent_table_t; &T::cursor; };
260 typename T::metadata;
261 typename T::expression_pack_t;
268 typename T::metadata;
269 typename T::placeholders_pack_t;
271 requires std::same_as<
decltype(t.needRecompilation),
bool>;
278 typename T::metadata;
289 requires std::same_as<
decltype(t.operator->()),
typename T::obj_t*>;
290 requires std::same_as<
decltype(t.object.get()),
typename T::obj_t*>;
296 requires std::same_as<
decltype(t.service),
typename T::service_t*>;
303 &T::updatePlaceholders;
306 requires std::same_as<
decltype(t.dataframeChanged),
bool>;
Defining ITS Vertex explicitly as messageable.
std::conditional_t< is_indexing_column< T >, std::true_type, std::false_type > is_indexing_t
std::conditional_t< is_dynamic_column< T >, std::true_type, std::false_type > is_dynamic_t
pack filtering helpers