IVGCVSW-2861 Refactor the Reference Elementwise workloads
 * Refactored Elementwise Workload into the single workload.
 * Execute() function will react based on the DataType.

Change-Id: I6d4d6a74cec150ed8cb252e70b629ed968e7093d
Signed-off-by: Sadik Armagan <sadik.armagan@arm.com>
diff --git a/src/backends/reference/workloads/RefElementwiseWorkload.hpp b/src/backends/reference/workloads/RefElementwiseWorkload.hpp
index a5ff376..3719049 100644
--- a/src/backends/reference/workloads/RefElementwiseWorkload.hpp
+++ b/src/backends/reference/workloads/RefElementwiseWorkload.hpp
@@ -20,56 +20,14 @@
           typename ParentDescriptor,
           typename armnn::StringMapping::Id DebugString>
 class RefElementwiseWorkload
-{
-    // Needs specialization. The default is empty on purpose.
-};
-
-template <typename ParentDescriptor, typename Functor>
-class BaseFloat32ElementwiseWorkload : public Float32Workload<ParentDescriptor>
+    : public TypedWorkload<ParentDescriptor, DataType>
 {
 public:
-    using Float32Workload<ParentDescriptor>::Float32Workload;
-    void ExecuteImpl(const char * debugString) const;
-};
 
-template <typename Functor,
-          typename ParentDescriptor,
-          typename armnn::StringMapping::Id DebugString>
-class RefElementwiseWorkload<Functor, armnn::DataType::Float32, ParentDescriptor, DebugString>
-    : public BaseFloat32ElementwiseWorkload<ParentDescriptor, Functor>
-{
-public:
-    using BaseFloat32ElementwiseWorkload<ParentDescriptor, Functor>::BaseFloat32ElementwiseWorkload;
+    using TypedWorkload<ParentDescriptor, DataType>::m_Data;
+    using TypedWorkload<ParentDescriptor, DataType>::TypedWorkload;
 
-    virtual void Execute() const override
-    {
-        using Parent = BaseFloat32ElementwiseWorkload<ParentDescriptor, Functor>;
-        Parent::ExecuteImpl(StringMapping::Instance().Get(DebugString));
-    }
-};
-
-template <typename ParentDescriptor, typename Functor>
-class BaseUint8ElementwiseWorkload : public Uint8Workload<ParentDescriptor>
-{
-public:
-    using Uint8Workload<ParentDescriptor>::Uint8Workload;
-    void ExecuteImpl(const char * debugString) const;
-};
-
-template <typename Functor,
-          typename ParentDescriptor,
-          typename armnn::StringMapping::Id DebugString>
-class RefElementwiseWorkload<Functor, armnn::DataType::QuantisedAsymm8, ParentDescriptor, DebugString>
-    : public BaseUint8ElementwiseWorkload<ParentDescriptor, Functor>
-{
-public:
-    using BaseUint8ElementwiseWorkload<ParentDescriptor, Functor>::BaseUint8ElementwiseWorkload;
-
-    virtual void Execute() const override
-    {
-        using Parent = BaseUint8ElementwiseWorkload<ParentDescriptor, Functor>;
-        Parent::ExecuteImpl(StringMapping::Instance().Get(DebugString));
-    }
+    void Execute() const override;
 };
 
 using RefAdditionFloat32Workload =
@@ -120,7 +78,6 @@
                           DivisionQueueDescriptor,
                           StringMapping::RefDivisionWorkload_Execute>;
 
-
 using RefMaximumFloat32Workload =
     RefElementwiseWorkload<armnn::maximum<float>,
                           DataType::Float32,