IVGCVSW-2997 Refactor reference LSTM workload

Signed-off-by: Nattapat Chaimanowong <nattapat.chaimanowong@arm.com>
Change-Id: I6883f878d9f701a55153292769d2fc0530d2529e
diff --git a/src/backends/reference/workloads/BaseIterator.hpp b/src/backends/reference/workloads/BaseIterator.hpp
index 3439e41..97af95a 100644
--- a/src/backends/reference/workloads/BaseIterator.hpp
+++ b/src/backends/reference/workloads/BaseIterator.hpp
@@ -29,8 +29,6 @@
 class Decoder : public BaseIterator
 {
 public:
-    using InterfaceType = IType;
-
     Decoder() {}
 
     virtual ~Decoder() {}
@@ -42,13 +40,13 @@
 class Encoder : public BaseIterator
 {
 public:
-    using InterfaceType = IType;
-
     Encoder() {}
 
     virtual ~Encoder() {}
 
     virtual void Set(IType right) = 0;
+
+    virtual IType Get() const = 0;
 };
 
 template<typename T, typename Base>
@@ -77,6 +75,7 @@
         return *this;
     }
 
+protected:
     T* m_Iterator;
 };
 
@@ -135,6 +134,11 @@
         *m_Iterator = armnn::Quantize<uint8_t>(right, m_Scale, m_Offset);
     }
 
+    float Get() const override
+    {
+        return armnn::Dequantize(*m_Iterator, m_Scale, m_Offset);
+    }
+
 private:
     const float m_Scale;
     const int32_t m_Offset;
@@ -151,6 +155,11 @@
         *m_Iterator = armnn::Quantize<int16_t>(right, m_Scale, m_Offset);
     }
 
+    float Get() const override
+    {
+        return armnn::Dequantize(*m_Iterator, m_Scale, m_Offset);
+    }
+
 private:
     const float m_Scale;
     const int32_t m_Offset;
@@ -166,6 +175,11 @@
     {
         *m_Iterator = right;
     }
+
+    float Get() const override
+    {
+        return *m_Iterator;
+    }
 };
 
 class BooleanEncoder : public TypedIterator<uint8_t, Encoder<bool>>
@@ -178,7 +192,11 @@
     {
         *m_Iterator = right;
     }
+
+    bool Get() const override
+    {
+        return *m_Iterator;
+    }
 };
 
-
-} //namespace armnn
\ No newline at end of file
+} //namespace armnn