Can advance byte index in byte stream
This commit is contained in:
@@ -17,5 +17,7 @@ public protocol ByteStream {
|
||||
func nextBytes(numberOfBytes: Int) -> NSData?
|
||||
|
||||
func indexIsValid(index: Int) -> Bool
|
||||
|
||||
func advanceBy(numberOfBytes: Int)
|
||||
|
||||
}
|
||||
@@ -48,4 +48,18 @@ class NSDataByteStream: ByteStream {
|
||||
return index >= 0 && index <= self.length
|
||||
}
|
||||
|
||||
func advanceBy(numberOfBytes: Int) {
|
||||
|
||||
let finalIndex = self.currentIndex + numberOfBytes
|
||||
|
||||
if finalIndex > self.length {
|
||||
self.advancePointer(self.length - self.currentIndex)
|
||||
} else if finalIndex < 0 {
|
||||
self.advancePointer(-self.currentIndex)
|
||||
} else {
|
||||
self.advancePointer(numberOfBytes)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -84,4 +84,53 @@ class NSDataByteStreamTests: XCTestCase {
|
||||
XCTAssertEqual(bytes, NSData(byteArray: [5, 6]))
|
||||
XCTAssertEqual(byte, UInt8(7))
|
||||
}
|
||||
|
||||
func testCanAdvanceForward1Byte() {
|
||||
let byteStream = NSDataByteStream(data: NSData(byteArray: [5, 6, 7, 8]))
|
||||
byteStream.advanceBy(1)
|
||||
let byte = byteStream.nextByte()
|
||||
XCTAssertEqual(byte, 6)
|
||||
}
|
||||
|
||||
func testCanAdvanceForwardMultipleBytes() {
|
||||
let byteStream = NSDataByteStream(data: NSData(byteArray: [5, 6, 7, 8]))
|
||||
byteStream.advanceBy(3)
|
||||
let byte = byteStream.nextByte()
|
||||
XCTAssertEqual(byte, 8)
|
||||
}
|
||||
|
||||
func testCanAdvanceBackward1Byte() {
|
||||
let byteStream = NSDataByteStream(data: NSData(byteArray: [5, 6, 7, 8]))
|
||||
|
||||
var byte = byteStream.nextByte()
|
||||
XCTAssertEqual(byte, 5)
|
||||
|
||||
byteStream.advanceBy(-1)
|
||||
byte = byteStream.nextByte()
|
||||
XCTAssertEqual(byte, 5)
|
||||
}
|
||||
|
||||
func testCanAdvanceBackwardMultipleBytes() {
|
||||
let byteStream = NSDataByteStream(data: NSData(byteArray: [5, 6, 7, 8]))
|
||||
|
||||
var byte = byteStream.nextByte()
|
||||
byte = byteStream.nextByte()
|
||||
XCTAssertEqual(byte, 6)
|
||||
|
||||
byteStream.advanceBy(-2)
|
||||
byte = byteStream.nextByte()
|
||||
XCTAssertEqual(byte, 5)
|
||||
}
|
||||
|
||||
func testAdvanceForwardTooFarStopsAtEnd() {
|
||||
let byteStream = NSDataByteStream(data: NSData(byteArray: [5, 6, 7, 8]))
|
||||
byteStream.advanceBy(999)
|
||||
XCTAssertEqual(byteStream.currentIndex, 4)
|
||||
}
|
||||
|
||||
func testAdvanceBackTooFarStopsAtBeggining() {
|
||||
let byteStream = NSDataByteStream(data: NSData(byteArray: [5, 6, 7, 8]))
|
||||
byteStream.advanceBy(-999)
|
||||
XCTAssertEqual(byteStream.currentIndex, 0)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user