using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.Diagnostics.Contracts; using System.Linq; using System.Text; namespace DataStructures.ConcurrentAdjacencyList { //TODO: incomplete, requires inspection [Serializable] public class ConcurrentAdjacencyList { private readonly ConcurrentDictionary> dict = new ConcurrentDictionary>(); public IList Vertices { get { return dict.Keys.ToList(); } } public int Count { get { return dict.Count; } } public void AddVertex(T vertex) { Contract.Requires(vertex != null); dict[vertex] = new List(); } public void AddEdge(T vertex1, T vertex2) { Contract.Requires(vertex1 != null); Contract.Requires(vertex2 != null); dict[vertex1].Add(vertex2); dict[vertex2].Add(vertex1); } public bool IsNeighbourOf(T vertex, T neighbour) { Contract.Requires(vertex != null); Contract.Requires(neighbour != null); return dict.ContainsKey(vertex) && dict[vertex].Contains(neighbour); } public IList GetNeighbours(T vertex) { Contract.Requires(vertex != null); return dict.ContainsKey(vertex)? dict[vertex]: new List(); } } }