IVGCVSW-3722 Add front end support for ArgMinMax
[platform/upstream/armnn.git] / include / armnn / LayerVisitorBase.hpp
1 //
2 // Copyright © 2017 Arm Ltd. All rights reserved.
3 // SPDX-License-Identifier: MIT
4 //
5
6 #pragma once
7
8 #include <armnn/ILayerVisitor.hpp>
9
10 namespace armnn
11 {
12
13 struct VisitorThrowingPolicy
14 {
15     static void Apply(const std::string& errorMessage = "") { throw UnimplementedException(errorMessage); }
16 };
17
18 struct VisitorNoThrowPolicy
19 {
20     static void Apply(const std::string&) {}
21 };
22
23 // Visitor base class with empty implementations.
24 template<typename DefaultPolicy>
25 class LayerVisitorBase : public ILayerVisitor
26 {
27 protected:
28     LayerVisitorBase() {}
29     virtual ~LayerVisitorBase() {}
30
31 public:
32     void VisitAbsLayer(const IConnectableLayer*,
33                        const char*) override { DefaultPolicy::Apply(__func__); }
34
35     void VisitActivationLayer(const IConnectableLayer*,
36                               const ActivationDescriptor&,
37                               const char*) override { DefaultPolicy::Apply(__func__); }
38
39     void VisitAdditionLayer(const IConnectableLayer*,
40                             const char*) override { DefaultPolicy::Apply(__func__); }
41
42     void VisitArgMinMaxLayer(const IConnectableLayer*,
43                              const ArgMinMaxDescriptor&,
44                              const char*) override { DefaultPolicy::Apply(__func__); }
45
46     void VisitBatchNormalizationLayer(const IConnectableLayer*,
47                                       const BatchNormalizationDescriptor&,
48                                       const ConstTensor&,
49                                       const ConstTensor&,
50                                       const ConstTensor&,
51                                       const ConstTensor&,
52                                       const char*) override { DefaultPolicy::Apply(__func__); }
53
54     void VisitBatchToSpaceNdLayer(const IConnectableLayer*,
55                                   const BatchToSpaceNdDescriptor&,
56                                   const char*) override { DefaultPolicy::Apply(__func__); }
57
58     void VisitConcatLayer(const IConnectableLayer*,
59                           const ConcatDescriptor&,
60                           const char*) override { DefaultPolicy::Apply(__func__); }
61
62     void VisitConstantLayer(const IConnectableLayer*,
63                             const ConstTensor&,
64                             const char*) override { DefaultPolicy::Apply(__func__); }
65
66     void VisitConvolution2dLayer(const IConnectableLayer*,
67                                  const Convolution2dDescriptor&,
68                                  const ConstTensor&,
69                                  const Optional<ConstTensor>&,
70                                  const char*) override { DefaultPolicy::Apply(__func__); }
71
72     void VisitDepthwiseConvolution2dLayer(const IConnectableLayer*,
73                                           const DepthwiseConvolution2dDescriptor&,
74                                           const ConstTensor&,
75                                           const Optional<ConstTensor>&,
76                                           const char*) override { DefaultPolicy::Apply(__func__); }
77
78     void VisitDequantizeLayer(const IConnectableLayer*,
79                               const char*) override { DefaultPolicy::Apply(__func__); }
80
81     void VisitDetectionPostProcessLayer(const IConnectableLayer*,
82                                         const DetectionPostProcessDescriptor&,
83                                         const ConstTensor&,
84                                         const char*) override { DefaultPolicy::Apply(__func__); }
85
86     void VisitDivisionLayer(const IConnectableLayer*,
87                             const char*) override { DefaultPolicy::Apply(__func__); }
88
89     void VisitEqualLayer(const IConnectableLayer*,
90                          const char*) override { DefaultPolicy::Apply(__func__); }
91
92     void VisitFloorLayer(const IConnectableLayer*,
93                          const char*) override { DefaultPolicy::Apply(__func__); }
94
95     void VisitFullyConnectedLayer(const IConnectableLayer*,
96                                   const FullyConnectedDescriptor&,
97                                   const ConstTensor&,
98                                   const Optional<ConstTensor>&,
99                                   const char*) override { DefaultPolicy::Apply(__func__); }
100
101     void VisitGatherLayer(const IConnectableLayer*,
102                           const char*) override { DefaultPolicy::Apply(__func__); }
103
104     void VisitGreaterLayer(const IConnectableLayer*,
105                            const char*) override { DefaultPolicy::Apply(__func__); }
106
107     void VisitInputLayer(const IConnectableLayer*,
108                          LayerBindingId,
109                          const char*) override { DefaultPolicy::Apply(__func__); }
110
111     void VisitL2NormalizationLayer(const IConnectableLayer*,
112                                    const L2NormalizationDescriptor&,
113                                    const char*) override { DefaultPolicy::Apply(__func__); }
114
115     void VisitLstmLayer(const IConnectableLayer*,
116                         const LstmDescriptor&,
117                         const LstmInputParams&,
118                         const char*) override { DefaultPolicy::Apply(__func__); }
119
120     void VisitMaximumLayer(const IConnectableLayer*,
121                            const char*) override { DefaultPolicy::Apply(__func__); }
122
123     void VisitMeanLayer(const IConnectableLayer*,
124                         const MeanDescriptor&,
125                         const char*) override { DefaultPolicy::Apply(__func__); }
126
127     void VisitMergeLayer(const IConnectableLayer*,
128                          const char*) override { DefaultPolicy::Apply(__func__); }
129
130     void VisitMergerLayer(const IConnectableLayer*,
131                           const MergerDescriptor&,
132                           const char*) override { DefaultPolicy::Apply(__func__); }
133
134     void VisitMinimumLayer(const IConnectableLayer*,
135                            const char*) override { DefaultPolicy::Apply(__func__); }
136
137     void VisitMultiplicationLayer(const IConnectableLayer*,
138                                   const char*) override { DefaultPolicy::Apply(__func__); }
139
140     void VisitNormalizationLayer(const IConnectableLayer*,
141                                  const NormalizationDescriptor&,
142                                  const char*) override { DefaultPolicy::Apply(__func__); }
143
144     void VisitOutputLayer(const IConnectableLayer*,
145                           LayerBindingId,
146                           const char*) override { DefaultPolicy::Apply(__func__); }
147
148     void VisitPadLayer(const IConnectableLayer*,
149                        const PadDescriptor&,
150                        const char*) override { DefaultPolicy::Apply(__func__); }
151
152     void VisitPermuteLayer(const IConnectableLayer*,
153                            const PermuteDescriptor&,
154                            const char*) override { DefaultPolicy::Apply(__func__); }
155
156     void VisitPooling2dLayer(const IConnectableLayer*,
157                              const Pooling2dDescriptor&,
158                              const char*) override { DefaultPolicy::Apply(__func__); }
159
160     void VisitPreluLayer(const IConnectableLayer*,
161                          const char*) override { DefaultPolicy::Apply(__func__); }
162
163     void VisitQuantizeLayer(const IConnectableLayer*,
164                             const char*) override { DefaultPolicy::Apply(__func__); }
165
166     void VisitQuantizedLstmLayer(const IConnectableLayer*,
167                                  const QuantizedLstmInputParams&,
168                                  const char*) override { DefaultPolicy::Apply(__func__); }
169
170     void VisitReshapeLayer(const IConnectableLayer*,
171                            const ReshapeDescriptor&,
172                            const char*) override { DefaultPolicy::Apply(__func__); }
173
174     void VisitResizeBilinearLayer(const IConnectableLayer*,
175                                   const ResizeBilinearDescriptor&,
176                                   const char*) override { DefaultPolicy::Apply(__func__); }
177
178     void VisitResizeLayer(const IConnectableLayer*,
179                           const ResizeDescriptor&,
180                           const char*) override { DefaultPolicy::Apply(__func__); }
181
182     void VisitRsqrtLayer(const IConnectableLayer*,
183                          const char*) override { DefaultPolicy::Apply(__func__); }
184
185     void VisitSoftmaxLayer(const IConnectableLayer*,
186                            const SoftmaxDescriptor&,
187                            const char*) override { DefaultPolicy::Apply(__func__); }
188
189     void VisitSpaceToBatchNdLayer(const IConnectableLayer*,
190                                   const SpaceToBatchNdDescriptor&,
191                                   const char*) override { DefaultPolicy::Apply(__func__); }
192
193     void VisitSpaceToDepthLayer(const IConnectableLayer*,
194                                 const SpaceToDepthDescriptor&,
195                                 const char*) override { DefaultPolicy::Apply(__func__); }
196
197     void VisitSplitterLayer(const IConnectableLayer*,
198                             const ViewsDescriptor&,
199                             const char*) override { DefaultPolicy::Apply(__func__); }
200
201     void VisitStackLayer(const IConnectableLayer*,
202                          const StackDescriptor&,
203                          const char*) override { DefaultPolicy::Apply(__func__); }
204
205     void VisitStridedSliceLayer(const IConnectableLayer*,
206                                 const StridedSliceDescriptor&,
207                                 const char*) override { DefaultPolicy::Apply(__func__); }
208
209     void VisitSubtractionLayer(const IConnectableLayer*,
210                                const char*) override { DefaultPolicy::Apply(__func__); }
211
212     void VisitSwitchLayer(const IConnectableLayer*,
213                           const char*) override { DefaultPolicy::Apply(__func__); }
214
215     void VisitTransposeConvolution2dLayer(const IConnectableLayer*,
216                                           const TransposeConvolution2dDescriptor&,
217                                           const ConstTensor&,
218                                           const Optional<ConstTensor>&,
219                                           const char*) override { DefaultPolicy::Apply(__func__); }
220
221 };
222
223 } // namespace armnn