xref: /aosp_15_r20/external/armnn/include/armnn/StrategyBase.hpp (revision 89c4ff92f2867872bb9e2354d150bf0c8c502810)
1 //
2 // Copyright © 2021 Arm Ltd and Contributors. All rights reserved.
3 // SPDX-License-Identifier: MIT
4 //
5 #pragma once
6 
7 
8 #include <armnn/INetwork.hpp>
9 #include <armnn/IStrategy.hpp>
10 #include <armnn/utility/IgnoreUnused.hpp>
11 
12 namespace armnn
13 {
14 
15 struct ThrowingStrategy
16 {
Applyarmnn::ThrowingStrategy17     void Apply(const std::string& errorMessage = "") { throw UnimplementedException(errorMessage); };
18 };
19 
20 struct NoThrowStrategy
21 {
Applyarmnn::NoThrowStrategy22     void Apply(const std::string&) {};
23 };
24 
25 /// Strategy base class with empty implementations.
26 template <typename DefaultStrategy>
27 class StrategyBase : public IStrategy
28 {
29 protected:
~StrategyBase()30     virtual ~StrategyBase() {};
31 
32 public:
ExecuteStrategy(const armnn::IConnectableLayer * layer,const armnn::BaseDescriptor & descriptor,const std::vector<armnn::ConstTensor> & constants,const char * name,const armnn::LayerBindingId id=0)33     virtual void ExecuteStrategy(const armnn::IConnectableLayer* layer,
34                                  const armnn::BaseDescriptor& descriptor,
35                                  const std::vector<armnn::ConstTensor>& constants,
36                                  const char* name,
37                                  const armnn::LayerBindingId id = 0) override
38     {
39         armnn::IgnoreUnused(descriptor, constants, id, name);
40         switch (layer->GetType())
41         {
42             default:
43             {
44                 m_DefaultStrategy.Apply(GetLayerTypeAsCString(layer->GetType()));
45             }
46         }
47     }
48 
49 protected:
50     DefaultStrategy m_DefaultStrategy;
51 
52 };
53 
54 
55 } // namespace armnn
56