]> git.proxmox.com Git - ceph.git/blame - ceph/src/arrow/cpp/src/gandiva/dex_visitor.h
import quincy 17.2.0
[ceph.git] / ceph / src / arrow / cpp / src / gandiva / dex_visitor.h
CommitLineData
1d09f67e
TL
1// Licensed to the Apache Software Foundation (ASF) under one
2// or more contributor license agreements. See the NOTICE file
3// distributed with this work for additional information
4// regarding copyright ownership. The ASF licenses this file
5// to you under the Apache License, Version 2.0 (the
6// "License"); you may not use this file except in compliance
7// with the License. You may obtain a copy of the License at
8//
9// http://www.apache.org/licenses/LICENSE-2.0
10//
11// Unless required by applicable law or agreed to in writing,
12// software distributed under the License is distributed on an
13// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14// KIND, either express or implied. See the License for the
15// specific language governing permissions and limitations
16// under the License.
17
18#pragma once
19
20#include <cmath>
21#include <string>
22
23#include "arrow/util/logging.h"
24#include "gandiva/decimal_scalar.h"
25#include "gandiva/visibility.h"
26
27namespace gandiva {
28
29class VectorReadValidityDex;
30class VectorReadFixedLenValueDex;
31class VectorReadVarLenValueDex;
32class LocalBitMapValidityDex;
33class LiteralDex;
34class TrueDex;
35class FalseDex;
36class NonNullableFuncDex;
37class NullableNeverFuncDex;
38class NullableInternalFuncDex;
39class IfDex;
40class BooleanAndDex;
41class BooleanOrDex;
42template <typename Type>
43class InExprDexBase;
44
45/// \brief Visitor for decomposed expression.
46class GANDIVA_EXPORT DexVisitor {
47 public:
48 virtual ~DexVisitor() = default;
49
50 virtual void Visit(const VectorReadValidityDex& dex) = 0;
51 virtual void Visit(const VectorReadFixedLenValueDex& dex) = 0;
52 virtual void Visit(const VectorReadVarLenValueDex& dex) = 0;
53 virtual void Visit(const LocalBitMapValidityDex& dex) = 0;
54 virtual void Visit(const TrueDex& dex) = 0;
55 virtual void Visit(const FalseDex& dex) = 0;
56 virtual void Visit(const LiteralDex& dex) = 0;
57 virtual void Visit(const NonNullableFuncDex& dex) = 0;
58 virtual void Visit(const NullableNeverFuncDex& dex) = 0;
59 virtual void Visit(const NullableInternalFuncDex& dex) = 0;
60 virtual void Visit(const IfDex& dex) = 0;
61 virtual void Visit(const BooleanAndDex& dex) = 0;
62 virtual void Visit(const BooleanOrDex& dex) = 0;
63 virtual void Visit(const InExprDexBase<int32_t>& dex) = 0;
64 virtual void Visit(const InExprDexBase<int64_t>& dex) = 0;
65 virtual void Visit(const InExprDexBase<float>& dex) = 0;
66 virtual void Visit(const InExprDexBase<double>& dex) = 0;
67 virtual void Visit(const InExprDexBase<gandiva::DecimalScalar128>& dex) = 0;
68 virtual void Visit(const InExprDexBase<std::string>& dex) = 0;
69};
70
71/// Default implementation with only DCHECK().
72#define VISIT_DCHECK(DEX_CLASS) \
73 void Visit(const DEX_CLASS& dex) override { DCHECK(0); }
74
75class GANDIVA_EXPORT DexDefaultVisitor : public DexVisitor {
76 VISIT_DCHECK(VectorReadValidityDex)
77 VISIT_DCHECK(VectorReadFixedLenValueDex)
78 VISIT_DCHECK(VectorReadVarLenValueDex)
79 VISIT_DCHECK(LocalBitMapValidityDex)
80 VISIT_DCHECK(TrueDex)
81 VISIT_DCHECK(FalseDex)
82 VISIT_DCHECK(LiteralDex)
83 VISIT_DCHECK(NonNullableFuncDex)
84 VISIT_DCHECK(NullableNeverFuncDex)
85 VISIT_DCHECK(NullableInternalFuncDex)
86 VISIT_DCHECK(IfDex)
87 VISIT_DCHECK(BooleanAndDex)
88 VISIT_DCHECK(BooleanOrDex)
89 VISIT_DCHECK(InExprDexBase<int32_t>)
90 VISIT_DCHECK(InExprDexBase<int64_t>)
91 VISIT_DCHECK(InExprDexBase<float>)
92 VISIT_DCHECK(InExprDexBase<double>)
93 VISIT_DCHECK(InExprDexBase<gandiva::DecimalScalar128>)
94 VISIT_DCHECK(InExprDexBase<std::string>)
95};
96
97} // namespace gandiva