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>
Append(Optimizer::Optimizations & optimizations,T && optimization)30 void Append(Optimizer::Optimizations& optimizations, T&& optimization)
31 {
32 optimizations.emplace_back(new T(optimization));
33 };
34
35 template<typename Front, typename... Others>
Append(Optimizer::Optimizations & optimizations,Front && front,Others &&...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>
MakeOptimizations(Args &&...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
53