/// <summary>Initializes a new instance of the <see cref="IndexGraph{TEdgeData}" /> class.</summary> /// <param name="vertexModifier">The vertex adjacency modifier.</param> /// <param name="initialVerticesCount">The initial vertices count.</param> /// <param name="capacity">The vertices capacity.</param> public IndexGraph(int initialVerticesCount = 0, int capacity = 0, IVertexAdjacencyModifier <TEdgeData> vertexModifier = null) { _vertexModifier = vertexModifier ?? new VertexAdjacencyFactory <TEdgeData>(); _edgesCounter = new GraphEdgesCounter(); _vertices = new DefaultTailList <VertexAdjacency <TEdgeData> >( _vertexModifier.Empty, initialVerticesCount, capacity); Connectivity = _vertices.WrapAsGraphConnectivity(); }
/// <summary>Initializes a new instance of the <see cref="IndexGraph{TEdgeData}"/> class.</summary> /// <param name="adjacency">The adjacency.</param> /// <param name="capacity">The capacity.</param> /// <param name="vertexModifier">The vertex modifier.</param> public IndexGraph(IReadOnlyList <VertexAdjacency <TEdgeData> > adjacency, int capacity = 0, IVertexAdjacencyModifier <TEdgeData> vertexModifier = null) { var specifiedVerticesCount = adjacency.GetIndexOfLastNotEmptyVertex() + 1; capacity = Math.Max(capacity, specifiedVerticesCount); _vertexModifier = vertexModifier ?? new VertexAdjacencyFactory <TEdgeData>(); _edgesCounter = new GraphEdgesCounter(); var source = new List <VertexAdjacency <TEdgeData> >(capacity); source.AddRange(adjacency.Take(specifiedVerticesCount)); _vertices = new DefaultTailList <VertexAdjacency <TEdgeData> >(source, _vertexModifier.Empty, adjacency.Count); Connectivity = _vertices.WrapAsGraphConnectivity(); }