1#pragma once
2#include <Common/Visitor.h>
3#include <Core/TypeListNumber.h>
4
5namespace DB::GatherUtils
6{
7
8template <typename T>
9struct NumericArraySource;
10
11struct GenericArraySource;
12
13template <typename ArraySource>
14struct NullableArraySource;
15
16template <typename Base>
17struct ConstSource;
18
19using NumericArraySources = typename TypeListMap<NumericArraySource, TypeListNumbers>::Type;
20using BasicArraySources = typename AppendToTypeList<GenericArraySource, NumericArraySources>::Type;
21using NullableArraySources = typename TypeListMap<NullableArraySource, BasicArraySources>::Type;
22using BasicAndNullableArraySources = typename TypeListConcat<BasicArraySources, NullableArraySources>::Type;
23using ConstArraySources = typename TypeListMap<ConstSource, BasicAndNullableArraySources>::Type;
24using TypeListArraySources = typename TypeListConcat<BasicAndNullableArraySources, ConstArraySources>::Type;
25
26class ArraySourceVisitor : public ApplyTypeListForClass<Visitor, TypeListArraySources>::Type {};
27
28template <typename Derived>
29class ArraySourceVisitorImpl : public VisitorImpl<Derived, ArraySourceVisitor> {};
30
31}
32