1#pragma once
2#include <Common/Visitor.h>
3#include <Core/TypeListNumber.h>
4
5namespace DB::GatherUtils
6{
7
8template <typename T>
9struct NumericValueSource;
10
11struct GenericValueSource;
12
13template <typename ArraySource>
14struct NullableValueSource;
15
16template <typename Base>
17struct ConstSource;
18
19using NumericValueSources = typename TypeListMap<NumericValueSource, TypeListNumbers>::Type;
20using BasicValueSources = typename AppendToTypeList<GenericValueSource, NumericValueSources>::Type;
21using NullableValueSources = typename TypeListMap<NullableValueSource, BasicValueSources>::Type;
22using BasicAndNullableValueSources = typename TypeListConcat<BasicValueSources, NullableValueSources>::Type;
23using ConstValueSources = typename TypeListMap<ConstSource, BasicAndNullableValueSources>::Type;
24using TypeListValueSources = typename TypeListConcat<BasicAndNullableValueSources, ConstValueSources>::Type;
25
26class ValueSourceVisitor : public ApplyTypeListForClass<Visitor, TypeListValueSources>::Type {};
27
28template <typename Derived>
29class ValueSourceVisitorImpl : public VisitorImpl<Derived, ValueSourceVisitor> {};
30
31}
32