IVGCVSW-1946: Remove armnn/src from the include paths

Change-Id: I663a0a0fccb43ee960ec070121a59df9db0bb04e
diff --git a/src/backends/backendsCommon/test/TensorCopyUtils.cpp b/src/backends/backendsCommon/test/TensorCopyUtils.cpp
new file mode 100644
index 0000000..acc28c9
--- /dev/null
+++ b/src/backends/backendsCommon/test/TensorCopyUtils.cpp
@@ -0,0 +1,161 @@
+//
+// Copyright © 2017 Arm Ltd. All rights reserved.
+// SPDX-License-Identifier: MIT
+//
+
+#include "TensorCopyUtils.hpp"
+
+#include <Half.hpp>
+
+#ifdef ARMCOMPUTECL_ENABLED
+#include <cl/ClTensorHandle.hpp>
+#endif
+
+#if ARMCOMPUTENEON_ENABLED
+#include <neon/NeonTensorHandle.hpp>
+#endif
+
+#if ARMCOMPUTECLENABLED || ARMCOMPUTENEON_ENABLED
+#include <aclCommon/ArmComputeTensorUtils.hpp>
+#endif
+
+#include <backendsCommon/CpuTensorHandle.hpp>
+
+#include <boost/cast.hpp>
+
+#include <algorithm>
+#include <cstring>
+
+void CopyDataToITensorHandle(armnn::ITensorHandle* tensorHandle, const void* mem)
+{
+    switch (tensorHandle->GetType())
+    {
+        case armnn::ITensorHandle::Cpu:
+        {
+            auto handle = boost::polymorphic_downcast<armnn::ScopedCpuTensorHandle*>(tensorHandle);
+            memcpy(handle->GetTensor<void>(), mem, handle->GetTensorInfo().GetNumBytes());
+            break;
+        }
+#ifdef ARMCOMPUTECL_ENABLED
+        case armnn::ITensorHandle::CL:
+        {
+            using armnn::armcomputetensorutils::CopyArmComputeITensorData;
+            auto handle = boost::polymorphic_downcast<armnn::IClTensorHandle*>(tensorHandle);
+            handle->Map(true);
+            switch(handle->GetDataType())
+            {
+                case arm_compute::DataType::F32:
+                    CopyArmComputeITensorData(static_cast<const float*>(mem), handle->GetTensor());
+                    break;
+                case arm_compute::DataType::QASYMM8:
+                    CopyArmComputeITensorData(static_cast<const uint8_t*>(mem), handle->GetTensor());
+                    break;
+                case arm_compute::DataType::F16:
+                    CopyArmComputeITensorData(static_cast<const armnn::Half*>(mem), handle->GetTensor());
+                    break;
+                default:
+                {
+                    throw armnn::UnimplementedException();
+                }
+            }
+            handle->Unmap();
+            break;
+        }
+#endif
+#if ARMCOMPUTENEON_ENABLED
+        case armnn::ITensorHandle::Neon:
+        {
+            using armnn::armcomputetensorutils::CopyArmComputeITensorData;
+            auto handle = boost::polymorphic_downcast<armnn::INeonTensorHandle*>(tensorHandle);
+            switch (handle->GetDataType())
+            {
+                case arm_compute::DataType::F32:
+                    CopyArmComputeITensorData(static_cast<const float*>(mem), handle->GetTensor());
+                    break;
+                case arm_compute::DataType::QASYMM8:
+                    CopyArmComputeITensorData(static_cast<const uint8_t*>(mem), handle->GetTensor());
+                    break;
+                default:
+                {
+                    throw armnn::UnimplementedException();
+                }
+            }
+            break;
+        }
+#endif
+        default:
+        {
+            throw armnn::UnimplementedException();
+        }
+    }
+}
+
+void CopyDataFromITensorHandle(void* mem, const armnn::ITensorHandle* tensorHandle)
+{
+    switch (tensorHandle->GetType())
+    {
+        case armnn::ITensorHandle::Cpu:
+        {
+            auto handle = boost::polymorphic_downcast<const armnn::ScopedCpuTensorHandle*>(tensorHandle);
+            memcpy(mem, handle->GetTensor<void>(), handle->GetTensorInfo().GetNumBytes());
+            break;
+        }
+#ifdef ARMCOMPUTECL_ENABLED
+        case armnn::ITensorHandle::CL:
+        {
+            using armnn::armcomputetensorutils::CopyArmComputeITensorData;
+            auto handle = boost::polymorphic_downcast<const armnn::IClTensorHandle*>(tensorHandle);
+            const_cast<armnn::IClTensorHandle*>(handle)->Map(true);
+            switch(handle->GetDataType())
+            {
+                case arm_compute::DataType::F32:
+                    CopyArmComputeITensorData(handle->GetTensor(), static_cast<float*>(mem));
+                    break;
+                case arm_compute::DataType::QASYMM8:
+                    CopyArmComputeITensorData(handle->GetTensor(), static_cast<uint8_t*>(mem));
+                    break;
+                case arm_compute::DataType::F16:
+                    CopyArmComputeITensorData(handle->GetTensor(), static_cast<armnn::Half*>(mem));
+                    break;
+                default:
+                {
+                    throw armnn::UnimplementedException();
+                }
+            }
+            const_cast<armnn::IClTensorHandle*>(handle)->Unmap();
+            break;
+        }
+#endif
+#if ARMCOMPUTENEON_ENABLED
+        case armnn::ITensorHandle::Neon:
+        {
+            using armnn::armcomputetensorutils::CopyArmComputeITensorData;
+            auto handle = boost::polymorphic_downcast<const armnn::INeonTensorHandle*>(tensorHandle);
+            switch (handle->GetDataType())
+            {
+                case arm_compute::DataType::F32:
+                    CopyArmComputeITensorData(handle->GetTensor(), static_cast<float*>(mem));
+                    break;
+                case arm_compute::DataType::QASYMM8:
+                    CopyArmComputeITensorData(handle->GetTensor(), static_cast<uint8_t*>(mem));
+                    break;
+                default:
+                {
+                    throw armnn::UnimplementedException();
+                }
+            }
+            break;
+        }
+#endif
+        default:
+        {
+            throw armnn::UnimplementedException();
+        }
+    }
+}
+
+void AllocateAndCopyDataToITensorHandle(armnn::ITensorHandle* tensorHandle, const void* mem)
+{
+    tensorHandle->Allocate();
+    CopyDataToITensorHandle(tensorHandle, mem);
+}