Rename Matrix to Matrix2D

This commit is contained in:
hectr 2019-07-15 00:29:26 +02:00
parent 7a87ec23a7
commit e7ea5a92a8
12 changed files with 37 additions and 37 deletions

View File

@ -14,7 +14,7 @@
import Swift import Swift
import ElementaryCyclesSearch import ElementaryCyclesSearch
extension Matrix where Element == Bool { extension Matrix2D where Element == Bool {
enum Error: Swift.Error { enum Error: Swift.Error {
case indexNotFound(node: AnyHashable, nodes: [AnyHashable]) case indexNotFound(node: AnyHashable, nodes: [AnyHashable])
} }

View File

@ -14,7 +14,7 @@
import Swift import Swift
import ElementaryCyclesSearch import ElementaryCyclesSearch
extension Matrix where Element == Bool { extension Matrix2D where Element == Bool {
static func getNodes<Node: Hashable>(graph: [Node: [Node]], sort: ((Node, Node) -> Bool)?) -> [Node] { static func getNodes<Node: Hashable>(graph: [Node: [Node]], sort: ((Node, Node) -> Bool)?) -> [Node] {
var nodes = [Node]() var nodes = [Node]()
for (node, adjacentNodes) in graph { for (node, adjacentNodes) in graph {

View File

@ -24,7 +24,7 @@ import Swift
* @version 1.0, 26.08.2006 * @version 1.0, 26.08.2006
* *
*/ */
extension Matrix where Element == Int { extension Matrix2D where Element == Int {
/** /**
* Calculates a adjacency-list for a given array of an adjacency-matrix. * Calculates a adjacency-list for a given array of an adjacency-matrix.
* *
@ -35,8 +35,8 @@ extension Matrix where Element == Int {
* adjacency, the second dimension represents the indicies of those nodes, * adjacency, the second dimension represents the indicies of those nodes,
* that are direct successornodes of the node. * that are direct successornodes of the node.
*/ */
static func getAdjacencyList(adjacencyMatrix: AdjacencyMatrix) -> Matrix<Int> { static func getAdjacencyList(adjacencyMatrix: AdjacencyMatrix) -> Matrix2D<Int> {
let list = Matrix<Int>(adjacencyMatrix.reservedLength) let list = Matrix2D<Int>(adjacencyMatrix.reservedLength)
for i in 0 ..< adjacencyMatrix.reservedLength { for i in 0 ..< adjacencyMatrix.reservedLength {
var v = [Int]() var v = [Int]()

View File

@ -16,4 +16,4 @@
import Swift import Swift
typealias AdjacencyList = Matrix<Int> typealias AdjacencyList = Matrix2D<Int>

View File

@ -16,9 +16,9 @@
import Swift import Swift
public typealias AdjacencyMatrix = Matrix<Bool> public typealias AdjacencyMatrix = Matrix2D<Bool>
extension Matrix where Element == Bool { extension Matrix2D where Element == Bool {
public convenience init(_ reservedRows: Int, _ reservedColumns: Int = 0, builder: (AdjacencyMatrix) -> Void) { public convenience init(_ reservedRows: Int, _ reservedColumns: Int = 0, builder: (AdjacencyMatrix) -> Void) {
self.init(reservedRows, reservedColumns) self.init(reservedRows, reservedColumns)
builder(self) builder(self)

View File

@ -54,7 +54,7 @@ public class ElementaryCyclesSearch<Node> {
private var blocked: Vector<Bool> private var blocked: Vector<Bool>
/** B-Lists, used by the algorithm of Johnson */ /** B-Lists, used by the algorithm of Johnson */
private var B: Matrix<Int> private var B: Matrix2D<Int>
/** Stack for nodes, used by the algorithm of Johnson */ /** Stack for nodes, used by the algorithm of Johnson */
private var stack: [Int] private var stack: [Int]
@ -88,7 +88,7 @@ public class ElementaryCyclesSearch<Node> {
self.adjacencyList = AdjacencyList.getAdjacencyList(adjacencyMatrix: adjacencyMatrix) self.adjacencyList = AdjacencyList.getAdjacencyList(adjacencyMatrix: adjacencyMatrix)
cycles = [[Node]]() cycles = [[Node]]()
blocked = Vector<Bool>(adjacencyList.reservedLength) blocked = Vector<Bool>(adjacencyList.reservedLength)
B = Matrix<Int>(adjacencyList.reservedLength) B = Matrix2D<Int>(adjacencyList.reservedLength)
stack = [Int]() stack = [Int]()
} }

View File

@ -13,15 +13,15 @@
import Swift import Swift
public struct MatrixIterator<Element>: IteratorProtocol { public struct Matrix2DIterator<Element>: IteratorProtocol {
private let matrix: Matrix<Element> private let matrix: Matrix2D<Element>
private var currentIndex = -1 private var currentIndex = -1
private var currentIterator: VectorIterator<Element>? private var currentIterator: VectorIterator<Element>?
fileprivate init(matrix: Matrix<Element>) { fileprivate init(matrix: Matrix2D<Element>) {
self.matrix = matrix self.matrix = matrix
} }
mutating public func next() -> Element? { mutating public func next() -> Element? {
if let element = currentIterator?.next() { if let element = currentIterator?.next() {
return element return element
@ -34,8 +34,8 @@ public struct MatrixIterator<Element>: IteratorProtocol {
} }
} }
extension Matrix: Sequence { extension Matrix2D: Sequence {
public func makeIterator() -> MatrixIterator<Element> { public func makeIterator() -> Matrix2DIterator<Element> {
return MatrixIterator(matrix: self) return Matrix2DIterator(matrix: self)
} }
} }

View File

@ -13,7 +13,7 @@
import Swift import Swift
public final class Matrix<Element> { public final class Matrix2D<Element> {
private var vector: Vector<Vector<Element>> private var vector: Vector<Vector<Element>>
public subscript(_ row: Int) -> Vector<Element>! { public subscript(_ row: Int) -> Vector<Element>! {
@ -24,14 +24,14 @@ public final class Matrix<Element> {
vector[row] = newValue vector[row] = newValue
} }
} }
public init(_ reservedRows: Int, _ reservedColumns: Int = 0) { public init(_ reservedRows: Int, _ reservedColumns: Int = 0) {
self.vector = Vector<Vector<Element>>(reservedRows) self.vector = Vector<Vector<Element>>(reservedRows)
for i in 0 ..< reservedLength { for i in 0 ..< reservedLength {
vector[i] = Vector<Element>(reservedColumns) vector[i] = Vector<Element>(reservedColumns)
} }
} }
public convenience init(rows: [[Element]]) { public convenience init(rows: [[Element]]) {
var reservedColumns = 0 var reservedColumns = 0
for row in rows { for row in rows {
@ -42,26 +42,26 @@ public final class Matrix<Element> {
self[offset] = Vector(array: row, reservedLength: reservedColumns) self[offset] = Vector(array: row, reservedLength: reservedColumns)
} }
} }
public var reservedLength: Int { public var reservedLength: Int {
return vector.reservedLength return vector.reservedLength
} }
} }
extension Matrix: CustomDebugStringConvertible { extension Matrix2D: CustomDebugStringConvertible {
public var debugDescription: String { public var debugDescription: String {
return vector.debugDescription return vector.debugDescription
} }
} }
extension Matrix: CustomStringConvertible { extension Matrix2D: CustomStringConvertible {
public var description: String { public var description: String {
return vector.description return vector.description
} }
} }
extension Matrix: Equatable where Element: Equatable { extension Matrix2D: Equatable where Element: Equatable {
public static func == (lhs: Matrix<Element>, rhs: Matrix<Element>) -> Bool { public static func == (lhs: Matrix2D<Element>, rhs: Matrix2D<Element>) -> Bool {
guard lhs.reservedLength == rhs.reservedLength else { return false } guard lhs.reservedLength == rhs.reservedLength else { return false }
for index in 0 ..< lhs.reservedLength { for index in 0 ..< lhs.reservedLength {
guard lhs[index] == rhs[index] else { return false } guard lhs[index] == rhs[index] else { return false }

View File

@ -77,12 +77,12 @@ public final class Vector<Element> {
} }
extension Vector where Element: Equatable { extension Vector where Element: Equatable {
func contains(_ element: Element) -> Bool{ public func contains(_ element: Element) -> Bool {
return array.contains(element) return array.contains(element)
} }
@discardableResult @discardableResult
func remove(element: Element) -> Bool { public func remove(element: Element) -> Bool {
if let index = array.firstIndex(of: element) { if let index = array.firstIndex(of: element) {
array.remove(at: -index.distance(to: 0)) array.remove(at: -index.distance(to: 0))
return true return true

View File

@ -16,7 +16,7 @@ final class AdjacencyListTests: XCTestCase {
} }
} }
var sut: ((AdjacencyMatrix) -> Matrix<Int>)! var sut: ((AdjacencyMatrix) -> Matrix2D<Int>)!
override func setUp() { override func setUp() {
super.setUp() super.setUp()

View File

@ -22,9 +22,9 @@ final class AdjacencyMatrixTests: XCTestCase {
func testConvenienceInit() { func testConvenienceInit() {
let rows = [["a"],[],["b", "c"]] let rows = [["a"],[],["b", "c"]]
let matrix = Matrix<String>(rows: rows) let matrix = Matrix2D<String>(rows: rows)
let expectedMatrix: Matrix<String> = { let expectedMatrix: Matrix2D<String> = {
let matrix = Matrix<String>(3, 2) let matrix = Matrix2D<String>(3, 2)
matrix[0][0] = "a" matrix[0][0] = "a"
matrix[2][0] = "b" matrix[2][0] = "b"
matrix[2][1] = "c" matrix[2][1] = "c"
@ -34,7 +34,7 @@ final class AdjacencyMatrixTests: XCTestCase {
} }
func testSequence() { func testSequence() {
let matrix = Matrix<Int>(4, 4) let matrix = Matrix2D<Int>(4, 4)
matrix[0][1] = 1 matrix[0][1] = 1
matrix[1][2] = 2 matrix[1][2] = 2
matrix[3][0] = 3 matrix[3][0] = 3

View File

@ -7,7 +7,7 @@ final class StrongConnectedComponentsTests: XCTestCase {
func test1() { func test1() {
let adjMatrix = Matrix(10, 10) { matrix in let adjMatrix = Matrix2D(10, 10) { matrix in
matrix[0][1] = true matrix[0][1] = true
matrix[1][2] = true matrix[1][2] = true
matrix[2][0] = true; matrix[2][6] = true matrix[2][0] = true; matrix[2][6] = true
@ -20,7 +20,7 @@ final class StrongConnectedComponentsTests: XCTestCase {
matrix[6][1] = true matrix[6][1] = true
} }
let adjacencyList: Matrix<Int> = AdjacencyList.getAdjacencyList(adjacencyMatrix: adjMatrix) let adjacencyList: Matrix2D<Int> = AdjacencyList.getAdjacencyList(adjacencyMatrix: adjMatrix)
let sccs = StrongConnectedComponents(adjacencyList: adjacencyList) let sccs = StrongConnectedComponents(adjacencyList: adjacencyList)
var description = "" var description = ""
@ -91,7 +91,7 @@ i: 9
} }
func test2() { func test2() {
let adjMatrix: AdjacencyMatrix = Matrix(10, 10) { matrix in let adjMatrix: AdjacencyMatrix = Matrix2D(10, 10) { matrix in
matrix[0][1] = true matrix[0][1] = true
matrix[1][2] = true matrix[1][2] = true
matrix[2][0] = true matrix[2][0] = true
@ -106,7 +106,7 @@ i: 9
matrix[9][6] = true matrix[9][6] = true
} }
let adjacencyList: Matrix<Int> = AdjacencyList.getAdjacencyList(adjacencyMatrix: adjMatrix) let adjacencyList: Matrix2D<Int> = AdjacencyList.getAdjacencyList(adjacencyMatrix: adjMatrix)
let sccs = StrongConnectedComponents(adjacencyList: adjacencyList) let sccs = StrongConnectedComponents(adjacencyList: adjacencyList)
var description = "" var description = ""