1#pragma once
2#include <Common/Visitor.h>
3#include <Core/TypeListNumber.h>
4
5namespace DB::GatherUtils
6{
7
8template <typename T>
9struct NumericArraySink;
10
11struct GenericArraySink;
12
13template <typename ArraySink>
14struct NullableArraySink;
15
16using NumericArraySinks = typename TypeListMap<NumericArraySink, TypeListNumbers>::Type;
17using BasicArraySinks = typename AppendToTypeList<GenericArraySink, NumericArraySinks>::Type;
18using NullableArraySinks = typename TypeListMap<NullableArraySink, BasicArraySinks>::Type;
19using TypeListArraySinks = typename TypeListConcat<BasicArraySinks, NullableArraySinks>::Type;
20
21class ArraySinkVisitor : public ApplyTypeListForClass<Visitor, TypeListArraySinks>::Type {};
22
23template <typename Derived>
24class ArraySinkVisitorImpl : public VisitorImpl<Derived, ArraySinkVisitor> {};
25
26}
27