public ReindexedDataResult <GraphConnectivityDefinition <TEdgeData> > CreateCompacted <TEdgeData>(
            GraphConnectivityDefinition <TEdgeData> source,
            IVertexAdjacencyFactory <TEdgeData> verticesFactory,
            bool sharedVerticesInstances,
            IEqualityComparer <VertexAdjacency <TEdgeData> > vertexEqualityComparer = null)
        {
            var oldVertices = source.ToArray();

            var map = oldVertices.SortWithReindexingResult(VertexAdjacencyComparer <TEdgeData> .DefaultWithHighestNumberOfEdgesFirst);

            var cloned = Create(oldVertices,
                                new ReindexedVertexAdjacencyFactoryWrapper <TEdgeData>(map, verticesFactory ?? new VertexAdjacencyFactory <TEdgeData>()), d => d,
                                sharedVerticesInstances, vertexEqualityComparer);

            return(map.ToReindexedDataResult(cloned));
        }
 public void Deconstruct(out GraphConnectivityDefinition <TEdgeData> connectivity, out ISymbolToIndexReadOnlyConverter <TSymbol> symbolToIndexConverter)
 {
     connectivity           = Connectivity;
     symbolToIndexConverter = SymbolToIndexConverter;
 }
 /// <summary>Initializes a new instance of the <see cref="ReadOnlySymbolGraph{TEdgeData, TSymbol}" /> class.</summary>
 /// <param name="connectivity">The read-only connectivity.</param>
 /// <param name="symbolProvider">The read-only symbol provider.</param>
 internal ReadOnlySymbolGraph(GraphConnectivityDefinition <TEdgeData> connectivity,
                              ISymbolToIndexReadOnlyConverter <TSymbol> symbolProvider)
 {
     Connectivity           = connectivity;
     SymbolToIndexConverter = symbolProvider;
 }
 public GraphConnectivityDefinitionEdgeFilter(GraphConnectivityDefinition <TEdgeData> wrapped, Func <Edge <int, TEdgeData>, bool> selectEdgePredicate)
 {
     Wrapped             = wrapped ?? throw new ArgumentNullException(nameof(wrapped));
     SelectEdgePredicate = selectEdgePredicate ?? throw new ArgumentNullException(nameof(selectEdgePredicate));
     _adjWrappers        = new Dictionary <int, VertexAdjacency <TEdgeData> >(wrapped.Count);
 }