1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
|
//===--- Byte.swift -------------------------------------------------------===//
//
// This source file is part of the Swift.org open source project
//
// Copyright (c) 2024 Apple Inc. and the Swift project authors
// Licensed under Apache License v2.0 with Runtime Library Exception
//
// See https://swift.org/LICENSE.txt for license information
// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
//
//===----------------------------------------------------------------------===//
struct Byte: Hashable {
var rawValue: UInt8
init(_ rawValue: UInt8) {
self.rawValue = rawValue
}
}
// Please forgive me...
func == (lhs: UnicodeScalar, rhs: Byte?) -> Bool {
guard let rhs else { return false }
return lhs.value == rhs.rawValue
}
func == (lhs: Byte?, rhs: UnicodeScalar) -> Bool {
rhs == lhs
}
func != (lhs: UnicodeScalar, rhs: Byte?) -> Bool {
!(lhs == rhs)
}
func != (lhs: Byte?, rhs: UnicodeScalar) -> Bool {
rhs != lhs
}
func ~= (pattern: UnicodeScalar, match: Byte) -> Bool {
pattern == match
}
func ~= (pattern: UnicodeScalar, match: Byte?) -> Bool {
pattern == match
}
extension Byte? {
var isSpaceOrTab: Bool {
self?.isSpaceOrTab == true
}
var isNewline: Bool {
self?.isNewline == true
}
var isSpaceTabOrNewline: Bool {
self?.isSpaceTabOrNewline == true
}
}
extension Byte {
var isSpaceOrTab: Bool {
self == " " || self == "\t"
}
var isNewline: Bool {
self == "\n" || self == "\r"
}
var isSpaceTabOrNewline: Bool {
isSpaceOrTab || isNewline
}
init(ascii scalar: UnicodeScalar) {
assert(scalar.isASCII)
self.rawValue = UInt8(scalar.value)
}
var scalar: UnicodeScalar {
UnicodeScalar(UInt32(rawValue))!
}
var char: Character {
.init(scalar)
}
}
|