IVGCVSW-3038 Move MakeInputTensors to armnnUtils

Change-Id: I4352a645badde788b9e33b3675a9cc9c0fc3dc33
Signed-off-by: Jim Flynn <jim.flynn@arm.com>
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 34dbd91..b3056c9 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -53,6 +53,7 @@
     src/armnnUtils/ParserPrototxtFixture.hpp
     src/armnnUtils/PrototxtConversions.hpp
     src/armnnUtils/PrototxtConversions.cpp
+    src/armnnUtils/TensorIOUtils.hpp
     src/armnnUtils/TensorUtils.hpp
     src/armnnUtils/TensorUtils.cpp
     )
diff --git a/src/armnnUtils/TensorIOUtils.hpp b/src/armnnUtils/TensorIOUtils.hpp
new file mode 100644
index 0000000..bf5a37b
--- /dev/null
+++ b/src/armnnUtils/TensorIOUtils.hpp
@@ -0,0 +1,87 @@
+//
+// Copyright © 2017 Arm Ltd. All rights reserved.
+// SPDX-License-Identifier: MIT
+//
+
+#pragma once
+
+#include <armnn/Tensor.hpp>
+#include <vector>
+
+#include <boost/format.hpp>
+#include <boost/variant/apply_visitor.hpp>
+
+namespace armnnUtils
+{
+
+template<typename TContainer>
+inline armnn::InputTensors MakeInputTensors(
+    const std::vector<armnn::BindingPointInfo>& inputBindings,
+    const std::vector<TContainer>& inputDataContainers)
+{
+    armnn::InputTensors inputTensors;
+
+    const size_t numInputs = inputBindings.size();
+    if (numInputs != inputDataContainers.size())
+    {
+        throw armnn::Exception(boost::str(boost::format("Number of inputs does not match number of "
+            "tensor data containers: %1% != %2%") % numInputs % inputDataContainers.size()));
+    }
+
+    for (size_t i = 0; i < numInputs; i++)
+    {
+        const armnn::BindingPointInfo& inputBinding = inputBindings[i];
+        const TContainer& inputData = inputDataContainers[i];
+
+        boost::apply_visitor([&](auto&& value)
+                             {
+                                 if (value.size() != inputBinding.second.GetNumElements())
+                                 {
+                                    throw armnn::Exception("Input tensor has incorrect size");
+                                 }
+
+                                 armnn::ConstTensor inputTensor(inputBinding.second, value.data());
+                                 inputTensors.push_back(std::make_pair(inputBinding.first, inputTensor));
+                             },
+                             inputData);
+    }
+
+    return inputTensors;
+}
+
+template<typename TContainer>
+inline armnn::OutputTensors MakeOutputTensors(
+    const std::vector<armnn::BindingPointInfo>& outputBindings,
+    std::vector<TContainer>& outputDataContainers)
+{
+    armnn::OutputTensors outputTensors;
+
+    const size_t numOutputs = outputBindings.size();
+    if (numOutputs != outputDataContainers.size())
+    {
+        throw armnn::Exception(boost::str(boost::format("Number of outputs does not match number of "
+            "tensor data containers: %1% != %2%") % numOutputs % outputDataContainers.size()));
+    }
+
+    for (size_t i = 0; i < numOutputs; i++)
+    {
+        const armnn::BindingPointInfo& outputBinding = outputBindings[i];
+        TContainer& outputData = outputDataContainers[i];
+
+        boost::apply_visitor([&](auto&& value)
+                             {
+                                 if (value.size() != outputBinding.second.GetNumElements())
+                                 {
+                                     throw armnn::Exception("Output tensor has incorrect size");
+                                 }
+
+                                 armnn::Tensor outputTensor(outputBinding.second, value.data());
+                                 outputTensors.push_back(std::make_pair(outputBinding.first, outputTensor));
+                             },
+                             outputData);
+    }
+
+    return outputTensors;
+}
+
+} // namespace armnnUtils
\ No newline at end of file
diff --git a/tests/InferenceModel.hpp b/tests/InferenceModel.hpp
index d2d2ca3..8e463ec 100644
--- a/tests/InferenceModel.hpp
+++ b/tests/InferenceModel.hpp
@@ -16,6 +16,7 @@
 #endif
 
 #include <HeapProfiling.hpp>
+#include <TensorIOUtils.hpp>
 
 #include <backendsCommon/BackendRegistry.hpp>
 
@@ -302,75 +303,7 @@
 };
 #endif
 
-template<typename TContainer>
-inline armnn::InputTensors MakeInputTensors(
-    const std::vector<armnn::BindingPointInfo>& inputBindings,
-    const std::vector<TContainer>& inputDataContainers)
-{
-    armnn::InputTensors inputTensors;
 
-    const size_t numInputs = inputBindings.size();
-    if (numInputs != inputDataContainers.size())
-    {
-        throw armnn::Exception(boost::str(boost::format("Number of inputs does not match number of "
-            "tensor data containers: %1% != %2%") % numInputs % inputDataContainers.size()));
-    }
-
-    for (size_t i = 0; i < numInputs; i++)
-    {
-        const armnn::BindingPointInfo& inputBinding = inputBindings[i];
-        const TContainer& inputData = inputDataContainers[i];
-
-        boost::apply_visitor([&](auto&& value)
-                             {
-                                 if (value.size() != inputBinding.second.GetNumElements())
-                                 {
-                                    throw armnn::Exception("Input tensor has incorrect size");
-                                 }
-
-                                 armnn::ConstTensor inputTensor(inputBinding.second, value.data());
-                                 inputTensors.push_back(std::make_pair(inputBinding.first, inputTensor));
-                             },
-                             inputData);
-    }
-
-    return inputTensors;
-}
-
-template<typename TContainer>
-inline armnn::OutputTensors MakeOutputTensors(
-    const std::vector<armnn::BindingPointInfo>& outputBindings,
-    std::vector<TContainer>& outputDataContainers)
-{
-    armnn::OutputTensors outputTensors;
-
-    const size_t numOutputs = outputBindings.size();
-    if (numOutputs != outputDataContainers.size())
-    {
-        throw armnn::Exception(boost::str(boost::format("Number of outputs does not match number of "
-            "tensor data containers: %1% != %2%") % numOutputs % outputDataContainers.size()));
-    }
-
-    for (size_t i = 0; i < numOutputs; i++)
-    {
-        const armnn::BindingPointInfo& outputBinding = outputBindings[i];
-        TContainer& outputData = outputDataContainers[i];
-
-        boost::apply_visitor([&](auto&& value)
-                             {
-                                 if (value.size() != outputBinding.second.GetNumElements())
-                                 {
-                                     throw armnn::Exception("Output tensor has incorrect size");
-                                 }
-
-                                 armnn::Tensor outputTensor(outputBinding.second, value.data());
-                                 outputTensors.push_back(std::make_pair(outputBinding.first, outputTensor));
-                             },
-                             outputData);
-    }
-
-    return outputTensors;
-}
 
 template <typename IParser, typename TDataType>
 class InferenceModel
@@ -615,13 +548,13 @@
     template<typename TContainer>
     armnn::InputTensors MakeInputTensors(const std::vector<TContainer>& inputDataContainers)
     {
-        return ::MakeInputTensors(m_InputBindings, inputDataContainers);
+        return armnnUtils::MakeInputTensors(m_InputBindings, inputDataContainers);
     }
 
     template<typename TContainer>
     armnn::OutputTensors MakeOutputTensors(std::vector<TContainer>& outputDataContainers)
     {
-        return ::MakeOutputTensors(m_OutputBindings, outputDataContainers);
+        return armnnUtils::MakeOutputTensors(m_OutputBindings, outputDataContainers);
     }
 
     std::chrono::high_resolution_clock::time_point GetCurrentTime()
diff --git a/tests/MultipleNetworksCifar10/MultipleNetworksCifar10.cpp b/tests/MultipleNetworksCifar10/MultipleNetworksCifar10.cpp
index 006318f..fec78ac 100644
--- a/tests/MultipleNetworksCifar10/MultipleNetworksCifar10.cpp
+++ b/tests/MultipleNetworksCifar10/MultipleNetworksCifar10.cpp
@@ -168,8 +168,6 @@
         }
         Cifar10Database cifar10(dataDir);
 
-        using TContainer = boost::variant<std::vector<float>, std::vector<int>, std::vector<unsigned char>>;
-
         for (unsigned int i = 0; i < 3; ++i)
         {
             // Loads test case data (including image data).
@@ -193,8 +191,8 @@
                 std::vector<TContainer> outputDataContainers = { outputs[k] };
 
                 status = runtime->EnqueueWorkload(networks[k].m_Network,
-                    MakeInputTensors(inputBindings, inputDataContainers),
-                    MakeOutputTensors(outputBindings, outputDataContainers));
+                    armnnUtils::MakeInputTensors(inputBindings, inputDataContainers),
+                    armnnUtils::MakeOutputTensors(outputBindings, outputDataContainers));
                 if (status == armnn::Status::Failure)
                 {
                     BOOST_LOG_TRIVIAL(fatal) << "armnn::IRuntime: Failed to enqueue workload";