IVGCVSW-6300 'IMemoryOptimizerStrategy Add strategy library and add support in BackendRegistry'

* Updated IRuntime interface for providing custom memory optimizer strategy.
* Enabled selecting existing memory optimizer strategy by using BackendOptions
* Added MemoryOptimizerStrategyLibrary that sets one of the existing memory optimizer
  strategies selected by user

Signed-off-by: Sadik Armagan <sadik.armagan@arm.com>
Change-Id: I037f8ac8efa79c0f71bd63e379101e3ad92d80c9
diff --git a/src/backends/backendsCommon/MemoryOptimizerStrategyFactory.hpp b/src/backends/backendsCommon/MemoryOptimizerStrategyFactory.hpp
new file mode 100644
index 0000000..62a2182
--- /dev/null
+++ b/src/backends/backendsCommon/MemoryOptimizerStrategyFactory.hpp
@@ -0,0 +1,28 @@
+//
+// Copyright © 2021 Arm Ltd and Contributors. All rights reserved.
+// SPDX-License-Identifier: MIT
+//
+
+#pragma once
+
+#include <armnn/backends/IMemoryOptimizerStrategy.hpp>
+
+#include <algorithm>
+
+namespace armnn
+{
+
+class MemoryOptimizerStrategyFactory
+{
+public:
+    MemoryOptimizerStrategyFactory() {}
+
+    template <typename T>
+    std::shared_ptr<IMemoryOptimizerStrategy> CreateMemoryOptimizerStrategy()
+    {
+        return std::make_shared<T>();
+    }
+
+};
+
+} // namespace armnn
\ No newline at end of file