From 85d3671618f0d40b71ebbc80373389140390c2cd Mon Sep 17 00:00:00 2001 From: Finn Williams Date: Tue, 26 Jan 2021 22:30:06 +0000 Subject: IVGCVSW-5593 Implement Pimpl Idiom for serialization classes Signed-off-by: Finn Williams Change-Id: I01c7bd314219e58f71505dcb787d606dbded914a --- src/armnnSerializer/Serializer.cpp | 54 ++++++++++++++-------- src/armnnSerializer/Serializer.hpp | 10 ++-- .../test/ActivationSerializationTests.cpp | 7 +-- src/armnnSerializer/test/SerializerTests.cpp | 7 +-- 4 files changed, 47 insertions(+), 31 deletions(-) (limited to 'src/armnnSerializer') diff --git a/src/armnnSerializer/Serializer.cpp b/src/armnnSerializer/Serializer.cpp index 379cce2109..a0c99b9cca 100644 --- a/src/armnnSerializer/Serializer.cpp +++ b/src/armnnSerializer/Serializer.cpp @@ -12,8 +12,6 @@ #include -#include - #include "SerializerUtils.hpp" using namespace armnn; @@ -23,6 +21,37 @@ namespace serializer = armnnSerializer; 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 @@ std::vector> 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 @@ void Serializer::Serialize(const INetwork& inNetwork) 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 @@ bool Serializer::SaveSerializedToStream(std::ostream& stream) return !stream.bad(); } + } // namespace armnnSerializer diff --git a/src/armnnSerializer/Serializer.hpp b/src/armnnSerializer/Serializer.hpp index 8c44ced72f..f28be09036 100644 --- a/src/armnnSerializer/Serializer.hpp +++ b/src/armnnSerializer/Serializer.hpp @@ -345,20 +345,20 @@ private: 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 abc63ae64d..1645731413 100644 --- a/src/armnnSerializer/test/ActivationSerializationTests.cpp +++ b/src/armnnSerializer/test/ActivationSerializationTests.cpp @@ -54,11 +54,12 @@ BOOST_AUTO_TEST_CASE(ActivationSerialization) 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 const serializerVector{serializerString.begin(), serializerString.end()}; diff --git a/src/armnnSerializer/test/SerializerTests.cpp b/src/armnnSerializer/test/SerializerTests.cpp index 6866391e0f..11177f5d04 100644 --- a/src/armnnSerializer/test/SerializerTests.cpp +++ b/src/armnnSerializer/test/SerializerTests.cpp @@ -237,11 +237,12 @@ armnn::INetworkPtr DeserializeNetwork(const std::string& serializerString) 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; -- cgit v1.2.1