Skip to content

Commit 8109e3d

Browse files
committed
Merge remote-tracking branch 'reactive-swift/develop' into develop
# Conflicts: # ExecutionContext.xcodeproj/project.pbxproj
2 parents 49564d3 + 94105e3 commit 8109e3d

File tree

6 files changed

+58
-11
lines changed

6 files changed

+58
-11
lines changed

ExecutionContext.xcodeproj/project.pbxproj

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,12 @@
1313
65D637A01C9437BB000F5548 /* DispatchExecutionContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = 65D6379A1C9437BB000F5548 /* DispatchExecutionContext.swift */; };
1414
65D637A11C9437BB000F5548 /* ExecutionContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = 65D6379B1C9437BB000F5548 /* ExecutionContext.swift */; };
1515
65D637A21C9437BB000F5548 /* ImmediateExecutionContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = 65D6379C1C9437BB000F5548 /* ImmediateExecutionContext.swift */; };
16-
65D637A31C9437BB000F5548 /* RunLoopExecutionContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = 65D6379D1C9437BB000F5548 /* RunLoopExecutionContext.swift */; };
1716
65D637A51C9437F4000F5548 /* ExecutionContextTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 65D637A41C9437F4000F5548 /* ExecutionContextTests.swift */; };
17+
65FD8EC01CD9BC340046D5D6 /* ExecutionContextTenant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 65FD8EBF1CD9BC340046D5D6 /* ExecutionContextTenant.swift */; };
18+
65FD8EC11CD9BC340046D5D6 /* ExecutionContextTenant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 65FD8EBF1CD9BC340046D5D6 /* ExecutionContextTenant.swift */; };
19+
65FD8EC21CD9BC340046D5D6 /* ExecutionContextTenant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 65FD8EBF1CD9BC340046D5D6 /* ExecutionContextTenant.swift */; };
20+
65FD8EC31CD9BC340046D5D6 /* ExecutionContextTenant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 65FD8EBF1CD9BC340046D5D6 /* ExecutionContextTenant.swift */; };
21+
92B0010A1CDCFB8D00E23C7B /* RunLoopExecutionContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = 65D6379D1C9437BB000F5548 /* RunLoopExecutionContext.swift */; };
1822
92E4091A1CBC32F2001ED069 /* ExecutionContext.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 92E409101CBC32F2001ED069 /* ExecutionContext.framework */; };
1923
92E409271CBC3369001ED069 /* ExecutionContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = 65D6379B1C9437BB000F5548 /* ExecutionContext.swift */; };
2024
92E409281CBC336D001ED069 /* CustomExecutionContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = 65D637981C9437BB000F5548 /* CustomExecutionContext.swift */; };
@@ -167,6 +171,7 @@
167171
65D6379C1C9437BB000F5548 /* ImmediateExecutionContext.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ImmediateExecutionContext.swift; sourceTree = "<group>"; };
168172
65D6379D1C9437BB000F5548 /* RunLoopExecutionContext.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RunLoopExecutionContext.swift; sourceTree = "<group>"; };
169173
65D637A41C9437F4000F5548 /* ExecutionContextTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ExecutionContextTests.swift; sourceTree = "<group>"; };
174+
65FD8EBF1CD9BC340046D5D6 /* ExecutionContextTenant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ExecutionContextTenant.swift; sourceTree = "<group>"; };
170175
92E409101CBC32F2001ED069 /* ExecutionContext.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ExecutionContext.framework; sourceTree = BUILT_PRODUCTS_DIR; };
171176
92E409191CBC32F2001ED069 /* ExecutionContextTests-iOS.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "ExecutionContextTests-iOS.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
172177
92E4092E1CBC33F9001ED069 /* Boilerplate.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Boilerplate.framework; sourceTree = "<group>"; };
@@ -314,6 +319,7 @@
314319
65D6379A1C9437BB000F5548 /* DispatchExecutionContext.swift */,
315320
65D6379C1C9437BB000F5548 /* ImmediateExecutionContext.swift */,
316321
65D6379D1C9437BB000F5548 /* RunLoopExecutionContext.swift */,
322+
65FD8EBF1CD9BC340046D5D6 /* ExecutionContextTenant.swift */,
317323
65D637831C943764000F5548 /* Info.plist */,
318324
);
319325
path = ExecutionContext;
@@ -664,9 +670,10 @@
664670
isa = PBXSourcesBuildPhase;
665671
buildActionMask = 2147483647;
666672
files = (
667-
65D637A31C9437BB000F5548 /* RunLoopExecutionContext.swift in Sources */,
673+
65FD8EC01CD9BC340046D5D6 /* ExecutionContextTenant.swift in Sources */,
668674
65D6379F1C9437BB000F5548 /* DefaultExecutionContext.swift in Sources */,
669675
65D6379E1C9437BB000F5548 /* CustomExecutionContext.swift in Sources */,
676+
92B0010A1CDCFB8D00E23C7B /* RunLoopExecutionContext.swift in Sources */,
670677
65D637A21C9437BB000F5548 /* ImmediateExecutionContext.swift in Sources */,
671678
65D637A11C9437BB000F5548 /* ExecutionContext.swift in Sources */,
672679
65D637A01C9437BB000F5548 /* DispatchExecutionContext.swift in Sources */,
@@ -685,6 +692,7 @@
685692
isa = PBXSourcesBuildPhase;
686693
buildActionMask = 2147483647;
687694
files = (
695+
65FD8EC11CD9BC340046D5D6 /* ExecutionContextTenant.swift in Sources */,
688696
92E409271CBC3369001ED069 /* ExecutionContext.swift in Sources */,
689697
92E409291CBC3371001ED069 /* DefaultExecutionContext.swift in Sources */,
690698
92E4092B1CBC3378001ED069 /* ImmediateExecutionContext.swift in Sources */,
@@ -705,6 +713,7 @@
705713
isa = PBXSourcesBuildPhase;
706714
buildActionMask = 2147483647;
707715
files = (
716+
65FD8EC21CD9BC340046D5D6 /* ExecutionContextTenant.swift in Sources */,
708717
92E40A0F1CC10713001ED069 /* ExecutionContext.swift in Sources */,
709718
92E40A111CC10713001ED069 /* DefaultExecutionContext.swift in Sources */,
710719
92E40A131CC10713001ED069 /* ImmediateExecutionContext.swift in Sources */,
@@ -725,6 +734,7 @@
725734
isa = PBXSourcesBuildPhase;
726735
buildActionMask = 2147483647;
727736
files = (
737+
65FD8EC31CD9BC340046D5D6 /* ExecutionContextTenant.swift in Sources */,
728738
92E40A361CC10816001ED069 /* ExecutionContext.swift in Sources */,
729739
92E40A381CC10816001ED069 /* DefaultExecutionContext.swift in Sources */,
730740
92E40A3A1CC10816001ED069 /* ImmediateExecutionContext.swift in Sources */,

ExecutionContext/DispatchExecutionContext.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,9 @@
2525
private extension ExecutionContextKind {
2626
func createDispatchQueue(id:String) -> dispatch_queue_t! {
2727
switch self {
28-
case .Serial:
28+
case .serial:
2929
return dispatch_queue_create(id, DISPATCH_QUEUE_SERIAL)
30-
case .Parallel:
30+
case .parallel:
3131
return dispatch_queue_create(id, DISPATCH_QUEUE_CONCURRENT)
3232
}
3333
}

ExecutionContext/ExecutionContext.swift

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -148,8 +148,8 @@ public extension ErrorHandlerRegistryType where Self : TaskSchedulerType {
148148
}
149149

150150
public enum ExecutionContextKind {
151-
case Serial
152-
case Parallel
151+
case serial
152+
case parallel
153153
}
154154

155155
public typealias ExecutionContext = DefaultExecutionContext
@@ -177,4 +177,16 @@ public extension ExecutionContextType {
177177
return currentContext.value!
178178
}
179179
}
180+
}
181+
182+
public extension ExecutionContextType {
183+
//if context is current - executes immediately. Schedules to the context otherwise
184+
public func immediateIfCurrent(task:SafeTask) {
185+
//can avoid first check but is here for optimization
186+
if immediate.isEqualTo(self) || isCurrent {
187+
task()
188+
} else {
189+
execute(task)
190+
}
191+
}
180192
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
//===--- ExecutionContextTenant.swift ------------------------------------------------------===//
2+
//Copyright (c) 2016 Daniel Leping (dileping)
3+
//
4+
//Licensed under the Apache License, Version 2.0 (the "License");
5+
//you may not use this file except in compliance with the License.
6+
//You may obtain a copy of the License at
7+
//
8+
//http://www.apache.org/licenses/LICENSE-2.0
9+
//
10+
//Unless required by applicable law or agreed to in writing, software
11+
//distributed under the License is distributed on an "AS IS" BASIS,
12+
//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
//See the License for the specific language governing permissions and
14+
//limitations under the License.
15+
//===----------------------------------------------------------------------===//
16+
17+
public protocol ExecutionContextTenantProtocol {
18+
var context:ExecutionContextType {get}
19+
}
20+
21+
public protocol MovableExecutionContextTenantProtocol : ExecutionContextTenantProtocol {
22+
associatedtype SettledTenant
23+
24+
func settle(in context:ExecutionContextType) -> SettledTenant
25+
}

ExecutionContext/RunLoopExecutionContext.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -132,9 +132,9 @@ private class SerialContext : ExecutionContextBase, ExecutionContextType {
132132
private extension ExecutionContextKind {
133133
func createInnerContext() -> ExecutionContextType {
134134
switch self {
135-
case .Serial:
135+
case .serial:
136136
return SerialContext()
137-
case .Parallel:
137+
case .parallel:
138138
return ParallelContext()
139139
}
140140
}
@@ -183,7 +183,7 @@ public class RunLoopExecutionContext : ExecutionContextBase, ExecutionContextTyp
183183
}
184184

185185
public static let main:ExecutionContextType = RunLoopExecutionContext(inner: SerialContext(runLoop: RunLoop.main))
186-
public static let global:ExecutionContextType = RunLoopExecutionContext(kind: .Parallel)
186+
public static let global:ExecutionContextType = RunLoopExecutionContext(kind: .parallel)
187187

188188
@noreturn
189189
public static func mainProc() {

Tests/ExecutionContext/ExecutionContextTests.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ class ExecutionContextTests: XCTestCase {
102102
}
103103

104104
func testSerial() {
105-
let context:ExecutionContextType = DefaultExecutionContext(kind: .Serial)
105+
let context:ExecutionContextType = DefaultExecutionContext(kind: .serial)
106106

107107
syncTest(context)
108108
asyncTest(context)
@@ -111,7 +111,7 @@ class ExecutionContextTests: XCTestCase {
111111
}
112112

113113
func testParallel() {
114-
let context:ExecutionContextType = DefaultExecutionContext(kind: .Parallel)
114+
let context:ExecutionContextType = DefaultExecutionContext(kind: .parallel)
115115

116116
syncTest(context)
117117
asyncTest(context)

0 commit comments

Comments
 (0)