[stdlib] UTF8View Iterator and count specialization

This commit is contained in:
Dave Abrahams
2017-05-22 14:56:42 -07:00
parent d94297ced1
commit b21fa4575a
2 changed files with 128 additions and 1 deletions

View File

@@ -91,6 +91,23 @@ extension _UnicodeEncoding_ {
return transcode(content, from: FromEncoding.self)
?? encodedReplacementCharacter
}
internal static func _transcode<
Source: Sequence, SourceEncoding: Unicode.Encoding>(
_ source: Source,
from sourceEncoding: SourceEncoding.Type,
into processScalar: (EncodedScalar)->Void)
where Source.Element == SourceEncoding.CodeUnit {
var p = SourceEncoding.ForwardParser()
var i = source.makeIterator()
while true {
switch p.parseScalar(from: &i) {
case .valid(let e): processScalar(_transcode(e, from: sourceEncoding))
case .error(_): processScalar(encodedReplacementCharacter)
case .emptyInput: return
}
}
}
}
extension Unicode {