From 33373b4f43e2f7582afa84063d66e1a2ca2cede8 Mon Sep 17 00:00:00 2001 From: Nate Weaver Date: Wed, 6 Apr 2022 13:29:42 -0500 Subject: [PATCH] Use UnicodeScalar instead of Character for joining types A bit more efficient memory-wise (16 bytes + buffer -> 4 bytes). --- Sources/IDNA/UTS46+Loading.swift | 2 +- Sources/IDNA/UTS46.swift | 2 +- Swift/UTS46+Conversion.swift | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Sources/IDNA/UTS46+Loading.swift b/Sources/IDNA/UTS46+Loading.swift index 8a15b6f..91171b9 100644 --- a/Sources/IDNA/UTS46+Loading.swift +++ b/Sources/IDNA/UTS46+Loading.swift @@ -230,7 +230,7 @@ extension UTS46 { for scalar in str.unicodeScalars { if scalar.isASCII { - type = JoiningType(rawValue: Character(scalar)) + type = JoiningType(rawValue: scalar) } else if let type = type { if first == nil { first = scalar diff --git a/Sources/IDNA/UTS46.swift b/Sources/IDNA/UTS46.swift index 5ee65ec..8a4b2c0 100644 --- a/Sources/IDNA/UTS46.swift +++ b/Sources/IDNA/UTS46.swift @@ -88,7 +88,7 @@ class UTS46 { static let sequenceTerminator: UInt8 = 0 } - enum JoiningType: Character { + enum JoiningType: UnicodeScalar { case causing = "C" case dual = "D" case right = "R" diff --git a/Swift/UTS46+Conversion.swift b/Swift/UTS46+Conversion.swift index e499d53..b1c752a 100644 --- a/Swift/UTS46+Conversion.swift +++ b/Swift/UTS46+Conversion.swift @@ -83,7 +83,7 @@ extension UTS46 { joiningType.count == 1 else { continue } for codepoint in range { - joiningTypes[UInt32(codepoint)] = JoiningType(rawValue: joiningType.first!)! + joiningTypes[UInt32(codepoint)] = JoiningType(rawValue: joiningType.unicodeScalars.first!)! } } } @@ -113,7 +113,7 @@ extension UTS46 { } private static func joiningTypesData() -> Data { - var reverseMap: [Character: String] = ["C": "", "D": "", "L": "", "R": "", "T": ""] + var reverseMap: [UnicodeScalar: String] = ["C": "", "D": "", "L": "", "R": "", "T": ""] for (codepoint, joiningType) in joiningTypes { reverseMap[joiningType.rawValue]?.unicodeScalars.append(UnicodeScalar(codepoint)!)