IVGCVSW-5593 Implement Pimpl Idiom for serialization classes

Signed-off-by: Finn Williams <Finn.Williams@arm.com>
Change-Id: I01c7bd314219e58f71505dcb787d606dbded914a
diff --git a/src/armnnSerializer/Serializer.cpp b/src/armnnSerializer/Serializer.cpp
index 379cce2..a0c99b9 100644
--- a/src/armnnSerializer/Serializer.cpp
+++ b/src/armnnSerializer/Serializer.cpp
@@ -12,8 +12,6 @@
 
 #include <iostream>
 
-#include <flatbuffers/util.h>
-
 #include "SerializerUtils.hpp"
 
 using namespace armnn;
@@ -23,6 +21,37 @@
 namespace armnnSerializer
 {
 
+ISerializer::ISerializer() : pSerializerImpl(new SerializerImpl())
+{
+}
+
+ISerializer::~ISerializer() = default;
+
+ISerializer* ISerializer::CreateRaw()
+{
+    return new ISerializer();
+}
+
+ISerializerPtr ISerializer::Create()
+{
+    return ISerializerPtr(CreateRaw(), &ISerializer::Destroy);
+}
+
+void ISerializer::Destroy(ISerializer* serializer)
+{
+    delete serializer;
+}
+
+void ISerializer::Serialize(const armnn::INetwork& inNetwork)
+{
+    pSerializerImpl->Serialize(inNetwork);
+}
+
+bool ISerializer::SaveSerializedToStream(std::ostream& stream)
+{
+    return pSerializerImpl->SaveSerializedToStream(stream);
+}
+
 serializer::ActivationFunction GetFlatBufferActivationFunction(armnn::ActivationFunction function)
 {
     switch (function)
@@ -1729,23 +1758,7 @@
     return outputSlots;
 }
 
-
-ISerializer* ISerializer::CreateRaw()
-{
-    return new Serializer();
-}
-
-ISerializerPtr ISerializer::Create()
-{
-    return ISerializerPtr(CreateRaw(), &ISerializer::Destroy);
-}
-
-void ISerializer::Destroy(ISerializer* serializer)
-{
-    delete serializer;
-}
-
-void Serializer::Serialize(const INetwork& inNetwork)
+void ISerializer::SerializerImpl::Serialize(const INetwork& inNetwork)
 {
     // Iterate through to network
     inNetwork.Accept(m_SerializerVisitor);
@@ -1763,7 +1776,7 @@
     fbBuilder.Finish(serializedGraph);
 }
 
-bool Serializer::SaveSerializedToStream(std::ostream& stream)
+bool ISerializer::SerializerImpl::SaveSerializedToStream(std::ostream& stream)
 {
     flatbuffers::FlatBufferBuilder& fbBuilder = m_SerializerVisitor.GetFlatBufferBuilder();
 
@@ -1772,4 +1785,5 @@
     return !stream.bad();
 }
 
+
 } // namespace armnnSerializer
diff --git a/src/armnnSerializer/Serializer.hpp b/src/armnnSerializer/Serializer.hpp
index 8c44ced..f28be09 100644
--- a/src/armnnSerializer/Serializer.hpp
+++ b/src/armnnSerializer/Serializer.hpp
@@ -345,20 +345,20 @@
     uint32_t m_layerId;
 };
 
-class Serializer : public ISerializer
+class ISerializer::SerializerImpl
 {
 public:
-    Serializer() {}
-    ~Serializer() {}
+    SerializerImpl() = default;
+    ~SerializerImpl() = default;
 
     /// Serializes the network to ArmNN SerializedGraph.
     /// @param [in] inNetwork The network to be serialized.
-    void Serialize(const armnn::INetwork& inNetwork) override;
+    void Serialize(const armnn::INetwork& inNetwork);
 
     /// Serializes the SerializedGraph to the stream.
     /// @param [stream] the stream to save to
     /// @return true if graph is Serialized to the Stream, false otherwise
-    bool SaveSerializedToStream(std::ostream& stream) override;
+    bool SaveSerializedToStream(std::ostream& stream);
 
 private:
 
diff --git a/src/armnnSerializer/test/ActivationSerializationTests.cpp b/src/armnnSerializer/test/ActivationSerializationTests.cpp
index abc63ae..1645731 100644
--- a/src/armnnSerializer/test/ActivationSerializationTests.cpp
+++ b/src/armnnSerializer/test/ActivationSerializationTests.cpp
@@ -54,11 +54,12 @@
     activationLayer->GetOutputSlot(0).Connect(outputLayer->GetInputSlot(0));
     activationLayer->GetOutputSlot(0).SetTensorInfo(outputInfo);
 
-    armnnSerializer::Serializer serializer;
-    serializer.Serialize(*network);
+    armnnSerializer::ISerializerPtr serializer = armnnSerializer::ISerializer::Create();
+
+    serializer->Serialize(*network);
 
     std::stringstream stream;
-    serializer.SaveSerializedToStream(stream);
+    serializer->SaveSerializedToStream(stream);
 
     std::string const serializerString{stream.str()};
     std::vector<std::uint8_t> const serializerVector{serializerString.begin(), serializerString.end()};
diff --git a/src/armnnSerializer/test/SerializerTests.cpp b/src/armnnSerializer/test/SerializerTests.cpp
index 6866391..11177f5 100644
--- a/src/armnnSerializer/test/SerializerTests.cpp
+++ b/src/armnnSerializer/test/SerializerTests.cpp
@@ -237,11 +237,12 @@
 
 std::string SerializeNetwork(const armnn::INetwork& network)
 {
-    armnnSerializer::Serializer serializer;
-    serializer.Serialize(network);
+    armnnSerializer::ISerializerPtr serializer = armnnSerializer::ISerializer::Create();
+
+    serializer->Serialize(network);
 
     std::stringstream stream;
-    serializer.SaveSerializedToStream(stream);
+    serializer->SaveSerializedToStream(stream);
 
     std::string serializerString{stream.str()};
     return serializerString;