7
7
8
8
import Foundation
9
9
10
- private class EdgeList < T where T: Equatable , T: Hashable > {
10
+
11
+
12
+ private class EdgeList < T> where T: Equatable , T: Hashable {
11
13
12
14
var vertex : Vertex < T >
13
15
var edges : [ Edge < T > ] ? = nil
@@ -16,15 +18,15 @@ private class EdgeList<T where T: Equatable, T: Hashable> {
16
18
self . vertex = vertex
17
19
}
18
20
19
- func addEdge( edge: Edge < T > ) {
21
+ func addEdge( _ edge: Edge < T > ) {
20
22
edges? . append ( edge)
21
23
}
22
24
23
25
}
24
26
25
- public class AdjacencyListGraph < T where T: Equatable , T: Hashable > : AbstractGraph < T > {
27
+ open class AdjacencyListGraph < T> : AbstractGraph < T > where T: Equatable , T: Hashable {
26
28
27
- private var adjacencyList : [ EdgeList < T > ] = [ ]
29
+ fileprivate var adjacencyList : [ EdgeList < T > ] = [ ]
28
30
29
31
public required init ( ) {
30
32
super. init ( )
@@ -34,7 +36,7 @@ public class AdjacencyListGraph<T where T: Equatable, T: Hashable>: AbstractGrap
34
36
super. init ( fromGraph: graph)
35
37
}
36
38
37
- public override var vertices : [ Vertex < T > ] {
39
+ open override var vertices : [ Vertex < T > ] {
38
40
get {
39
41
var vertices = [ Vertex < T > ] ( )
40
42
for edgeList in adjacencyList {
@@ -44,7 +46,7 @@ public class AdjacencyListGraph<T where T: Equatable, T: Hashable>: AbstractGrap
44
46
}
45
47
}
46
48
47
- public override var edges : [ Edge < T > ] {
49
+ open override var edges : [ Edge < T > ] {
48
50
get {
49
51
var allEdges = Set < Edge < T > > ( )
50
52
for edgeList in adjacencyList {
@@ -60,7 +62,7 @@ public class AdjacencyListGraph<T where T: Equatable, T: Hashable>: AbstractGrap
60
62
}
61
63
}
62
64
63
- public override func createVertex( data: T ) -> Vertex < T > {
65
+ open override func createVertex( _ data: T ) -> Vertex < T > {
64
66
// check if the vertex already exists
65
67
let matchingVertices = vertices. filter ( ) { vertex in
66
68
return vertex. data == data
@@ -76,24 +78,24 @@ public class AdjacencyListGraph<T where T: Equatable, T: Hashable>: AbstractGrap
76
78
return vertex
77
79
}
78
80
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 ? ) {
80
82
// works
81
83
let edge = Edge ( from: from, to: to, weight: weight)
82
84
let edgeList = adjacencyList [ from. index]
83
- if edgeList. edges? . count > 0 {
84
- edgeList. addEdge ( edge)
85
+ if let _ = edgeList. edges {
86
+ edgeList. addEdge ( edge)
85
87
} else {
86
- edgeList. edges = [ edge]
88
+ edgeList. edges = [ edge]
87
89
}
88
90
}
89
91
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 ? ) {
91
93
addDirectedEdge ( vertices. 0 , to: vertices. 1 , withWeight: weight)
92
94
addDirectedEdge ( vertices. 1 , to: vertices. 0 , withWeight: weight)
93
95
}
94
96
95
97
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 ? {
97
99
guard let edges = adjacencyList [ sourceVertex. index] . edges else {
98
100
return nil
99
101
}
@@ -107,11 +109,11 @@ public class AdjacencyListGraph<T where T: Equatable, T: Hashable>: AbstractGrap
107
109
return nil
108
110
}
109
111
110
- public override func edgesFrom( sourceVertex: Vertex < T > ) -> [ Edge < T > ] {
112
+ open override func edgesFrom( _ sourceVertex: Vertex < T > ) -> [ Edge < T > ] {
111
113
return adjacencyList [ sourceVertex. index] . edges ?? [ ]
112
114
}
113
115
114
- public override var description : String {
116
+ open override var description : String {
115
117
get {
116
118
var rows = [ String] ( )
117
119
for edgeList in adjacencyList {
@@ -129,10 +131,10 @@ public class AdjacencyListGraph<T where T: Equatable, T: Hashable>: AbstractGrap
129
131
row. append ( value)
130
132
}
131
133
132
- rows. append ( " \( edgeList. vertex. data) -> [ \( row. joinWithSeparator ( " , " ) ) ] " )
134
+ rows. append ( " \( edgeList. vertex. data) -> [ \( row. joined ( separator : " , " ) ) ] " )
133
135
}
134
136
135
- return rows. joinWithSeparator ( " \n " )
137
+ return rows. joined ( separator : " \n " )
136
138
}
137
139
}
138
140
}
0 commit comments