Skip to content

Instantly share code, notes, and snippets.

View KaQuMiQ's full-sized avatar

Kacper Kaliński KaQuMiQ

View GitHub Profile
@KaQuMiQ
KaQuMiQ / Future.swift
Created April 12, 2021 07:44
Lock-free Future experiment
import Atomics
public final class Future<Value> {
private let fulfillmentStatus: ManagedAtomic<Bool>
private let valueStatus: ManagedAtomic<Bool>
private let handlingStatus: ManagedAtomic<Bool>
private let handlerStatus: ManagedAtomic<Bool>
private let completionStatus: ManagedAtomic<Bool>
@KaQuMiQ
KaQuMiQ / Cancelation.swift
Created March 24, 2021 09:37
Data tunnels
import struct Foundation.TimeInterval
import struct Foundation.Date
import class Atomics.ManagedAtomic
/// Cancelation token that can be used to cancel associated tasks.
public struct Cancelation {
private var status: () -> Bool
private var cancelation: () -> Void
}
@KaQuMiQ
KaQuMiQ / Cancelation.swift
Last active March 10, 2021 15:54
Futura3
import struct Foundation.TimeInterval
import struct Foundation.Date
import class Atomics.ManagedAtomic
/// Cancelation token that can be used to cancel associated tasks.
public struct Cancelation {
private var status: () -> Bool
private var cancelation: () -> Void
}
@KaQuMiQ
KaQuMiQ / Identifier.swift
Last active March 4, 2021 17:28
Type safe generic identifiers
@dynamicMemberLookup
public struct Identifier<RawValue: Hashable, Type>: Hashable, RawRepresentable {
public var rawValue: RawValue
public init(rawValue: RawValue) {
self.rawValue = rawValue
}
import class Foundation.NSRecursiveLock
@dynamicMemberLookup @propertyWrapper
public final class Synchronized<Value> {
public var wrappedValue: Value {
get {
lock()
defer { unlock() }
return value
@KaQuMiQ
KaQuMiQ / Placeholders.swift
Created February 23, 2021 13:33
Function placeholders
func placeholder<R>(_ message: String = "Unimplemented") -> () -> R {
{ fatalError(message) }
}
func placeholder<A1, R>(_ message: String = "Unimplemented") -> (A1) -> R {
{ _ in fatalError(message) }
}
func placeholder<A1, A2, R>(_ message: String = "Unimplemented") -> (A1, A2) -> R {
{ _, _ in fatalError(message) }
@KaQuMiQ
KaQuMiQ / convertFrameworks.sh
Created January 19, 2021 12:02
Convert fat binary framework into XCFramework
#! /bin/bash
mkdir ./arm64
mkdir ./x86_64
find "./" -name '*.framework' -type d | while read -r FRAMEWORK
do
echo "Preparing framework: $FRAMEWORK"
FRAMEWORK_EXECUTABLE_NAME=$(/usr/libexec/PlistBuddy -c "Print CFBundleExecutable" "$FRAMEWORK/Info.plist")
@KaQuMiQ
KaQuMiQ / Authorization.swift
Last active September 28, 2020 15:04
Easy auth for Google, Apple, Facebook
import AuthenticationServices
/// Container for function allowing third party authentication.
public struct Authorization {
private let authorization: (ASPresentationAnchor, @escaping (Result<AuthorizationCredential, AuthorizationError>) -> Void) -> Void
/// - parameter authorization: Function executed for authorization.
public init(_ authorization: @escaping (ASPresentationAnchor, @escaping (Result<AuthorizationCredential, AuthorizationError>) -> Void) -> Void) {
self.authorization = authorization
@KaQuMiQ
KaQuMiQ / Modifier.swift
Created August 20, 2020 19:33
Aegithalos 2.0
public struct Modifier<Subject, Failure: Error> {
@usableFromInline internal let modifier: (Subject, ParameterStore) -> Result<Subject, Failure>
}
// MARK: - init
public extension Modifier {
init(_ modifier: @escaping (Subject, ParameterStore) -> Result<Subject, Failure>) {
self.modifier = modifier
}
import struct Dispatch.DispatchTime
import protocol Dispatch.DispatchSourceTimer
import class Dispatch.DispatchSource
import class Dispatch.DispatchQueue
import struct Foundation.NSDate.TimeInterval
import class Foundation.NSLock.NSRecursiveLock
public final class Throttle {
public let queue: DispatchQueue