Change 'UnicodeIterator' to 'UTFxxIterator'
This commit is contained in:
parent
f9df2e5c9d
commit
ccadfd499e
|
@ -27,7 +27,6 @@ public struct CSV: IteratorProtocol, Sequence {
|
|||
private var iterator: AnyIterator<UnicodeScalar>
|
||||
private var back: UnicodeScalar? = nil
|
||||
|
||||
private var innerStream: InputStream? = nil
|
||||
private let delimiter: UnicodeScalar
|
||||
|
||||
internal var currentRow: [String]? = nil
|
||||
|
@ -54,7 +53,7 @@ public struct CSV: IteratorProtocol, Sequence {
|
|||
_headerRow = headerRow
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
Create CSV instance with `NSInputStream`.
|
||||
|
||||
|
@ -76,25 +75,23 @@ public struct CSV: IteratorProtocol, Sequence {
|
|||
case String.Encoding.utf32,
|
||||
String.Encoding.utf32BigEndian,
|
||||
String.Encoding.utf32LittleEndian:
|
||||
var iterator = UnicodeIterator(input: reader.makeUInt32Iterator(), inputEncoding: UTF32.self)
|
||||
var iterator = UTF32Iterator(reader: reader)
|
||||
try self.init(iterator: &iterator, hasHeaderRow: hasHeaderRow, delimiter: delimiter)
|
||||
|
||||
case String.Encoding.utf16,
|
||||
String.Encoding.utf16BigEndian,
|
||||
String.Encoding.utf16LittleEndian:
|
||||
var iterator = UnicodeIterator(input: reader.makeUInt16Iterator(), inputEncoding: UTF16.self)
|
||||
var iterator = UTF16Iterator(reader: reader)
|
||||
try self.init(iterator: &iterator, hasHeaderRow: hasHeaderRow, delimiter: delimiter)
|
||||
|
||||
case String.Encoding.utf8,
|
||||
String.Encoding.ascii:
|
||||
var iterator = UnicodeIterator(input: reader.makeUInt8Iterator(), inputEncoding: UTF8.self)
|
||||
var iterator = UTF8Iterator(reader: reader)
|
||||
try self.init(iterator: &iterator, hasHeaderRow: hasHeaderRow, delimiter: delimiter)
|
||||
|
||||
default:
|
||||
throw CSVError.StringEncodingMismatch
|
||||
}
|
||||
|
||||
innerStream = stream
|
||||
}
|
||||
|
||||
// MARK: IteratorProtocol
|
||||
|
|
|
@ -8,6 +8,7 @@
|
|||
|
||||
import Foundation
|
||||
|
||||
/*
|
||||
internal struct UnicodeIterator<
|
||||
Input: IteratorProtocol,
|
||||
InputEncoding: UnicodeCodec
|
||||
|
@ -31,3 +32,61 @@ internal struct UnicodeIterator<
|
|||
}
|
||||
|
||||
}
|
||||
*/
|
||||
|
||||
public struct UTF32Iterator: IteratorProtocol {
|
||||
|
||||
private var innerIterator: BinaryReader.UInt32Iterator
|
||||
private var codec = UTF32()
|
||||
|
||||
internal init(reader: BinaryReader) {
|
||||
self.innerIterator = reader.makeUInt32Iterator()
|
||||
}
|
||||
|
||||
public mutating func next() -> UnicodeScalar? {
|
||||
switch codec.decode(&innerIterator) {
|
||||
case .scalarValue(let c): return c
|
||||
case .emptyInput: return nil
|
||||
case .error: return nil
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public struct UTF16Iterator: IteratorProtocol {
|
||||
|
||||
private var innerIterator: BinaryReader.UInt16Iterator
|
||||
private var codec = UTF16()
|
||||
|
||||
internal init(reader: BinaryReader) {
|
||||
self.innerIterator = reader.makeUInt16Iterator()
|
||||
}
|
||||
|
||||
public mutating func next() -> UnicodeScalar? {
|
||||
switch codec.decode(&innerIterator) {
|
||||
case .scalarValue(let c): return c
|
||||
case .emptyInput: return nil
|
||||
case .error: return nil
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public struct UTF8Iterator: IteratorProtocol {
|
||||
|
||||
private var innerIterator: BinaryReader.UInt8Iterator
|
||||
private var codec = UTF8()
|
||||
|
||||
internal init(reader: BinaryReader) {
|
||||
self.innerIterator = reader.makeUInt8Iterator()
|
||||
}
|
||||
|
||||
public mutating func next() -> UnicodeScalar? {
|
||||
switch codec.decode(&innerIterator) {
|
||||
case .scalarValue(let c): return c
|
||||
case .emptyInput: return nil
|
||||
case .error: return nil
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue