Add 'submodules/SSignalKit/' from commit '359b2ee7c9f20f99f221f78e307369ef5ad0ece2'

git-subtree-dir: submodules/SSignalKit
git-subtree-mainline: 4459dc5b47
git-subtree-split: 359b2ee7c9
This commit is contained in:
Peter
2019-06-11 18:57:57 +01:00
101 changed files with 11173 additions and 0 deletions

View File

@@ -0,0 +1,85 @@
import Foundation
let doNothing: () -> Void = { }
public enum NoValue {
}
public enum NoError {
}
public func identity<A>(a: A) -> A {
return a
}
precedencegroup PipeRight {
associativity: left
higherThan: DefaultPrecedence
}
infix operator |> : PipeRight
public func |> <T, U>(value: T, function: ((T) -> U)) -> U {
return function(value)
}
private final class SubscriberDisposable<T, E> : Disposable {
private let subscriber: Subscriber<T, E>
private let disposable: Disposable
init(subscriber: Subscriber<T, E>, disposable: Disposable) {
self.subscriber = subscriber
self.disposable = disposable
}
func dispose() {
subscriber.markTerminatedWithoutDisposal()
disposable.dispose()
}
}
public struct Signal<T, E> {
private let generator: (Subscriber<T, E>) -> Disposable
public init(_ generator: @escaping(Subscriber<T, E>) -> Disposable) {
self.generator = generator
}
public func start(next: ((T) -> Void)! = nil, error: ((E) -> Void)! = nil, completed: (() -> Void)! = nil) -> Disposable {
let subscriber = Subscriber<T, E>(next: next, error: error, completed: completed)
let disposable = self.generator(subscriber)
subscriber.assignDisposable(disposable)
return SubscriberDisposable(subscriber: subscriber, disposable: disposable)
}
public static func single(_ value: T) -> Signal<T, E> {
return Signal<T, E> { subscriber in
subscriber.putNext(value)
subscriber.putCompletion()
return EmptyDisposable
}
}
public static func complete() -> Signal<T, E> {
return Signal<T, E> { subscriber in
subscriber.putCompletion()
return EmptyDisposable
}
}
public static func fail(_ error: E) -> Signal<T, E> {
return Signal<T, E> { subscriber in
subscriber.putError(error)
return EmptyDisposable
}
}
public static func never() -> Signal<T, E> {
return Signal<T, E> { _ in
return EmptyDisposable
}
}
}