/// <summary> /// Loads the vertex. /// </summary> /// <param name='reader'> Reader. </param> /// <param name='graphElements'> Graph elements. </param> /// <param name='edgeTodo'> Edge todo. </param> private static void LoadVertex(SerializationReader reader, BigList <AGraphElement> graphElements, Dictionary <Int32, List <EdgeOnVertexToDo> > edgeTodo) { var id = reader.ReadInt32(); var creationDate = reader.ReadUInt32(); var modificationDate = reader.ReadUInt32(); #region properties var propertyCount = reader.ReadOptimizedInt32(); PropertyContainer[] properties = null; if (propertyCount > 0) { properties = new PropertyContainer[propertyCount]; for (var i = 0; i < propertyCount; i++) { var propertyIdentifier = reader.ReadOptimizedUInt16(); var propertyValue = reader.ReadObject(); properties[i] = new PropertyContainer { PropertyId = propertyIdentifier, Value = propertyValue }; } } #endregion #region edges #region outgoing edges List <EdgeContainer> outEdgeProperties = null; var outEdgeCount = reader.ReadOptimizedInt32(); if (outEdgeCount > 0) { outEdgeProperties = new List <EdgeContainer>(outEdgeCount); for (var i = 0; i < outEdgeCount; i++) { var outEdgePropertyId = reader.ReadUInt16(); var outEdgePropertyCount = reader.ReadOptimizedInt32(); var outEdges = new List <EdgeModel>(outEdgePropertyCount); for (var j = 0; j < outEdgePropertyCount; j++) { var edgeId = reader.ReadInt32(); EdgeModel edge; if (graphElements.TryGetElementOrDefault(out edge, edgeId)) { outEdges.Add(edge); } else { var aEdgeTodo = new EdgeOnVertexToDo { VertexId = id, EdgePropertyId = outEdgePropertyId, IsIncomingEdge = false }; List <EdgeOnVertexToDo> todo; if (edgeTodo.TryGetValue(edgeId, out todo)) { todo.Add(aEdgeTodo); } else { edgeTodo.Add(edgeId, new List <EdgeOnVertexToDo> { aEdgeTodo }); } } } outEdgeProperties.Add(new EdgeContainer(outEdgePropertyId, outEdges)); } } #endregion #region incoming edges List <EdgeContainer> incEdgeProperties = null; var incEdgeCount = reader.ReadOptimizedInt32(); if (incEdgeCount > 0) { incEdgeProperties = new List <EdgeContainer>(incEdgeCount); for (var i = 0; i < incEdgeCount; i++) { var incEdgePropertyId = reader.ReadUInt16(); var incEdgePropertyCount = reader.ReadOptimizedInt32(); var incEdges = new List <EdgeModel>(incEdgePropertyCount); for (var j = 0; j < incEdgePropertyCount; j++) { var edgeId = reader.ReadInt32(); EdgeModel edge; if (graphElements.TryGetElementOrDefault(out edge, edgeId)) { incEdges.Add(edge); } else { var aEdgeTodo = new EdgeOnVertexToDo { VertexId = id, EdgePropertyId = incEdgePropertyId, IsIncomingEdge = true }; List <EdgeOnVertexToDo> todo; if (edgeTodo.TryGetValue(edgeId, out todo)) { todo.Add(aEdgeTodo); } else { edgeTodo.Add(edgeId, new List <EdgeOnVertexToDo> { aEdgeTodo }); } } } incEdgeProperties.Add(new EdgeContainer(incEdgePropertyId, incEdges)); } } #endregion #endregion graphElements.SetValue(id, new VertexModel(id, creationDate, modificationDate, properties, outEdgeProperties, incEdgeProperties)); }
/// <summary> /// Loads the vertex. /// </summary> /// <param name='reader'> Reader. </param> /// <param name='graphElements'> Graph elements. </param> /// <param name='edgeTodo'> Edge todo. </param> private static void LoadVertex(SerializationReader reader, BigList<AGraphElement> graphElements, Dictionary<Int32, List<EdgeOnVertexToDo>> edgeTodo) { var id = reader.ReadInt32(); var creationDate = reader.ReadUInt32(); var modificationDate = reader.ReadUInt32(); #region properties var propertyCount = reader.ReadInt32(); PropertyContainer[] properties = null; if (propertyCount > 0) { properties = new PropertyContainer[propertyCount]; for (var i = 0; i < propertyCount; i++) { var propertyIdentifier = reader.ReadUInt16(); var propertyValue = reader.ReadObject(); properties[i] = new PropertyContainer {PropertyId = propertyIdentifier, Value = propertyValue}; } } #endregion #region edges #region outgoing edges List<EdgeContainer> outEdgeProperties = null; var outEdgeCount = reader.ReadInt32(); if (outEdgeCount > 0) { outEdgeProperties = new List<EdgeContainer>(outEdgeCount); for (var i = 0; i < outEdgeCount; i++) { var outEdgePropertyId = reader.ReadUInt16(); var outEdgePropertyCount = reader.ReadInt32(); var outEdges = new List<EdgeModel>(outEdgePropertyCount); for (var j = 0; j < outEdgePropertyCount; j++) { var edgeId = reader.ReadInt32(); EdgeModel edge = graphElements.GetElement(edgeId) as EdgeModel; if (edge != null) { outEdges.Add(edge); } else { var aEdgeTodo = new EdgeOnVertexToDo { VertexId = id, EdgePropertyId = outEdgePropertyId, IsIncomingEdge = false }; List<EdgeOnVertexToDo> todo; if (edgeTodo.TryGetValue(edgeId, out todo)) { todo.Add(aEdgeTodo); } else { edgeTodo.Add(edgeId, new List<EdgeOnVertexToDo> {aEdgeTodo}); } } } outEdgeProperties.Add(new EdgeContainer(outEdgePropertyId, outEdges)); } } #endregion #region incoming edges List<EdgeContainer> incEdgeProperties = null; var incEdgeCount = reader.ReadInt32(); if (incEdgeCount > 0) { incEdgeProperties = new List<EdgeContainer>(incEdgeCount); for (var i = 0; i < incEdgeCount; i++) { var incEdgePropertyId = reader.ReadUInt16(); var incEdgePropertyCount = reader.ReadInt32(); var incEdges = new List<EdgeModel>(incEdgePropertyCount); for (var j = 0; j < incEdgePropertyCount; j++) { var edgeId = reader.ReadInt32(); EdgeModel edge = graphElements.GetElement(edgeId) as EdgeModel; if (edge != null) { incEdges.Add(edge); } else { var aEdgeTodo = new EdgeOnVertexToDo { VertexId = id, EdgePropertyId = incEdgePropertyId, IsIncomingEdge = true }; List<EdgeOnVertexToDo> todo; if (edgeTodo.TryGetValue(edgeId, out todo)) { todo.Add(aEdgeTodo); } else { edgeTodo.Add(edgeId, new List<EdgeOnVertexToDo> { aEdgeTodo }); } } } incEdgeProperties.Add(new EdgeContainer(incEdgePropertyId, incEdges)); } } #endregion #endregion graphElements.SetValue(id, new VertexModel(id, creationDate, modificationDate, properties, outEdgeProperties, incEdgeProperties)); }