IVGCVSW-3030 Refactor code and fix OptimizeSubgraphView

 * Refactored the Optimizer code for readibility, in view of
   upcoming changes
 * Rename one of the ISubgraphViewConverter interface methods to
   give it a more meaningful name
 * Improved the OptimizationViews class, added comments and
   useful funtion overloads
 * Fixed an error in the default implementationof the new
   OptimizeSubgraphView method in IBackendInternal

Change-Id: I683a56d562aa093bac06f0e83fb13e144ed81485
Signed-off-by: Matteo Martincigh <matteo.martincigh@arm.com>
diff --git a/src/backends/backendsCommon/IBackendInternal.hpp b/src/backends/backendsCommon/IBackendInternal.hpp
index 5316f68..3d94d6e 100644
--- a/src/backends/backendsCommon/IBackendInternal.hpp
+++ b/src/backends/backendsCommon/IBackendInternal.hpp
@@ -59,7 +59,7 @@
     // @deprecated Use "OptimizationViews OptimizeSubgraphView(const SubgraphView&);" instead.
     virtual SubgraphViewUniquePtr OptimizeSubgraphView(const SubgraphView& subgraph, bool& optimizationAttempted) const
     {
-        optimizationAttempted=false;
+        optimizationAttempted = false;
         return nullptr;
     }
 
@@ -67,11 +67,11 @@
     // Override this method with a custom optimization implementation.
     virtual OptimizationViews OptimizeSubgraphView(const SubgraphView& subgraph) const
     {
-        bool attempted=false;
-        SubgraphViewUniquePtr optSubgraph = OptimizeSubgraphView(subgraph, attempted);
+        bool optimizationAttempted = false;
+        SubgraphViewUniquePtr optSubgraph = OptimizeSubgraphView(subgraph, optimizationAttempted);
 
         OptimizationViews result;
-        if (!attempted)
+        if (!optimizationAttempted)
         {
             result.AddUntouchedSubgraph(SubgraphView(subgraph));
         }
@@ -79,7 +79,7 @@
         {
             if (optSubgraph)
             {
-                result.AddSubstituion({*optSubgraph.get(), subgraph});
+                result.AddSubstituion({subgraph, SubgraphView(*optSubgraph.get())});
             }
             else
             {
diff --git a/src/backends/backendsCommon/OptimizationViews.hpp b/src/backends/backendsCommon/OptimizationViews.hpp
index 14296f0..e96c11a 100644
--- a/src/backends/backendsCommon/OptimizationViews.hpp
+++ b/src/backends/backendsCommon/OptimizationViews.hpp
@@ -8,6 +8,7 @@
 
 namespace armnn
 {
+
 class OptimizationViews
 {
 public:
@@ -44,18 +45,25 @@
         m_UntouchedSubgraphs.emplace_back(subgraph);
     }
 
-    Substitutions GetSubstitutions() const { return m_SuccesfulOptimizations; }
-    Subgraphs GetFailedSubgraphs() const { return m_FailedOptimizations; }
-    Subgraphs GetUntouchedSubgraphs() const { return m_UntouchedSubgraphs; }
+    const Substitutions& GetSubstitutions() const { return m_SuccesfulOptimizations; }
+    const Subgraphs& GetFailedSubgraphs() const { return m_FailedOptimizations; }
+    const Subgraphs& GetUntouchedSubgraphs() const { return m_UntouchedSubgraphs; }
+
+    Substitutions& GetSubstitutions() { return m_SuccesfulOptimizations; }
+    Subgraphs& GetFailedSubgraphs() { return m_FailedOptimizations; }
+    Subgraphs& GetUntouchedSubgraphs() { return m_UntouchedSubgraphs; }
+
     bool Validate(const SubgraphView& originalSubgraph) const;
 
-    Graph& GetGraph() { return m_Graph; };
+    Graph& GetGraph() { return m_Graph; }
 
 private:
     Substitutions m_SuccesfulOptimizations;     ///< Proposed substitutions from successful optimizations
     Subgraphs m_FailedOptimizations;            ///< Subgraphs from the original subgraph which cannot be supported
     Subgraphs m_UntouchedSubgraphs;             ///< Subgraphs from the original subgraph which remain unmodified
 
+    /// Graph object used only as a container for any layer generated by the optimization process
     Graph m_Graph;
 };
+
 } //namespace armnn