aboutsummaryrefslogtreecommitdiff
path: root/src/armnn/Optimizer.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/armnn/Optimizer.hpp')
-rw-r--r--src/armnn/Optimizer.hpp33
1 files changed, 28 insertions, 5 deletions
diff --git a/src/armnn/Optimizer.hpp b/src/armnn/Optimizer.hpp
index 1f5ed026fb..06720b040a 100644
--- a/src/armnn/Optimizer.hpp
+++ b/src/armnn/Optimizer.hpp
@@ -5,25 +5,48 @@
#pragma once
#include <vector>
+#include <memory>
+#include "optimizations/All.hpp"
namespace armnn
{
-class Graph;
-class Optimization;
-
class Optimizer
{
public:
+ using OptimizationPtr = std::unique_ptr<Optimization>;
+ using Optimizations = std::vector<OptimizationPtr>;
- static void Optimize(Graph& graph);
+ static void Pass(Graph& graph, const Optimizations& optimizations);
private:
~Optimizer() = default;
Optimizer();
+};
+
- std::vector<Optimization*> m_Optimizations;
+template<typename T>
+void Append(Optimizer::Optimizations& optimizations, T&& optimization)
+{
+ optimizations.emplace_back(new T(optimization));
};
+template<typename Front, typename... Others>
+void Append(Optimizer::Optimizations& optimizations, Front&& front, Others&&... others)
+{
+ Append<Front>(optimizations, std::forward<Front>(front));
+ Append<Others...>(optimizations, std::forward<Others>(others)...);
+};
+
+template<typename... Args>
+Optimizer::Optimizations MakeOptimizations(Args&&... args)
+{
+ Optimizer::Optimizations optimizations;
+
+ Append(optimizations, std::forward<Args>(args)...);
+
+ return optimizations;
+}
+
} // namespace armnn