• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 //
2 // Copyright © 2017 Arm Ltd and Contributors. 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 {
Applyarmnn::VisitorThrowingPolicy15     static void Apply(const std::string& errorMessage = "") { throw UnimplementedException(errorMessage); }
16 };
17 
18 struct VisitorNoThrowPolicy
19 {
Applyarmnn::VisitorNoThrowPolicy20     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:
LayerVisitorBase()28     LayerVisitorBase() {}
~LayerVisitorBase()29     virtual ~LayerVisitorBase() {}
30 
31 public:
VisitAbsLayer(const IConnectableLayer *,const char *)32     void VisitAbsLayer(const IConnectableLayer*,
33                        const char*) override { DefaultPolicy::Apply(__func__); }
34 
VisitActivationLayer(const IConnectableLayer *,const ActivationDescriptor &,const char *)35     void VisitActivationLayer(const IConnectableLayer*,
36                               const ActivationDescriptor&,
37                               const char*) override { DefaultPolicy::Apply(__func__); }
38 
VisitAdditionLayer(const IConnectableLayer *,const char *)39     void VisitAdditionLayer(const IConnectableLayer*,
40                             const char*) override { DefaultPolicy::Apply(__func__); }
41 
VisitArgMinMaxLayer(const IConnectableLayer *,const ArgMinMaxDescriptor &,const char *)42     void VisitArgMinMaxLayer(const IConnectableLayer*,
43                              const ArgMinMaxDescriptor&,
44                              const char*) override { DefaultPolicy::Apply(__func__); }
45 
VisitBatchNormalizationLayer(const IConnectableLayer *,const BatchNormalizationDescriptor &,const ConstTensor &,const ConstTensor &,const ConstTensor &,const ConstTensor &,const char *)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 
VisitBatchToSpaceNdLayer(const IConnectableLayer *,const BatchToSpaceNdDescriptor &,const char *)54     void VisitBatchToSpaceNdLayer(const IConnectableLayer*,
55                                   const BatchToSpaceNdDescriptor&,
56                                   const char*) override { DefaultPolicy::Apply(__func__); }
57 
VisitComparisonLayer(const IConnectableLayer *,const ComparisonDescriptor &,const char *)58     void VisitComparisonLayer(const IConnectableLayer*,
59                               const ComparisonDescriptor&,
60                               const char*) override { DefaultPolicy::Apply(__func__); }
61 
VisitConcatLayer(const IConnectableLayer *,const ConcatDescriptor &,const char *)62     void VisitConcatLayer(const IConnectableLayer*,
63                           const ConcatDescriptor&,
64                           const char*) override { DefaultPolicy::Apply(__func__); }
65 
VisitConstantLayer(const IConnectableLayer *,const ConstTensor &,const char *)66     void VisitConstantLayer(const IConnectableLayer*,
67                             const ConstTensor&,
68                             const char*) override { DefaultPolicy::Apply(__func__); }
69 
VisitConvolution2dLayer(const IConnectableLayer *,const Convolution2dDescriptor &,const ConstTensor &,const Optional<ConstTensor> &,const char *)70     void VisitConvolution2dLayer(const IConnectableLayer*,
71                                  const Convolution2dDescriptor&,
72                                  const ConstTensor&,
73                                  const Optional<ConstTensor>&,
74                                  const char*) override { DefaultPolicy::Apply(__func__); }
75 
VisitDepthToSpaceLayer(const IConnectableLayer *,const DepthToSpaceDescriptor &,const char *)76     void VisitDepthToSpaceLayer(const IConnectableLayer*,
77                                 const DepthToSpaceDescriptor&,
78                                 const char*) override { DefaultPolicy::Apply(__func__); }
79 
VisitDepthwiseConvolution2dLayer(const IConnectableLayer *,const DepthwiseConvolution2dDescriptor &,const ConstTensor &,const Optional<ConstTensor> &,const char *)80     void VisitDepthwiseConvolution2dLayer(const IConnectableLayer*,
81                                           const DepthwiseConvolution2dDescriptor&,
82                                           const ConstTensor&,
83                                           const Optional<ConstTensor>&,
84                                           const char*) override { DefaultPolicy::Apply(__func__); }
85 
VisitDequantizeLayer(const IConnectableLayer *,const char *)86     void VisitDequantizeLayer(const IConnectableLayer*,
87                               const char*) override { DefaultPolicy::Apply(__func__); }
88 
VisitDetectionPostProcessLayer(const IConnectableLayer *,const DetectionPostProcessDescriptor &,const ConstTensor &,const char *)89     void VisitDetectionPostProcessLayer(const IConnectableLayer*,
90                                         const DetectionPostProcessDescriptor&,
91                                         const ConstTensor&,
92                                         const char*) override { DefaultPolicy::Apply(__func__); }
93 
VisitDivisionLayer(const IConnectableLayer *,const char *)94     void VisitDivisionLayer(const IConnectableLayer*,
95                             const char*) override { DefaultPolicy::Apply(__func__); }
96 
VisitElementwiseUnaryLayer(const IConnectableLayer *,const ElementwiseUnaryDescriptor &,const char *)97     void VisitElementwiseUnaryLayer(const IConnectableLayer*,
98                                     const ElementwiseUnaryDescriptor&,
99                                     const char*) override { DefaultPolicy::Apply(__func__); }
100 
VisitEqualLayer(const IConnectableLayer *,const char *)101     void VisitEqualLayer(const IConnectableLayer*,
102                          const char*) override { DefaultPolicy::Apply(__func__); }
103 
VisitFillLayer(const IConnectableLayer *,const FillDescriptor &,const char *)104     void VisitFillLayer(const IConnectableLayer*,
105                         const FillDescriptor&,
106                         const char*) override { DefaultPolicy::Apply(__func__); }
107 
VisitFloorLayer(const IConnectableLayer *,const char *)108     void VisitFloorLayer(const IConnectableLayer*,
109                          const char*) override { DefaultPolicy::Apply(__func__); }
110 
VisitFullyConnectedLayer(const IConnectableLayer *,const FullyConnectedDescriptor &,const ConstTensor &,const Optional<ConstTensor> &,const char *)111     void VisitFullyConnectedLayer(const IConnectableLayer*,
112                                   const FullyConnectedDescriptor&,
113                                   const ConstTensor&,
114                                   const Optional<ConstTensor>&,
115                                   const char*) override { DefaultPolicy::Apply(__func__); }
116 
117     ARMNN_DEPRECATED_MSG("Use VisitGatherLayer with descriptor instead")
VisitGatherLayer(const IConnectableLayer *,const char *)118     void VisitGatherLayer(const IConnectableLayer*,
119                           const char*) override { DefaultPolicy::Apply(__func__); }
120 
VisitGatherLayer(const IConnectableLayer *,const GatherDescriptor &,const char *)121     void VisitGatherLayer(const IConnectableLayer*,
122                           const GatherDescriptor&,
123                           const char*) override { DefaultPolicy::Apply(__func__); }
124 
VisitGreaterLayer(const IConnectableLayer *,const char *)125     void VisitGreaterLayer(const IConnectableLayer*,
126                            const char*) override { DefaultPolicy::Apply(__func__); }
127 
VisitInputLayer(const IConnectableLayer *,LayerBindingId,const char *)128     void VisitInputLayer(const IConnectableLayer*,
129                          LayerBindingId,
130                          const char*) override { DefaultPolicy::Apply(__func__); }
131 
VisitInstanceNormalizationLayer(const IConnectableLayer *,const InstanceNormalizationDescriptor &,const char *)132     void VisitInstanceNormalizationLayer(const IConnectableLayer*,
133                                          const InstanceNormalizationDescriptor&,
134                                          const char*) override { DefaultPolicy::Apply(__func__); }
135 
VisitL2NormalizationLayer(const IConnectableLayer *,const L2NormalizationDescriptor &,const char *)136     void VisitL2NormalizationLayer(const IConnectableLayer*,
137                                    const L2NormalizationDescriptor&,
138                                    const char*) override { DefaultPolicy::Apply(__func__); }
139 
VisitLogSoftmaxLayer(const IConnectableLayer *,const LogSoftmaxDescriptor &,const char *)140     void VisitLogSoftmaxLayer(const IConnectableLayer*,
141                               const LogSoftmaxDescriptor&,
142                               const char*) override { DefaultPolicy::Apply(__func__); }
143 
VisitLogicalBinaryLayer(const IConnectableLayer *,const LogicalBinaryDescriptor &,const char *)144     void VisitLogicalBinaryLayer(const IConnectableLayer*,
145                                  const LogicalBinaryDescriptor&,
146                                  const char*) override {DefaultPolicy::Apply(__func__); }
147 
VisitLstmLayer(const IConnectableLayer *,const LstmDescriptor &,const LstmInputParams &,const char *)148     void VisitLstmLayer(const IConnectableLayer*,
149                         const LstmDescriptor&,
150                         const LstmInputParams&,
151                         const char*) override { DefaultPolicy::Apply(__func__); }
152 
VisitMaximumLayer(const IConnectableLayer *,const char *)153     void VisitMaximumLayer(const IConnectableLayer*,
154                            const char*) override { DefaultPolicy::Apply(__func__); }
155 
VisitMeanLayer(const IConnectableLayer *,const MeanDescriptor &,const char *)156     void VisitMeanLayer(const IConnectableLayer*,
157                         const MeanDescriptor&,
158                         const char*) override { DefaultPolicy::Apply(__func__); }
159 
VisitMergeLayer(const IConnectableLayer *,const char *)160     void VisitMergeLayer(const IConnectableLayer*,
161                          const char*) override { DefaultPolicy::Apply(__func__); }
162 
VisitMergerLayer(const IConnectableLayer *,const MergerDescriptor &,const char *)163     void VisitMergerLayer(const IConnectableLayer*,
164                           const MergerDescriptor&,
165                           const char*) override { DefaultPolicy::Apply(__func__); }
166 
VisitMinimumLayer(const IConnectableLayer *,const char *)167     void VisitMinimumLayer(const IConnectableLayer*,
168                            const char*) override { DefaultPolicy::Apply(__func__); }
169 
VisitMultiplicationLayer(const IConnectableLayer *,const char *)170     void VisitMultiplicationLayer(const IConnectableLayer*,
171                                   const char*) override { DefaultPolicy::Apply(__func__); }
172 
VisitNormalizationLayer(const IConnectableLayer *,const NormalizationDescriptor &,const char *)173     void VisitNormalizationLayer(const IConnectableLayer*,
174                                  const NormalizationDescriptor&,
175                                  const char*) override { DefaultPolicy::Apply(__func__); }
176 
VisitOutputLayer(const IConnectableLayer *,LayerBindingId,const char *)177     void VisitOutputLayer(const IConnectableLayer*,
178                           LayerBindingId,
179                           const char*) override { DefaultPolicy::Apply(__func__); }
180 
VisitPadLayer(const IConnectableLayer *,const PadDescriptor &,const char *)181     void VisitPadLayer(const IConnectableLayer*,
182                        const PadDescriptor&,
183                        const char*) override { DefaultPolicy::Apply(__func__); }
184 
VisitPermuteLayer(const IConnectableLayer *,const PermuteDescriptor &,const char *)185     void VisitPermuteLayer(const IConnectableLayer*,
186                            const PermuteDescriptor&,
187                            const char*) override { DefaultPolicy::Apply(__func__); }
188 
VisitPooling2dLayer(const IConnectableLayer *,const Pooling2dDescriptor &,const char *)189     void VisitPooling2dLayer(const IConnectableLayer*,
190                              const Pooling2dDescriptor&,
191                              const char*) override { DefaultPolicy::Apply(__func__); }
192 
VisitPreluLayer(const IConnectableLayer *,const char *)193     void VisitPreluLayer(const IConnectableLayer*,
194                          const char*) override { DefaultPolicy::Apply(__func__); }
195 
VisitQuantizeLayer(const IConnectableLayer *,const char *)196     void VisitQuantizeLayer(const IConnectableLayer*,
197                             const char*) override { DefaultPolicy::Apply(__func__); }
198 
VisitQLstmLayer(const IConnectableLayer *,const QLstmDescriptor &,const LstmInputParams &,const char *)199     void VisitQLstmLayer(const IConnectableLayer*,
200                          const QLstmDescriptor&,
201                          const LstmInputParams&,
202                          const char*) override { DefaultPolicy::Apply(__func__); }
203 
VisitQuantizedLstmLayer(const IConnectableLayer *,const QuantizedLstmInputParams &,const char *)204     void VisitQuantizedLstmLayer(const IConnectableLayer*,
205                                  const QuantizedLstmInputParams&,
206                                  const char*) override { DefaultPolicy::Apply(__func__); }
207 
VisitRankLayer(const IConnectableLayer *,const char *)208     void VisitRankLayer(const IConnectableLayer*,
209                         const char*) override { DefaultPolicy::Apply(__func__); }
210 
VisitReshapeLayer(const IConnectableLayer *,const ReshapeDescriptor &,const char *)211     void VisitReshapeLayer(const IConnectableLayer*,
212                            const ReshapeDescriptor&,
213                            const char*) override { DefaultPolicy::Apply(__func__); }
214 
VisitResizeBilinearLayer(const IConnectableLayer *,const ResizeBilinearDescriptor &,const char *)215     void VisitResizeBilinearLayer(const IConnectableLayer*,
216                                   const ResizeBilinearDescriptor&,
217                                   const char*) override { DefaultPolicy::Apply(__func__); }
218 
VisitResizeLayer(const IConnectableLayer *,const ResizeDescriptor &,const char *)219     void VisitResizeLayer(const IConnectableLayer*,
220                           const ResizeDescriptor&,
221                           const char*) override { DefaultPolicy::Apply(__func__); }
222 
VisitRsqrtLayer(const IConnectableLayer *,const char *)223     void VisitRsqrtLayer(const IConnectableLayer*,
224                          const char*) override { DefaultPolicy::Apply(__func__); }
225 
VisitSliceLayer(const IConnectableLayer *,const SliceDescriptor &,const char *)226     void VisitSliceLayer(const IConnectableLayer*,
227                          const SliceDescriptor&,
228                          const char*) override { DefaultPolicy::Apply(__func__); }
229 
VisitSoftmaxLayer(const IConnectableLayer *,const SoftmaxDescriptor &,const char *)230     void VisitSoftmaxLayer(const IConnectableLayer*,
231                            const SoftmaxDescriptor&,
232                            const char*) override { DefaultPolicy::Apply(__func__); }
233 
VisitSpaceToBatchNdLayer(const IConnectableLayer *,const SpaceToBatchNdDescriptor &,const char *)234     void VisitSpaceToBatchNdLayer(const IConnectableLayer*,
235                                   const SpaceToBatchNdDescriptor&,
236                                   const char*) override { DefaultPolicy::Apply(__func__); }
237 
VisitSpaceToDepthLayer(const IConnectableLayer *,const SpaceToDepthDescriptor &,const char *)238     void VisitSpaceToDepthLayer(const IConnectableLayer*,
239                                 const SpaceToDepthDescriptor&,
240                                 const char*) override { DefaultPolicy::Apply(__func__); }
241 
VisitSplitterLayer(const IConnectableLayer *,const ViewsDescriptor &,const char *)242     void VisitSplitterLayer(const IConnectableLayer*,
243                             const ViewsDescriptor&,
244                             const char*) override { DefaultPolicy::Apply(__func__); }
245 
VisitStackLayer(const IConnectableLayer *,const StackDescriptor &,const char *)246     void VisitStackLayer(const IConnectableLayer*,
247                          const StackDescriptor&,
248                          const char*) override { DefaultPolicy::Apply(__func__); }
249 
VisitStandInLayer(const IConnectableLayer *,const StandInDescriptor &,const char *)250     void VisitStandInLayer(const IConnectableLayer*,
251                            const StandInDescriptor&,
252                            const char*) override { DefaultPolicy::Apply(__func__); }
253 
VisitStridedSliceLayer(const IConnectableLayer *,const StridedSliceDescriptor &,const char *)254     void VisitStridedSliceLayer(const IConnectableLayer*,
255                                 const StridedSliceDescriptor&,
256                                 const char*) override { DefaultPolicy::Apply(__func__); }
257 
VisitSubtractionLayer(const IConnectableLayer *,const char *)258     void VisitSubtractionLayer(const IConnectableLayer*,
259                                const char*) override { DefaultPolicy::Apply(__func__); }
260 
VisitSwitchLayer(const IConnectableLayer *,const char *)261     void VisitSwitchLayer(const IConnectableLayer*,
262                           const char*) override { DefaultPolicy::Apply(__func__); }
263 
VisitTransposeConvolution2dLayer(const IConnectableLayer *,const TransposeConvolution2dDescriptor &,const ConstTensor &,const Optional<ConstTensor> &,const char *)264     void VisitTransposeConvolution2dLayer(const IConnectableLayer*,
265                                           const TransposeConvolution2dDescriptor&,
266                                           const ConstTensor&,
267                                           const Optional<ConstTensor>&,
268                                           const char*) override { DefaultPolicy::Apply(__func__); }
269 
VisitTransposeLayer(const IConnectableLayer *,const TransposeDescriptor &,const char *)270     void VisitTransposeLayer(const IConnectableLayer*,
271                              const TransposeDescriptor&,
272                              const char*) override { DefaultPolicy::Apply(__func__); }
273 
274 };
275 
276 } // namespace armnn
277