Skip to content

Instantly share code, notes, and snippets.

@milseman
milseman / collection_searchers.swift
Last active July 6, 2019 01:21
WIP: Collection Consumers and Searchers
///
/// Collection Consumers
///
protocol CollectionConsumer {
associatedtype Element
func consumeFront<C: Collection>(_ c: C) -> C.Index? where C.Element == Element
}
@milseman
milseman / offset_no_range_no_label.swift
Last active May 6, 2019 21:00
Offset indexing, no range, no label
// TODO: doc
public struct OffsetBound {
internal enum Kind {
case fromStart(Int)
case fromEnd(Int)
}
internal var kind: Kind
internal init(fromStart: Int) {
self.kind = .fromStart(fromStart)
@milseman
milseman / offset_no_range_explicit_end.swift
Created May 6, 2019 19:25
Offset Indexing, no range, explicit end
// TODO: doc
public struct OffsetBound {
internal enum Kind {
case fromStart(Int)
case fromEnd(Int)
}
internal var kind: Kind
internal init(fromStart: Int) {
self.kind = .fromStart(fromStart)
@milseman
milseman / offset_no_range_phantom.swift
Created May 3, 2019 22:25
Broken: Offset Indexing, Existing ranges, Phantom typed
// TODO: doc
public struct OffsetBound<Bound> {
internal enum Kind {
case fromStart(Int)
case fromEnd(Int)
}
internal var kind: Kind
public init(fromStart: Int) {
self.kind = .fromStart(fromStart)
@milseman
milseman / offset_indexing_no_range.swift
Created May 3, 2019 21:28
Offset Indexing, only OffsetBound
// TODO: doc
public struct OffsetBound {
internal enum Kind {
case fromStart(Int)
case fromEnd(Int)
}
internal var kind: Kind
public init(fromStart: Int) {
self.kind = .fromStart(fromStart)
@milseman
milseman / offset_indexing_phantom_xwu.swift
Last active May 3, 2019 00:21
Offset Indexing, using phantom-typed OffsetRange
// TODO: doc
public struct OffsetBound<Bound> {
internal enum Kind {
case fromStart(Int)
case fromEnd(Int)
}
internal var kind: Kind
public init(fromStart: Int) {
self.kind = .fromStart(fromStart)
@milseman
milseman / offset_indexing_xwu.swift
Created May 2, 2019 22:45
Offset Indexing, using OffsetRange
// TODO: doc
public struct OffsetBound {
internal enum Kind {
case fromStart(Int)
case fromEnd(Int)
}
internal var kind: Kind
init(fromStart: Int) {
self.kind = .fromStart(fromStart)
@milseman
milseman / offset_indexing_arrow_operator.swift
Created April 30, 2019 20:41
Offset Indexing, with arrow operators instead
precedencegroup RelativeOffsetPrecedence {
higherThan: RangeFormationPrecedence
}
infix operator --> : RelativeOffsetPrecedence
infix operator <-- : RelativeOffsetPrecedence
prefix operator -->
postfix operator <--
extension Collection {
@milseman
milseman / offset_indexing.swift
Last active April 30, 2019 00:13
Offset Indexing
precedencegroup RelativeOffsetPrecedence {
higherThan: RangeFormationPrecedence
}
infix operator ++ : RelativeOffsetPrecedence
infix operator -- : RelativeOffsetPrecedence
extension Collection {
internal func _clampedIndex(_ idx: Index, offsetBy offset: Int) -> Index {
let limit = offset < 0 ? startIndex : endIndex
@milseman
milseman / string_index_explicit_offsets.swift
Last active January 29, 2019 21:39
String Index Explicit Offsets
extension String.Index {
/// Creates a new index at the specified UTF-16 code unit offset
///
/// - Parameter offset: An offset in UTF-16 code units.
public init(offset: Int, within utf16: String.UTF16View) {
let (start, end) = (utf16.startIndex, utf16.endIndex)
guard offset >= 0,
let idx = utf16.index(start, offsetBy: offset, limitedBy: end)
else {
self = end