Skip to content

Instantly share code, notes, and snippets.

View kaqu's full-sized avatar

Kacper kaqu

View GitHub Profile
@kaqu
kaqu / Parameters.swift
Created February 26, 2020 21:04
Swift dynamic parameters
internal protocol AnyParameter {
var name: String { get }
var optional: Bool { get }
var type: Any.Type { get }
}
public struct Parameter<Value>: AnyParameter {
public var name: String
public var optional: Bool
public var `default`: Value?
@kaqu
kaqu / AtomicFlag.swift
Created September 28, 2019 19:43
Futures
#if os(macOS) || os(iOS) || os(tvOS) || os(watchOS)
import libkern // check on Linux
public enum AtomicFlag {
public typealias Pointer = UnsafeMutablePointer<atomic_flag>
@inline(__always)
public static func make() -> Pointer {
let pointer = Pointer.allocate(capacity: 1)
@kaqu
kaqu / ByteParser.swift
Created September 14, 2019 18:01
BytesParser based on https://pointfree.co parser video series
import Foundation
public extension Data {
func parse<T>(with parser: Parser<T>) -> T? {
self.withUnsafeBytes { (bufferPointer) -> T? in
var slice: Slice<Array<Byte>> = .init(bufferPointer)
return parser.parse(&slice)
}
}
}
@kaqu
kaqu / EntityDecoder.swift
Created September 7, 2019 17:47
CodeData - CoreData from Code
import Foundation
import CoreData
// TODO: FIXME: minimal, naive implementation
internal final class EntityDecoder<EntityType: StorageEntity>: Decoder {
private let managed: NSManagedObject
public var codingPath: [CodingKey] = []
@kaqu
kaqu / Executor.swift
Last active May 25, 2019 21:09
Futures 3.0
import Foundation
public protocol Executor {
func execute(_ task: @escaping () -> Void)
}
extension DispatchQueue: Executor {
@inlinable public func execute(_ task: @escaping () -> Void) {
async(execute: task)
@kaqu
kaqu / Actor.swift
Last active May 15, 2019 20:06
Swift Actor
////////////////////////////////////////////////////////
//// From futura: https://github.com/miquido/futura ////
////////////////////////////////////////////////////////
import Darwin
import libkern
public enum Mutex {
public typealias Pointer = UnsafeMutablePointer<pthread_mutex_t>
@kaqu
kaqu / FluidLayout.swift
Created May 11, 2019 22:06
FluidLayout
public protocol FluidView: UIView {
var id: UUID { get }
}
public protocol FluidViewLayoutModel {
var id: UUID { get }
var prefferedSize: CGSize? { get }
var prefferedInsets: UIEdgeInsets? { get }
var minimumSize: CGSize? { get }
var maximumSize: CGSize? { get }
func prepareView() -> FluidView
@kaqu
kaqu / Coconut.swift
Created May 11, 2019 10:55
CoconutUIKit
import UIKit
// MARK: Corner rounding
public enum CornerRoundings {
case none
case all(CGFloat)
case topLeft(CGFloat)
@kaqu
kaqu / Hex.swift
Created April 17, 2019 18:02
Hex Swift
// from: https://github.com/raywenderlich/swift-algorithm-club
public struct Heap<T> {
/** The array that stores the heap's nodes. */
var nodes = [T]()
/**
* Determines how to compare two nodes in the heap.
* Use '>' for a max-heap or '<' for a min-heap,
@kaqu
kaqu / Future.swift
Last active March 9, 2019 18:34
PasteIn Future implementation
#if os(Linux)
import Glibc
#else
import Darwin
#endif
public final class Future<Value> {
public typealias Handler = (Value) -> Void
public typealias Executor = (@escaping () -> Void) -> Void