Skip to content

Commit bfd9ed2

Browse files
committed
Remove verbose methods in Transition & Route.
1 parent 93f184b commit bfd9ed2

11 files changed

+143
-206
lines changed

SwiftState/Machine.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -471,7 +471,7 @@ public class Machine<S: StateType, E: EventType>
471471

472472
public func addChainHandler(chain: TransitionChain<S>, order: HandlerOrder = _defaultOrder, handler: Handler) -> ChainHandlerID<S, E>
473473
{
474-
return self.addChainHandler(chain.toRouteChain(), order: order, handler: handler)
474+
return self.addChainHandler(RouteChain(transitionChain: chain), order: order, handler: handler)
475475
}
476476

477477
public func addChainHandler(chain: RouteChain<S, E>, order: HandlerOrder = _defaultOrder, handler: Handler) -> ChainHandlerID<S, E>
@@ -483,7 +483,7 @@ public class Machine<S: StateType, E: EventType>
483483

484484
public func addChainErrorHandler(chain: TransitionChain<S>, order: HandlerOrder = _defaultOrder, handler: Handler) -> ChainHandlerID<S, E>
485485
{
486-
return self.addChainErrorHandler(chain.toRouteChain(), order: order, handler: handler)
486+
return self.addChainErrorHandler(RouteChain(transitionChain: chain), order: order, handler: handler)
487487
}
488488

489489
public func addChainErrorHandler(chain: RouteChain<S, E>, order: HandlerOrder = _defaultOrder, handler: Handler) -> ChainHandlerID<S, E>

SwiftState/Route.swift

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -16,18 +16,6 @@ public struct Route<S: StateType, E: EventType>
1616
self.transition = transition
1717
self.condition = condition
1818
}
19-
20-
public func toTransition() -> Transition<S>
21-
{
22-
return self.transition
23-
}
24-
25-
public func toRouteChain() -> RouteChain<S, E>
26-
{
27-
var routes: [Route<S, E>] = []
28-
routes += [self]
29-
return RouteChain(routes: routes)
30-
}
3119
}
3220

3321
//--------------------------------------------------

SwiftState/RouteChain.swift

Lines changed: 3 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -8,51 +8,19 @@
88

99
public struct RouteChain<S: StateType, E: EventType>
1010
{
11-
internal var routes: [Route<S, E>]
11+
public private(set) var routes: [Route<S, E>]
1212

1313
public init(routes: [Route<S, E>])
1414
{
1515
self.routes = routes
1616
}
1717

18-
public init(transitionChain: TransitionChain<S>, condition: Machine<S, E>.Condition?)
18+
public init(transitionChain: TransitionChain<S>, condition: Machine<S, E>.Condition? = nil)
1919
{
2020
var routes: [Route<S, E>] = []
2121
for transition in transitionChain.transitions {
2222
routes += [Route<S, E>(transition: transition, condition: condition)]
2323
}
24-
self.routes = routes
25-
}
26-
27-
public var numberOfRoutes: Int
28-
{
29-
return self.routes.count
30-
}
31-
32-
mutating public func prepend(state: State<S>, condition: Machine<S, E>.Condition?)
33-
{
34-
let firstfromState = self.routes.first!.transition.fromState
35-
let newRoute = Route<S, E>(transition: state => firstfromState, condition: condition)
36-
37-
self.routes.insert(newRoute, atIndex: 0)
38-
}
39-
40-
mutating internal func append(state: State<S>, condition: Machine<S, E>.Condition?)
41-
{
42-
let lasttoState = self.routes.last!.transition.toState
43-
let newRoute = Route<S, E>(transition: lasttoState => state, condition: condition)
44-
45-
self.routes += [newRoute]
46-
}
47-
48-
public func toTransitionChain() -> TransitionChain<S>
49-
{
50-
let transitions = self.routes.map { route in route.transition }
51-
return TransitionChain(transitions: transitions)
52-
}
53-
54-
public func toRoutes() -> [Route<S, E>]
55-
{
56-
return self.routes
24+
self.init(routes: routes)
5725
}
5826
}

SwiftState/Transition.swift

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -36,16 +36,6 @@ public struct Transition<S: StateType>: Hashable
3636
{
3737
return self.fromState.hashValue &+ self.toState.hashValue.byteSwapped
3838
}
39-
40-
public func toTransitionChain() -> TransitionChain<S>
41-
{
42-
return TransitionChain(transition: self)
43-
}
44-
45-
public func toRoute<E: EventType>() -> Route<S, E>
46-
{
47-
return Route(transition: self, condition: nil)
48-
}
4939
}
5040

5141
// for Transition Equatable

SwiftState/TransitionChain.swift

Lines changed: 11 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -8,25 +8,16 @@
88

99
public struct TransitionChain<S: StateType>
1010
{
11-
public var states: [State<S>]
11+
public private(set) var states: [State<S>]
1212

13-
public init(transition: Transition<S>)
13+
public init(states: [State<S>])
1414
{
15-
self.init(transitions: [transition])
15+
self.states = states
1616
}
1717

18-
public init(transitions: [Transition<S>])
18+
public init(transition: Transition<S>)
1919
{
20-
assert(transitions.count > 0, "TransitionChain must be initialized with at least 1 transition.")
21-
22-
var states: [State<S>] = []
23-
for i in 0..<transitions.count {
24-
if i == 0 {
25-
states += [transitions[i].fromState]
26-
}
27-
states += [transitions[i].toState]
28-
}
29-
self.states = states
20+
self.init(states: [transition.fromState, transition.toState])
3021
}
3122

3223
public var transitions: [Transition<S>]
@@ -39,51 +30,6 @@ public struct TransitionChain<S: StateType>
3930

4031
return transitions
4132
}
42-
43-
public var firstState: State<S>
44-
{
45-
return self.states.first!
46-
}
47-
48-
public var lastState: State<S>
49-
{
50-
return self.states.last!
51-
}
52-
53-
public var numberOfTransitions: Int
54-
{
55-
return self.states.count-1
56-
}
57-
58-
mutating public func prepend(state: State<S>)
59-
{
60-
self.states.insert(state, atIndex: 0)
61-
}
62-
63-
mutating public func prepend(state: S)
64-
{
65-
self.states.insert(.Some(state), atIndex: 0)
66-
}
67-
68-
mutating public func append(state: State<S>)
69-
{
70-
self.states += [state]
71-
}
72-
73-
mutating public func append(state: S)
74-
{
75-
self.states += [.Some(state)]
76-
}
77-
78-
public func toRouteChain<E: EventType>() -> RouteChain<S, E>
79-
{
80-
return RouteChain(transitionChain: self, condition: nil)
81-
}
82-
83-
public func toTransitions() -> [Transition<S>]
84-
{
85-
return self.transitions
86-
}
8733
}
8834

8935
//--------------------------------------------------
@@ -93,18 +39,17 @@ public struct TransitionChain<S: StateType>
9339
// e.g. (.State0 => .State1) => .State
9440
public func => <S: StateType>(left: Transition<S>, right: State<S>) -> TransitionChain<S>
9541
{
96-
return left.toTransitionChain() => right
42+
return TransitionChain(states: [left.fromState, left.toState]) => right
9743
}
9844

9945
public func => <S: StateType>(left: Transition<S>, right: S) -> TransitionChain<S>
10046
{
10147
return left => .Some(right)
10248
}
10349

104-
public func => <S: StateType>(var left: TransitionChain<S>, right: State<S>) -> TransitionChain<S>
50+
public func => <S: StateType>(left: TransitionChain<S>, right: State<S>) -> TransitionChain<S>
10551
{
106-
left.append(right)
107-
return left
52+
return TransitionChain(states: left.states + [right])
10853
}
10954

11055
public func => <S: StateType>(left: TransitionChain<S>, right: S) -> TransitionChain<S>
@@ -115,18 +60,17 @@ public func => <S: StateType>(left: TransitionChain<S>, right: S) -> TransitionC
11560
// e.g. .State0 => (.State1 => .State)
11661
public func => <S: StateType>(left: State<S>, right:Transition<S>) -> TransitionChain<S>
11762
{
118-
return left => right.toTransitionChain()
63+
return left => TransitionChain(states: [right.fromState, right.toState])
11964
}
12065

12166
public func => <S: StateType>(left: S, right:Transition<S>) -> TransitionChain<S>
12267
{
12368
return .Some(left) => right
12469
}
12570

126-
public func => <S: StateType>(left: State<S>, var right: TransitionChain<S>) -> TransitionChain<S>
71+
public func => <S: StateType>(left: State<S>, right: TransitionChain<S>) -> TransitionChain<S>
12772
{
128-
right.prepend(left)
129-
return right
73+
return TransitionChain(states: [left] + right.states)
13074
}
13175

13276
public func => <S: StateType>(left: S, right: TransitionChain<S>) -> TransitionChain<S>

SwiftStateTests/BasicTests.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ class BasicTests: _TestCase
6666
}
6767
}
6868

69-
// tryState 0 => 1 => 2 => 1 => 0
69+
// tryState 0 => 1 => 2 => 1 => 0
7070

7171
machine <- ".State1"
7272
XCTAssertTrue(machine.state == ".State1")

SwiftStateTests/MachineTests.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -280,7 +280,7 @@ class MachineTests: _TestCase
280280
}
281281

282282
//--------------------------------------------------
283-
// MARK: - tryState a.k.a <-
283+
// MARK: - tryState a.k.a `<-`
284284
//--------------------------------------------------
285285

286286
// machine <- state

SwiftStateTests/RouteChainTests.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -313,4 +313,5 @@ class MachineChainTests: _TestCase
313313
machine <- .State2
314314
XCTAssertEqual(errorCount, 0, "Chain error, but chainErrorHandler should NOT be performed.")
315315
}
316+
316317
}

SwiftStateTests/TransitionChainTests.swift

Lines changed: 41 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -16,68 +16,77 @@ class TransitionChainTests: _TestCase
1616
// 0 => 1 => 2
1717
var chain = MyState.State0 => .State1 => .State2
1818

19-
XCTAssertEqual(chain.numberOfTransitions, 2)
20-
XCTAssertEqual(chain.firstState.value, MyState.State0)
21-
XCTAssertEqual(chain.lastState.value, MyState.State2)
19+
XCTAssertEqual(chain.states.count, 3)
20+
XCTAssertTrue(chain.states[0] == .State0)
21+
XCTAssertTrue(chain.states[1] == .State1)
22+
XCTAssertTrue(chain.states[2] == .State2)
2223

2324
// (1 => 2) => 3
2425
chain = MyState.State1 => .State2 => .State3
2526

26-
XCTAssertEqual(chain.numberOfTransitions, 2)
27-
XCTAssertEqual(chain.firstState.value, MyState.State1)
28-
XCTAssertEqual(chain.lastState.value, MyState.State3)
27+
XCTAssertEqual(chain.states.count, 3)
28+
XCTAssertTrue(chain.states[0] == .State1)
29+
XCTAssertTrue(chain.states[1] == .State2)
30+
XCTAssertTrue(chain.states[2] == .State3)
2931

3032
// 2 => (3 => 0)
3133
chain = MyState.State2 => (.State3 => .State0)
3234

33-
XCTAssertEqual(chain.numberOfTransitions, 2)
34-
XCTAssertEqual(chain.firstState.value, MyState.State2)
35-
XCTAssertEqual(chain.lastState.value, MyState.State0)
35+
XCTAssertEqual(chain.states.count, 3)
36+
XCTAssertTrue(chain.states[0] == .State2)
37+
XCTAssertTrue(chain.states[1] == .State3)
38+
XCTAssertTrue(chain.states[2] == .State0)
3639
}
3740

3841
func testAppend()
3942
{
4043
// 0 => 1
4144
let transition = MyState.State0 => .State1
42-
var chain = transition.toTransitionChain()
45+
var chain = TransitionChain(transition: transition)
4346

44-
XCTAssertEqual(chain.numberOfTransitions, 1)
45-
XCTAssertEqual(chain.firstState.value, MyState.State0)
46-
XCTAssertEqual(chain.lastState.value, MyState.State1)
47+
XCTAssertEqual(chain.states.count, 2)
48+
XCTAssertTrue(chain.states[0] == .State0)
49+
XCTAssertTrue(chain.states[1] == .State1)
4750

4851
// 0 => 1 => 2
49-
chain = chain => .State2 // same as append
50-
XCTAssertEqual(chain.numberOfTransitions, 2)
51-
XCTAssertEqual(chain.firstState.value, MyState.State0)
52-
XCTAssertEqual(chain.lastState.value, MyState.State2)
52+
chain = chain => .State2
53+
XCTAssertEqual(chain.states.count, 3)
54+
XCTAssertTrue(chain.states[0] == .State0)
55+
XCTAssertTrue(chain.states[1] == .State1)
56+
XCTAssertTrue(chain.states[2] == .State2)
5357

5458
// 0 => 1 => 2 => 3
55-
chain.append(.State3)
56-
XCTAssertEqual(chain.numberOfTransitions, 3)
57-
XCTAssertEqual(chain.firstState.value, MyState.State0)
58-
XCTAssertEqual(chain.lastState.value, MyState.State3)
59+
chain = chain => .State3
60+
XCTAssertEqual(chain.states.count, 4)
61+
XCTAssertTrue(chain.states[0] == .State0)
62+
XCTAssertTrue(chain.states[1] == .State1)
63+
XCTAssertTrue(chain.states[2] == .State2)
64+
XCTAssertTrue(chain.states[3] == .State3)
5965
}
6066

6167
func testPrepend()
6268
{
6369
// 0 => 1
6470
let transition = MyState.State0 => .State1
65-
var chain = transition.toTransitionChain()
71+
var chain = TransitionChain(transition: transition)
6672

67-
XCTAssertEqual(chain.numberOfTransitions, 1)
68-
XCTAssertEqual(chain.firstState.value, MyState.State0)
69-
XCTAssertEqual(chain.lastState.value, MyState.State1)
73+
XCTAssertEqual(chain.states.count, 2)
74+
XCTAssertTrue(chain.states[0] == .State0)
75+
XCTAssertTrue(chain.states[1] == .State1)
7076

7177
// 2 => 0 => 1
7278
chain = .State2 => chain // same as prepend
73-
XCTAssertEqual(chain.numberOfTransitions, 2)
74-
XCTAssertEqual(chain.firstState.value, MyState.State2)
75-
XCTAssertEqual(chain.lastState.value, MyState.State1)
79+
XCTAssertEqual(chain.states.count, 3)
80+
XCTAssertTrue(chain.states[0] == .State2)
81+
XCTAssertTrue(chain.states[1] == .State0)
82+
XCTAssertTrue(chain.states[2] == .State1)
7683

7784
// 3 => 2 => 0 => 1
78-
chain.prepend(.State3)
79-
XCTAssertEqual(chain.numberOfTransitions, 3)
80-
XCTAssertEqual(chain.firstState.value, MyState.State3)
81-
XCTAssertEqual(chain.lastState.value, MyState.State1)
85+
chain = .State3 => chain
86+
XCTAssertEqual(chain.states.count, 4)
87+
XCTAssertTrue(chain.states[0] == .State3)
88+
XCTAssertTrue(chain.states[1] == .State2)
89+
XCTAssertTrue(chain.states[2] == .State0)
90+
XCTAssertTrue(chain.states[3] == .State1)
8291
}
8392
}

0 commit comments

Comments
 (0)