Files
swift-mirror/utils/swift-xcodegen/Sources/SwiftXcodeGen/Scanner/Byte.swift
Hamish Knight 03d8ea5248 Introduce swift-xcodegen
This is a tool specifically designed to generate
Xcode projects for the Swift repo (as well as a
couple of adjacent repos such as LLVM and Clang).
It aims to provide a much more user-friendly experience
than the CMake Xcode generation (`build-script --xcode`).
2024-11-05 22:42:10 +00:00

75 lines
1.7 KiB
Swift

//===--- 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)
}
}