IVGCVSW-2642 Fix Guid issue in Serialize Parser

Change-Id: Id8ba083b6a5dee64ed197d71647ad3b451e4f354
Signed-off-by: Saoirse Stewart <saoirse.stewart@arm.com>
diff --git a/src/armnnSerializer/Serializer.cpp b/src/armnnSerializer/Serializer.cpp
index 3923f0f..79ad7e1 100644
--- a/src/armnnSerializer/Serializer.cpp
+++ b/src/armnnSerializer/Serializer.cpp
@@ -35,6 +35,23 @@
     }
 }
 
+uint32_t SerializerVisitor::GetSerializedId(unsigned int guid)
+{
+    std::pair<unsigned int, uint32_t> guidPair(guid, m_layerId);
+
+    if (m_guidMap.empty())
+    {
+        m_guidMap.insert(guidPair);
+    }
+    else if (m_guidMap.find(guid) == m_guidMap.end())
+    {
+        guidPair.second = ++m_layerId;
+        m_guidMap.insert(guidPair);
+        return m_layerId;
+    }
+    return m_layerId;
+}
+
 // Build FlatBuffer for Input Layer
 void SerializerVisitor::VisitInputLayer(const IConnectableLayer* layer, LayerBindingId id, const char* name)
 {
@@ -47,7 +64,7 @@
                                                                                 id);
 
     // Push layer Guid to outputIds.
-    m_inputIds.push_back(layer->GetGuid());
+    m_inputIds.push_back(GetSerializedId(layer->GetGuid()));
 
     // Create the FlatBuffer InputLayer
     auto flatBufferInputLayer = serializer::CreateInputLayer(m_flatBufferBuilder, flatBufferInputBindableBaseLayer);
@@ -67,7 +84,7 @@
                                                                                  flatBufferOutputBaseLayer,
                                                                                  id);
     // Push layer Guid to outputIds.
-    m_outputIds.push_back(layer->GetGuid());
+    m_outputIds.push_back(GetSerializedId(layer->GetGuid()));
 
     // Create the FlatBuffer OutputLayer
     auto flatBufferOutputLayer = serializer::CreateOutputLayer(m_flatBufferBuilder, flatBufferOutputBindableBaseLayer);
@@ -109,7 +126,7 @@
     std::vector<fb::Offset<serializer::OutputSlot>> outputSlots = CreateOutputSlots(layer);
 
     return serializer::CreateLayerBase(m_flatBufferBuilder,
-                                       layer->GetGuid(),
+                                       GetSerializedId(layer->GetGuid()),
                                        m_flatBufferBuilder.CreateString(layer->GetName()),
                                        layerType,
                                        m_flatBufferBuilder.CreateVector(inputSlots),
@@ -137,7 +154,8 @@
         const IOutputSlot* connection = inputSlot.GetConnection();
 
         // Create FlatBuffer Connection
-        serializer::Connection conn(connection->GetOwningLayerGuid(), connection->CalculateIndexOnOwner());
+        serializer::Connection conn(GetSerializedId(inputSlot.GetConnection()->GetOwningLayerGuid()),
+                                    connection->CalculateIndexOnOwner());
         // Create FlatBuffer InputSlot
         inputSlots.push_back(serializer::CreateInputSlot(m_flatBufferBuilder, slotIndex, &conn));
     }