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 iterator: AnyIterator<UnicodeScalar>
|
||||||
private var back: UnicodeScalar? = nil
|
private var back: UnicodeScalar? = nil
|
||||||
|
|
||||||
private var innerStream: InputStream? = nil
|
|
||||||
private let delimiter: UnicodeScalar
|
private let delimiter: UnicodeScalar
|
||||||
|
|
||||||
internal var currentRow: [String]? = nil
|
internal var currentRow: [String]? = nil
|
||||||
|
@ -54,7 +53,7 @@ public struct CSV: IteratorProtocol, Sequence {
|
||||||
_headerRow = headerRow
|
_headerRow = headerRow
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Create CSV instance with `NSInputStream`.
|
Create CSV instance with `NSInputStream`.
|
||||||
|
|
||||||
|
@ -76,25 +75,23 @@ public struct CSV: IteratorProtocol, Sequence {
|
||||||
case String.Encoding.utf32,
|
case String.Encoding.utf32,
|
||||||
String.Encoding.utf32BigEndian,
|
String.Encoding.utf32BigEndian,
|
||||||
String.Encoding.utf32LittleEndian:
|
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)
|
try self.init(iterator: &iterator, hasHeaderRow: hasHeaderRow, delimiter: delimiter)
|
||||||
|
|
||||||
case String.Encoding.utf16,
|
case String.Encoding.utf16,
|
||||||
String.Encoding.utf16BigEndian,
|
String.Encoding.utf16BigEndian,
|
||||||
String.Encoding.utf16LittleEndian:
|
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)
|
try self.init(iterator: &iterator, hasHeaderRow: hasHeaderRow, delimiter: delimiter)
|
||||||
|
|
||||||
case String.Encoding.utf8,
|
case String.Encoding.utf8,
|
||||||
String.Encoding.ascii:
|
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)
|
try self.init(iterator: &iterator, hasHeaderRow: hasHeaderRow, delimiter: delimiter)
|
||||||
|
|
||||||
default:
|
default:
|
||||||
throw CSVError.StringEncodingMismatch
|
throw CSVError.StringEncodingMismatch
|
||||||
}
|
}
|
||||||
|
|
||||||
innerStream = stream
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// MARK: IteratorProtocol
|
// MARK: IteratorProtocol
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
|
|
||||||
import Foundation
|
import Foundation
|
||||||
|
|
||||||
|
/*
|
||||||
internal struct UnicodeIterator<
|
internal struct UnicodeIterator<
|
||||||
Input: IteratorProtocol,
|
Input: IteratorProtocol,
|
||||||
InputEncoding: UnicodeCodec
|
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