[stdlib] Unicode[Encoding|Parser] => Unicode.[Encoding|Parser]

This commit is contained in:
Dave Abrahams
2017-05-11 16:53:57 -07:00
parent 01d886fe3d
commit 41c244a065
14 changed files with 67 additions and 58 deletions

View File

@@ -14,7 +14,7 @@ extension Unicode {
public enum ASCII {}
}
extension Unicode.ASCII : UnicodeEncoding {
extension Unicode.ASCII : Unicode.Encoding {
public typealias CodeUnit = UInt8
public typealias EncodedScalar = CollectionOfOne<CodeUnit>
@@ -45,7 +45,7 @@ extension Unicode.ASCII : UnicodeEncoding {
}
@inline(__always)
public static func transcode<FromEncoding : UnicodeEncoding>(
public static func transcode<FromEncoding : Unicode.Encoding>(
_ content: FromEncoding.EncodedScalar, from _: FromEncoding.Type
) -> EncodedScalar? {
if _fastPath(FromEncoding.self == UTF16.self) {
@@ -69,7 +69,7 @@ extension Unicode.ASCII : UnicodeEncoding {
public typealias ReverseParser = Parser
}
extension Unicode.ASCII.Parser : UnicodeParser {
extension Unicode.ASCII.Parser : Unicode.Parser {
public typealias Encoding = Unicode.ASCII
/// Parses a single Unicode scalar value from `input`.

View File

@@ -145,7 +145,7 @@ extension String {
/// ill-formed sequence is detected, this method returns `nil`.
///
/// - SeeAlso: `UnicodeCodec`
public static func decodeCString<Encoding : UnicodeEncoding>(
public static func decodeCString<Encoding : _UnicodeEncoding>(
_ cString: UnsafePointer<Encoding.CodeUnit>?,
as encoding: Encoding.Type,
repairingInvalidCodeUnits isRepairing: Bool = true)
@@ -183,7 +183,7 @@ public func _persistCString(_ p: UnsafePointer<CChar>?) -> [CChar]? {
/// the given pointer using the specified encoding.
///
/// This internal helper takes the string length as an argument.
func _decodeCString<Encoding : UnicodeEncoding>(
func _decodeCString<Encoding : _UnicodeEncoding>(
_ cString: UnsafePointer<Encoding.CodeUnit>,
as encoding: Encoding.Type, length: Int,
repairingInvalidCodeUnits isRepairing: Bool = true)

View File

@@ -44,7 +44,7 @@ public protocol StringProtocol
/// the given `encoding`.
/// - Parameter encoding: describes the encoding in which the code units
/// should be interpreted.
init<C: Collection, Encoding: UnicodeEncoding>(
init<C: Collection, Encoding: Unicode.Encoding>(
decoding codeUnits: C, as encoding: Encoding.Type
)
where C.Iterator.Element == Encoding.CodeUnit
@@ -61,7 +61,7 @@ public protocol StringProtocol
/// the given `encoding`, ending just before the first zero code unit.
/// - Parameter encoding: describes the encoding in which the code units
/// should be interpreted.
init<Encoding: UnicodeEncoding>(
init<Encoding: Unicode.Encoding>(
decodingCString nulTerminatedCodeUnits: UnsafePointer<Encoding.CodeUnit>,
as: Encoding.Type)
@@ -72,7 +72,7 @@ public protocol StringProtocol
/// Invokes the given closure on the contents of the string, represented as a
/// pointer to a null-terminated sequence of code units in the given encoding.
func withCString<Result, Encoding: UnicodeEncoding>(
func withCString<Result, Encoding: Unicode.Encoding>(
encodedAs: Encoding.Type,
_ body: (UnsafePointer<Encoding.CodeUnit>) throws -> Result
) rethrows -> Result
@@ -89,8 +89,8 @@ extension StringProtocol /* : LosslessStringConvertible */ {
/// `source` is interpreted as being encoded with `SourceEncoding`.
internal func _withCString<
Source : Collection,
SourceEncoding : UnicodeEncoding,
TargetEncoding : UnicodeEncoding,
SourceEncoding : Unicode.Encoding,
TargetEncoding : Unicode.Encoding,
Result
>(
encodedAs targetEncoding: TargetEncoding.Type,
@@ -107,8 +107,8 @@ where Source.Iterator.Element == SourceEncoding.CodeUnit {
internal func _withCStringAndLength<
Source : Collection,
SourceEncoding : UnicodeEncoding,
TargetEncoding : UnicodeEncoding,
SourceEncoding : Unicode.Encoding,
TargetEncoding : Unicode.Encoding,
Result
>(
encodedAs targetEncoding: TargetEncoding.Type,
@@ -137,7 +137,7 @@ where Source.Iterator.Element == SourceEncoding.CodeUnit {
extension _StringCore {
/// Invokes `body` on a null-terminated sequence of code units in the given
/// encoding corresponding to the substring in `bounds`.
internal func _withCSubstring<Result, TargetEncoding: UnicodeEncoding>(
internal func _withCSubstring<Result, TargetEncoding: Unicode.Encoding>(
in bounds: Range<Index>,
encoding targetEncoding: TargetEncoding.Type,
_ body: (UnsafePointer<TargetEncoding.CodeUnit>) throws -> Result
@@ -148,7 +148,7 @@ extension _StringCore {
}
internal func _withCSubstringAndLength<
Result, TargetEncoding: UnicodeEncoding
Result, TargetEncoding: Unicode.Encoding
>(
in bounds: Range<Index>,
encoding targetEncoding: TargetEncoding.Type,
@@ -183,7 +183,7 @@ extension _StringCore {
}
extension String {
public init<C: Collection, Encoding: UnicodeEncoding>(
public init<C: Collection, Encoding: Unicode.Encoding>(
decoding codeUnits: C, as sourceEncoding: Encoding.Type
) where C.Iterator.Element == Encoding.CodeUnit {
let (b,_) = _StringBuffer.fromCodeUnits(
@@ -197,7 +197,7 @@ extension String {
/// the given `encoding`, ending just before the first zero code unit.
/// - Parameter encoding: describes the encoding in which the code units
/// should be interpreted.
public init<Encoding: UnicodeEncoding>(
public init<Encoding: Unicode.Encoding>(
decodingCString nulTerminatedCodeUnits: UnsafePointer<Encoding.CodeUnit>,
as sourceEncoding: Encoding.Type) {
@@ -210,7 +210,7 @@ extension String {
/// Invokes the given closure on the contents of the string, represented as a
/// pointer to a null-terminated sequence of code units in the given encoding.
public func withCString<Result, TargetEncoding: UnicodeEncoding>(
public func withCString<Result, TargetEncoding: Unicode.Encoding>(
encodedAs targetEncoding: TargetEncoding.Type,
_ body: (UnsafePointer<TargetEncoding.CodeUnit>) throws -> Result
) rethrows -> Result {
@@ -511,7 +511,7 @@ public struct String {
extension String {
public // @testable
static func _fromWellFormedCodeUnitSequence<
Encoding : UnicodeEncoding, Input : Collection
Encoding : Unicode.Encoding, Input : Collection
>(
_ encoding: Encoding.Type, input: Input
) -> String
@@ -521,7 +521,7 @@ extension String {
public // @testable
static func _fromCodeUnitSequence<
Encoding : UnicodeEncoding, Input : Collection
Encoding : Unicode.Encoding, Input : Collection
>(
_ encoding: Encoding.Type, input: Input
) -> String?
@@ -535,7 +535,7 @@ extension String {
public // @testable
static func _fromCodeUnitSequenceWithRepair<
Encoding : UnicodeEncoding, Input : Collection
Encoding : Unicode.Encoding, Input : Collection
>(
_ encoding: Encoding.Type, input: Input
) -> (String, hadError: Bool)
@@ -650,7 +650,7 @@ extension String {
/// Returns the number of code units occupied by this string
/// in the given encoding.
func _encodedLength<
Encoding: UnicodeEncoding
Encoding: Unicode.Encoding
>(_ encoding: Encoding.Type) -> Int {
var codeUnitCount = 0
self._encode(encoding, into: { _ in codeUnitCount += 1 })
@@ -664,7 +664,7 @@ extension String {
// way -- add a test for that.
// Related: <rdar://problem/17340917> Please document how NSString interacts
// with unpaired surrogates
func _encode<Encoding: UnicodeEncoding>(
func _encode<Encoding: Unicode.Encoding>(
_ encoding: Encoding.Type,
into processCodeUnit: (Encoding.CodeUnit) -> Void
) {

View File

@@ -91,7 +91,7 @@ public struct _StringBuffer {
= ((_storage._capacity() - capacityBump) &<< 1) + elementShift
}
static func fromCodeUnits<Input : Sequence, Encoding : UnicodeEncoding>(
static func fromCodeUnits<Input : Sequence, Encoding : _UnicodeEncoding>(
_ input: Input, encoding: Encoding.Type, repairIllFormedSequences: Bool,
minimumCapacity: Int = 0
) -> (_StringBuffer?, hadError: Bool)

View File

@@ -364,7 +364,7 @@ public struct _StringCore {
}
/// Write the string, in the given encoding, to output.
func encode<Encoding: UnicodeEncoding>(
func encode<Encoding: Unicode.Encoding>(
_ encoding: Encoding.Type,
into processCodeUnit: (Encoding.CodeUnit) -> Void)
{

View File

@@ -102,7 +102,7 @@ public struct Substring : StringProtocol {
% end
public init<C: Collection, Encoding: UnicodeEncoding>(
public init<C: Collection, Encoding: _UnicodeEncoding>(
decoding codeUnits: C, as sourceEncoding: Encoding.Type
) where C.Iterator.Element == Encoding.CodeUnit {
self.init(String(decoding: codeUnits, as: sourceEncoding))
@@ -118,7 +118,7 @@ public struct Substring : StringProtocol {
/// the given `encoding`, ending just before the first zero code unit.
/// - Parameter encoding: describes the encoding in which the code units
/// should be interpreted.
public init<Encoding: UnicodeEncoding>(
public init<Encoding: _UnicodeEncoding>(
decodingCString nulTerminatedCodeUnits: UnsafePointer<Encoding.CodeUnit>,
as targetEncoding: Encoding.Type
) {
@@ -141,7 +141,7 @@ public struct Substring : StringProtocol {
/// Invokes the given closure on the contents of the string, represented as a
/// pointer to a null-terminated sequence of code units in the given encoding.
public func withCString<Result, TargetEncoding: UnicodeEncoding>(
public func withCString<Result, TargetEncoding: _UnicodeEncoding>(
encodedAs targetEncoding: TargetEncoding.Type,
_ body: (UnsafePointer<TargetEncoding.CodeUnit>) throws -> Result
) rethrows -> Result {

View File

@@ -15,7 +15,7 @@ extension Unicode {
}
}
extension Unicode.UTF16 : UnicodeEncoding {
extension Unicode.UTF16 : Unicode.Encoding {
public typealias CodeUnit = UInt16
public typealias EncodedScalar = _UIntBuffer<UInt32, UInt16>
@@ -52,7 +52,7 @@ extension Unicode.UTF16 : UnicodeEncoding {
}
@inline(__always)
public static func transcode<FromEncoding : UnicodeEncoding>(
public static func transcode<FromEncoding : Unicode.Encoding>(
_ content: FromEncoding.EncodedScalar, from _: FromEncoding.Type
) -> EncodedScalar? {
if _fastPath(FromEncoding.self == UTF8.self) {
@@ -107,7 +107,7 @@ extension Unicode.UTF16 : UnicodeEncoding {
}
}
extension UTF16.ReverseParser : UnicodeParser, _UTFParser {
extension UTF16.ReverseParser : Unicode.Parser, _UTFParser {
public typealias Encoding = Unicode.UTF16
public func _parseMultipleCodeUnits() -> (isValid: Bool, bitCount: UInt8) {
@@ -128,7 +128,7 @@ extension UTF16.ReverseParser : UnicodeParser, _UTFParser {
}
}
extension Unicode.UTF16.ForwardParser : UnicodeParser, _UTFParser {
extension Unicode.UTF16.ForwardParser : Unicode.Parser, _UTFParser {
public typealias Encoding = Unicode.UTF16
public func _parseMultipleCodeUnits() -> (isValid: Bool, bitCount: UInt8) {

View File

@@ -15,7 +15,7 @@ extension Unicode {
}
}
extension Unicode.UTF32 : UnicodeEncoding {
extension Unicode.UTF32 : Unicode.Encoding {
public typealias CodeUnit = UInt32
public typealias EncodedScalar = CollectionOfOne<UInt32>
@@ -48,7 +48,7 @@ extension Unicode.UTF32 : UnicodeEncoding {
public typealias ReverseParser = Parser
}
extension UTF32.Parser : UnicodeParser {
extension UTF32.Parser : Unicode.Parser {
public typealias Encoding = Unicode.UTF32
/// Parses a single Unicode scalar value from `input`.

View File

@@ -16,7 +16,7 @@ extension Unicode {
}
}
extension Unicode.UTF8 : UnicodeEncoding {
extension Unicode.UTF8 : _UnicodeEncoding {
public typealias CodeUnit = UInt8
public typealias EncodedScalar = _UIntBuffer<UInt32, UInt8>
@@ -88,7 +88,7 @@ extension Unicode.UTF8 : UnicodeEncoding {
}
@inline(__always)
public static func transcode<FromEncoding : UnicodeEncoding>(
public static func transcode<FromEncoding : _UnicodeEncoding>(
_ content: FromEncoding.EncodedScalar, from _: FromEncoding.Type
) -> EncodedScalar? {
if _fastPath(FromEncoding.self == UTF16.self) {
@@ -140,7 +140,7 @@ extension Unicode.UTF8 : UnicodeEncoding {
}
}
extension UTF8.ReverseParser : UnicodeParser, _UTFParser {
extension UTF8.ReverseParser : Unicode.Parser, _UTFParser {
public typealias Encoding = Unicode.UTF8
@inline(__always)
@_inlineable
@@ -217,7 +217,7 @@ extension UTF8.ReverseParser : UnicodeParser, _UTFParser {
}
}
extension Unicode.UTF8.ForwardParser : UnicodeParser, _UTFParser {
extension Unicode.UTF8.ForwardParser : Unicode.Parser, _UTFParser {
public typealias Encoding = Unicode.UTF8
@inline(__always)

View File

@@ -17,7 +17,7 @@
public protocol _UTFParser {
associatedtype Encoding : _UnicodeEncoding
associatedtype Encoding : _UnicodeEncoding_
func _parseMultipleCodeUnits() -> (isValid: Bool, bitCount: UInt8)
func _bufferedScalar(bitCount: UInt8) -> _UIntBuffer<UInt32, Encoding.CodeUnit>

View File

@@ -61,7 +61,7 @@ public enum UnicodeDecodingResult : Equatable {
/// decoded Unicode scalar values.
///
/// - SeeAlso: `UTF8`, `UTF16`, `UTF32`, `Unicode.Scalar`
public protocol UnicodeCodec : UnicodeEncoding {
public protocol UnicodeCodec : Unicode.Encoding {
/// Creates an instance of the codec.
init()
@@ -552,8 +552,8 @@ public typealias UTF32 = Unicode.UTF32
@inline(__always)
public func transcode<
Input : IteratorProtocol,
InputEncoding : UnicodeEncoding,
OutputEncoding : UnicodeEncoding
InputEncoding : Unicode.Encoding,
OutputEncoding : Unicode.Encoding
>(
_ input: Input,
from inputEncoding: InputEncoding.Type,
@@ -907,7 +907,7 @@ extension UTF16 {
/// `nil`.
public static func transcodedLength<
Input : IteratorProtocol,
Encoding : UnicodeEncoding
Encoding : Unicode.Encoding
>(
of input: Input,
decodedAs sourceEncoding: Encoding.Type,

View File

@@ -10,7 +10,7 @@
//
//===----------------------------------------------------------------------===//
public protocol _UnicodeEncoding {
public protocol _UnicodeEncoding_ {
/// The basic unit of encoding
associatedtype CodeUnit : UnsignedInteger, FixedWidthInteger
@@ -37,18 +37,18 @@ public protocol _UnicodeEncoding {
///
/// A default implementation of this method will be provided
/// automatically for any conforming type that does not implement one.
static func transcode<FromEncoding : UnicodeEncoding>(
static func transcode<FromEncoding : Unicode.Encoding>(
_ content: FromEncoding.EncodedScalar, from _: FromEncoding.Type
) -> EncodedScalar?
/// A type that can be used to parse `CodeUnits` into
/// `EncodedScalar`s.
associatedtype ForwardParser : UnicodeParser
associatedtype ForwardParser : Unicode.Parser
// where ForwardParser.Encoding == Self
/// A type that can be used to parse a reversed sequence of
/// `CodeUnits` into `EncodedScalar`s.
associatedtype ReverseParser : UnicodeParser
associatedtype ReverseParser : Unicode.Parser
// where ReverseParser.Encoding == Self
//===--------------------------------------------------------------------===//
@@ -60,16 +60,16 @@ public protocol _UnicodeEncoding {
static func _isScalar(_ x: CodeUnit) -> Bool
}
extension _UnicodeEncoding {
extension _UnicodeEncoding_ {
// See note on declaration of requirement, above
public static func _isScalar(_ x: CodeUnit) -> Bool { return false }
}
public protocol UnicodeEncoding : _UnicodeEncoding
public protocol _UnicodeEncoding : _UnicodeEncoding_
where ForwardParser.Encoding == Self, ReverseParser.Encoding == Self {}
extension _UnicodeEncoding {
public static func transcode<FromEncoding : UnicodeEncoding>(
extension _UnicodeEncoding_ {
public static func transcode<FromEncoding : Unicode.Encoding>(
_ content: FromEncoding.EncodedScalar, from _: FromEncoding.Type
) -> EncodedScalar? {
return encode(FromEncoding.decode(content))
@@ -85,9 +85,14 @@ extension _UnicodeEncoding {
/// Converts a scalar from another encoding's representation, returning
/// `encodedReplacementCharacter` if the scalar can't be represented in this
/// encoding.
internal static func _transcode<FromEncoding : UnicodeEncoding>(
internal static func _transcode<FromEncoding : Unicode.Encoding>(
_ content: FromEncoding.EncodedScalar, from _: FromEncoding.Type
) -> EncodedScalar {
return _encode(FromEncoding.decode(content))
}
}
extension Unicode {
public typealias Encoding = _UnicodeEncoding
}

View File

@@ -29,9 +29,9 @@ extension Unicode {
/// Types that separate streams of code units into encoded Unicode
/// scalar values.
public protocol UnicodeParser {
public protocol _UnicodeParser {
/// The encoding with which this parser is associated
associatedtype Encoding : _UnicodeEncoding
associatedtype Encoding : _UnicodeEncoding_
/// Constructs an instance that can be used to begin parsing `CodeUnit`s at
/// any Unicode scalar boundary.
@@ -44,7 +44,7 @@ public protocol UnicodeParser {
where I.Element == Encoding.CodeUnit
}
extension UnicodeParser {
extension _UnicodeParser {
@_versioned
@inline(__always)
@discardableResult
@@ -86,12 +86,16 @@ extension UnicodeParser {
}
}
extension Unicode {
public typealias Parser = _UnicodeParser
}
extension Unicode {
@_fixed_layout
public // @testable
struct _ParsingIterator<
CodeUnitIterator : IteratorProtocol,
Parser: UnicodeParser
Parser: Unicode.Parser
> where Parser.Encoding.CodeUnit == CodeUnitIterator.Element {
@inline(__always)
@_inlineable

View File

@@ -38,7 +38,7 @@ extension Unicode.Scalar {
extension Unicode {
struct DefaultScalarView<
CodeUnits: BidirectionalCollection,
Encoding: UnicodeEncoding
Encoding: Unicode.Encoding
> where CodeUnits.Iterator.Element == Encoding.CodeUnit {
var codeUnits: CodeUnits
init(
@@ -183,7 +183,7 @@ func utf32<S : StringProtocol>(_ s: S) -> [UInt32] {
return s.unicodeScalars.map { $0.value }
}
func checkStringProtocol<S : StringProtocol, Encoding: UnicodeEncoding>(
func checkStringProtocol<S : StringProtocol, Encoding: Unicode.Encoding>(
_ s: S,
_ utfStr: [Encoding.CodeUnit],
encodedAs: Encoding.Type,
@@ -218,7 +218,7 @@ func checkStringProtocol<S : StringProtocol, Encoding: UnicodeEncoding>(
}
}
func checkDecodeUTF<Codec : UnicodeCodec & UnicodeEncoding>(
func checkDecodeUTF<Codec : UnicodeCodec & Unicode.Encoding>(
_ codec: Codec.Type, _ expectedHead: [UInt32],
_ expectedRepairedTail: [UInt32], _ utfStr: [Codec.CodeUnit]
) -> AssertionResult {