Update ACL pin to b309fc249e4383b4d40ae03e377c3cbad3f9f5f7
[platform/upstream/armnn.git] / src / armnn / Optimizer.hpp
1 //
2 // Copyright © 2017 Arm Ltd. All rights reserved.
3 // SPDX-License-Identifier: MIT
4 //
5 #pragma once
6
7 #include <vector>
8 #include <memory>
9 #include "optimizations/All.hpp"
10
11 namespace armnn
12 {
13
14 class Optimizer
15 {
16 public:
17     using OptimizationPtr = std::unique_ptr<Optimization>;
18     using Optimizations = std::vector<OptimizationPtr>;
19
20     static void Pass(Graph& graph, const Optimizations& optimizations);
21
22 private:
23     ~Optimizer() = default;
24
25     Optimizer();
26 };
27
28
29 template<typename T>
30 void Append(Optimizer::Optimizations& optimizations, T&& optimization)
31 {
32     optimizations.emplace_back(new T(optimization));
33 };
34
35 template<typename Front, typename... Others>
36 void Append(Optimizer::Optimizations& optimizations, Front&& front, Others&&... others)
37 {
38     Append<Front>(optimizations, std::forward<Front>(front));
39     Append<Others...>(optimizations, std::forward<Others>(others)...);
40 };
41
42 template<typename... Args>
43 Optimizer::Optimizations MakeOptimizations(Args&&... args)
44 {
45     Optimizer::Optimizations optimizations;
46
47     Append(optimizations, std::forward<Args>(args)...);
48
49     return optimizations;
50 }
51
52 } // namespace armnn