Remove unused code, fix TupleView initializers

This commit is contained in:
Max Desiatov 2020-04-11 22:15:25 +01:00
parent e1fb4f7c32
commit 1378151316
No known key found for this signature in database
GPG Key ID: FE08EBF9CF58CBA2
5 changed files with 51 additions and 90 deletions

View File

@ -38,21 +38,3 @@ typealias Updater<T> = (inout T) -> ()
)
}
}
extension Hooks {
/** Allows a component to have its own state and to be updated when the state
changes. Returns a very simple state container, which on initial call of
render contains `initial` as a value and values passed to `count.set`
on subsequent updates:
*/
public func state<T>(_ initial: T) -> Binding<T> {
let (get, index) = currentState(initial)
let queueState = self.queueState
return Binding(get: get, set: { newValue in
queueState(index) {
$0 = newValue
}
})
}
}

View File

@ -1,62 +0,0 @@
//
// Hooks.swift
// Tokamak
//
// Created by Max Desiatov on 06/11/2018.
//
typealias Finalizer = (() -> ())?
typealias Effect = () -> Finalizer
protocol HookedComponent: AnyObject {
/// State cells of this component indexed by order of `hooks.state` calls
var state: [Any] { get set }
}
/** Functions implemented directly in this class are parts of internal
implementation of `Hooks`. The public API is defined in extensions of `Hooks`
located in separate files in the same directory.
*/
public final class Hooks {
/** Closure assigned by the reconciler before every `render` call. Queues
a state update with this reconciler.
*/
let queueState: (
_ index: Int,
_ updater: (inout Any) -> ()
) -> ()
weak var component: HookedComponent?
private var stateIndex = 0
init(
component: HookedComponent,
queueState: @escaping (
_ index: Int,
_ updater: (inout Any) -> ()
) -> ()
) {
self.component = component
self.queueState = queueState
}
/** For a given initial state return a current value of this state
(initialized from `initial` if current was absent) and its index.
*/
func currentState<T>(_ initial: T) -> (getter: () -> T, index: Int) {
defer { stateIndex += 1 }
guard let component = component else {
fatalError("hooks.state should only be called within `render`")
}
if component.state.count <= stateIndex {
component.state.append(initial)
}
let boundIndex = stateIndex
// swiftlint:disable:next force_cast
return ({ component.state[boundIndex] as! T }, stateIndex)
}
}

View File

@ -8,8 +8,7 @@
import Dispatch
import Runtime
final class MountedCompositeComponent<R: Renderer>: MountedComponent<R>,
HookedComponent, Hashable {
final class MountedCompositeComponent<R: Renderer>: MountedComponent<R>, Hashable {
static func ==(lhs: MountedCompositeComponent<R>,
rhs: MountedCompositeComponent<R>) -> Bool {
lhs === rhs

View File

@ -16,6 +16,48 @@ public struct TupleView<T>: View {
value = (v1, v2)
children = [AnyView(v1), AnyView(v2)]
}
init<T1: View, T2: View, T3: View>(_ v1: T1, _ v2: T2, _ v3: T3) where T == (T1, T2, T3) {
value = (v1, v2, v3)
children = [AnyView(v1), AnyView(v2), AnyView(v3)]
}
// swiftlint:disable line_length
// swiftlint:disable large_tuple
init<T1: View, T2: View, T3: View, T4: View>(_ v1: T1, _ v2: T2, _ v3: T3, _ v4: T4) where T == (T1, T2, T3, T4) {
value = (v1, v2, v3, v4)
children = [AnyView(v1), AnyView(v2), AnyView(v3), AnyView(v4)]
}
init<T1: View, T2: View, T3: View, T4: View, T5: View>(_ v1: T1, _ v2: T2, _ v3: T3, _ v4: T4, _ v5: T5) where T == (T1, T2, T3, T4, T5) {
value = (v1, v2, v3, v4, v5)
children = [AnyView(v1), AnyView(v2), AnyView(v3), AnyView(v4), AnyView(v5)]
}
init<T1: View, T2: View, T3: View, T4: View, T5: View, T6: View>(_ v1: T1, _ v2: T2, _ v3: T3, _ v4: T4, _ v5: T5, _ v6: T6) where T == (T1, T2, T3, T4, T5, T6) {
value = (v1, v2, v3, v4, v5, v6)
children = [AnyView(v1), AnyView(v2), AnyView(v3), AnyView(v4), AnyView(v5), AnyView(v6)]
}
init<T1: View, T2: View, T3: View, T4: View, T5: View, T6: View, T7: View>(_ v1: T1, _ v2: T2, _ v3: T3, _ v4: T4, _ v5: T5, _ v6: T6, _ v7: T7) where T == (T1, T2, T3, T4, T5, T6, T7) {
value = (v1, v2, v3, v4, v5, v6, v7)
children = [AnyView(v1), AnyView(v2), AnyView(v3), AnyView(v4), AnyView(v5), AnyView(v6), AnyView(v7)]
}
init<T1: View, T2: View, T3: View, T4: View, T5: View, T6: View, T7: View, T8: View>(_ v1: T1, _ v2: T2, _ v3: T3, _ v4: T4, _ v5: T5, _ v6: T6, _ v7: T7, _ v8: T8) where T == (T1, T2, T3, T4, T5, T6, T7, T8) {
value = (v1, v2, v3, v4, v5, v6, v7, v8)
children = [AnyView(v1), AnyView(v2), AnyView(v3), AnyView(v4), AnyView(v5), AnyView(v6), AnyView(v7), AnyView(v8)]
}
init<T1: View, T2: View, T3: View, T4: View, T5: View, T6: View, T7: View, T8: View, T9: View>(_ v1: T1, _ v2: T2, _ v3: T3, _ v4: T4, _ v5: T5, _ v6: T6, _ v7: T7, _ v8: T8, _ v9: T9) where T == (T1, T2, T3, T4, T5, T6, T7, T8, T9) {
value = (v1, v2, v3, v4, v5, v6, v7, v8, v9)
children = [AnyView(v1), AnyView(v2), AnyView(v3), AnyView(v4), AnyView(v5), AnyView(v6), AnyView(v7), AnyView(v8), AnyView(v9)]
}
init<T1: View, T2: View, T3: View, T4: View, T5: View, T6: View, T7: View, T8: View, T9: View, T10: View>(_ v1: T1, _ v2: T2, _ v3: T3, _ v4: T4, _ v5: T5, _ v6: T6, _ v7: T7, _ v8: T8, _ v9: T9, _ v10: T10) where T == (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10) {
value = (v1, v2, v3, v4, v5, v6, v7, v8, v9, v10)
children = [AnyView(v1), AnyView(v2), AnyView(v3), AnyView(v4), AnyView(v5), AnyView(v6), AnyView(v7), AnyView(v8), AnyView(v9), AnyView(v10)]
}
}
extension TupleView: GroupView {}

View File

@ -51,48 +51,48 @@ extension ViewBuilder {
extension ViewBuilder {
public static func buildBlock<C0, C1, C2>(_ c0: C0, _ c1: C1, _ c2: C2) -> TupleView<(C0, C1, C2)> where C0: View, C1: View, C2: View {
TupleView((c0, c1, c2))
TupleView(c0, c1, c2)
}
}
extension ViewBuilder {
public static func buildBlock<C0, C1, C2, C3>(_ c0: C0, _ c1: C1, _ c2: C2, _ c3: C3) -> TupleView<(C0, C1, C2, C3)> where C0: View, C1: View, C2: View, C3: View {
TupleView((c0, c1, c2, c3))
TupleView(c0, c1, c2, c3)
}
}
extension ViewBuilder {
public static func buildBlock<C0, C1, C2, C3, C4>(_ c0: C0, _ c1: C1, _ c2: C2, _ c3: C3, _ c4: C4) -> TupleView<(C0, C1, C2, C3, C4)> where C0: View, C1: View, C2: View, C3: View, C4: View {
TupleView((c0, c1, c2, c3, c4))
TupleView(c0, c1, c2, c3, c4)
}
}
extension ViewBuilder {
public static func buildBlock<C0, C1, C2, C3, C4, C5>(_ c0: C0, _ c1: C1, _ c2: C2, _ c3: C3, _ c4: C4, _ c5: C5) -> TupleView<(C0, C1, C2, C3, C4, C5)> where C0: View, C1: View, C2: View, C3: View, C4: View, C5: View {
TupleView((c0, c1, c2, c3, c4, c5))
TupleView(c0, c1, c2, c3, c4, c5)
}
}
extension ViewBuilder {
public static func buildBlock<C0, C1, C2, C3, C4, C5, C6>(_ c0: C0, _ c1: C1, _ c2: C2, _ c3: C3, _ c4: C4, _ c5: C5, _ c6: C6) -> TupleView<(C0, C1, C2, C3, C4, C5, C6)> where C0: View, C1: View, C2: View, C3: View, C4: View, C5: View, C6: View {
TupleView((c0, c1, c2, c3, c4, c5, c6))
TupleView(c0, c1, c2, c3, c4, c5, c6)
}
}
extension ViewBuilder {
public static func buildBlock<C0, C1, C2, C3, C4, C5, C6, C7>(_ c0: C0, _ c1: C1, _ c2: C2, _ c3: C3, _ c4: C4, _ c5: C5, _ c6: C6, _ c7: C7) -> TupleView<(C0, C1, C2, C3, C4, C5, C6, C7)> where C0: View, C1: View, C2: View, C3: View, C4: View, C5: View, C6: View, C7: View {
TupleView((c0, c1, c2, c3, c4, c5, c6, c7))
TupleView(c0, c1, c2, c3, c4, c5, c6, c7)
}
}
extension ViewBuilder {
public static func buildBlock<C0, C1, C2, C3, C4, C5, C6, C7, C8>(_ c0: C0, _ c1: C1, _ c2: C2, _ c3: C3, _ c4: C4, _ c5: C5, _ c6: C6, _ c7: C7, _ c8: C8) -> TupleView<(C0, C1, C2, C3, C4, C5, C6, C7, C8)> where C0: View, C1: View, C2: View, C3: View, C4: View, C5: View, C6: View, C7: View, C8: View {
TupleView((c0, c1, c2, c3, c4, c5, c6, c7, c8))
TupleView(c0, c1, c2, c3, c4, c5, c6, c7, c8)
}
}
extension ViewBuilder {
public static func buildBlock<C0, C1, C2, C3, C4, C5, C6, C7, C8, C9>(_ c0: C0, _ c1: C1, _ c2: C2, _ c3: C3, _ c4: C4, _ c5: C5, _ c6: C6, _ c7: C7, _ c8: C8, _ c9: C9) -> TupleView<(C0, C1, C2, C3, C4, C5, C6, C7, C8, C9)> where C0: View, C1: View, C2: View, C3: View, C4: View, C5: View, C6: View, C7: View, C8: View, C9: View {
TupleView((c0, c1, c2, c3, c4, c5, c6, c7, c8, c9))
TupleView(c0, c1, c2, c3, c4, c5, c6, c7, c8, c9)
}
}