public IGraphEdge GetEdge(int eid) { EdgePage page = LoadEdgePage(NetworkObjectSerializer.Page(eid)); if (page == null) { return(null); } return(page.GetEdge(eid)); }
private EdgePage LoadEdgePage(int page) { lock (_thisLock) { if (_edgePages.ContainsKey(page)) { return(_edgePages[page]); } if (_dbfactory != null) { try { using (DbConnection connection = _dbfactory.CreateConnection()) { connection.ConnectionString = _connectionString; DbCommand command = _dbfactory.CreateCommand(); command.Connection = connection; command.CommandText = "SELECT " + _dbNames.DbColName("Data") + " FROM " + _edgeTableName + " WHERE " + _dbNames.DbColName("Page") + "=" + page; connection.Open(); DbDataReader reader = command.ExecuteReader(); if (reader.Read()) { object obj = reader.GetValue(0); connection.Close(); EdgePage newEdgePage = NetworkObjectSerializer.DeserializeEdges((byte[])obj); _edgePages.Add(page, newEdgePage); return(newEdgePage); } connection.Close(); } } catch { } } return(null); } }
public static EdgePage DeserializeEdges(byte[] bytes) { BinaryReader r = new BinaryReader(new MemoryStream()); r.BaseStream.Write(bytes, 0, (bytes.Length)); r.BaseStream.Position = 0; EdgePage page = new EdgePage(); while (r.BaseStream.Position < r.BaseStream.Length) { int eid = r.ReadInt32(); int fcid = r.ReadInt32(), oid = -1; if (fcid >= 0) { oid = r.ReadInt32(); } int n1 = r.ReadInt32(); int n2 = r.ReadInt32(); page.Add(eid, fcid, oid, n1, n2); } return(page); }