77
88import Foundation
99
10- private class EdgeList < T where T: Equatable , T: Hashable > {
10+
11+
12+ private class EdgeList < T> where T: Equatable , T: Hashable {
1113
1214 var vertex : Vertex < T >
1315 var edges : [ Edge < T > ] ? = nil
@@ -16,15 +18,15 @@ private class EdgeList<T where T: Equatable, T: Hashable> {
1618 self . vertex = vertex
1719 }
1820
19- func addEdge( edge: Edge < T > ) {
21+ func addEdge( _ edge: Edge < T > ) {
2022 edges? . append ( edge)
2123 }
2224
2325}
2426
25- public class AdjacencyListGraph < T where T: Equatable , T: Hashable > : AbstractGraph < T > {
27+ open class AdjacencyListGraph < T> : AbstractGraph < T > where T: Equatable , T: Hashable {
2628
27- private var adjacencyList : [ EdgeList < T > ] = [ ]
29+ fileprivate var adjacencyList : [ EdgeList < T > ] = [ ]
2830
2931 public required init ( ) {
3032 super. init ( )
@@ -34,7 +36,7 @@ public class AdjacencyListGraph<T where T: Equatable, T: Hashable>: AbstractGrap
3436 super. init ( fromGraph: graph)
3537 }
3638
37- public override var vertices : [ Vertex < T > ] {
39+ open override var vertices : [ Vertex < T > ] {
3840 get {
3941 var vertices = [ Vertex < T > ] ( )
4042 for edgeList in adjacencyList {
@@ -44,7 +46,7 @@ public class AdjacencyListGraph<T where T: Equatable, T: Hashable>: AbstractGrap
4446 }
4547 }
4648
47- public override var edges : [ Edge < T > ] {
49+ open override var edges : [ Edge < T > ] {
4850 get {
4951 var allEdges = Set < Edge < T > > ( )
5052 for edgeList in adjacencyList {
@@ -60,7 +62,7 @@ public class AdjacencyListGraph<T where T: Equatable, T: Hashable>: AbstractGrap
6062 }
6163 }
6264
63- public override func createVertex( data: T ) -> Vertex < T > {
65+ open override func createVertex( _ data: T ) -> Vertex < T > {
6466 // check if the vertex already exists
6567 let matchingVertices = vertices. filter ( ) { vertex in
6668 return vertex. data == data
@@ -76,24 +78,24 @@ public class AdjacencyListGraph<T where T: Equatable, T: Hashable>: AbstractGrap
7678 return vertex
7779 }
7880
79- public override func addDirectedEdge( from: Vertex < T > , to: Vertex < T > , withWeight weight: Double ? ) {
81+ open override func addDirectedEdge( _ from: Vertex < T > , to: Vertex < T > , withWeight weight: Double ? ) {
8082 // works
8183 let edge = Edge ( from: from, to: to, weight: weight)
8284 let edgeList = adjacencyList [ from. index]
83- if edgeList. edges? . count > 0 {
84- edgeList. addEdge ( edge)
85+ if let _ = edgeList. edges {
86+ edgeList. addEdge ( edge)
8587 } else {
86- edgeList. edges = [ edge]
88+ edgeList. edges = [ edge]
8789 }
8890 }
8991
90- public override func addUndirectedEdge( vertices: ( Vertex < T > , Vertex < T > ) , withWeight weight: Double ? ) {
92+ open override func addUndirectedEdge( _ vertices: ( Vertex < T > , Vertex < T > ) , withWeight weight: Double ? ) {
9193 addDirectedEdge ( vertices. 0 , to: vertices. 1 , withWeight: weight)
9294 addDirectedEdge ( vertices. 1 , to: vertices. 0 , withWeight: weight)
9395 }
9496
9597
96- public override func weightFrom( sourceVertex: Vertex < T > , to destinationVertex: Vertex < T > ) -> Double ? {
98+ open override func weightFrom( _ sourceVertex: Vertex < T > , to destinationVertex: Vertex < T > ) -> Double ? {
9799 guard let edges = adjacencyList [ sourceVertex. index] . edges else {
98100 return nil
99101 }
@@ -107,11 +109,11 @@ public class AdjacencyListGraph<T where T: Equatable, T: Hashable>: AbstractGrap
107109 return nil
108110 }
109111
110- public override func edgesFrom( sourceVertex: Vertex < T > ) -> [ Edge < T > ] {
112+ open override func edgesFrom( _ sourceVertex: Vertex < T > ) -> [ Edge < T > ] {
111113 return adjacencyList [ sourceVertex. index] . edges ?? [ ]
112114 }
113115
114- public override var description : String {
116+ open override var description : String {
115117 get {
116118 var rows = [ String] ( )
117119 for edgeList in adjacencyList {
@@ -129,10 +131,10 @@ public class AdjacencyListGraph<T where T: Equatable, T: Hashable>: AbstractGrap
129131 row. append ( value)
130132 }
131133
132- rows. append ( " \( edgeList. vertex. data) -> [ \( row. joinWithSeparator ( " , " ) ) ] " )
134+ rows. append ( " \( edgeList. vertex. data) -> [ \( row. joined ( separator : " , " ) ) ] " )
133135 }
134136
135- return rows. joinWithSeparator ( " \n " )
137+ return rows. joined ( separator : " \n " )
136138 }
137139 }
138140}
0 commit comments