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