Use Int literals instead of characters in Bytes.int, .float, and .double propertys
This gives ~94% speed improvment
This commit is contained in:
parent
d4f82e6c77
commit
cc8f568e21
|
@ -8,7 +8,7 @@ extension Array where Element == UInt8 {
|
|||
let direction: Int
|
||||
var iterator: Int
|
||||
|
||||
if self.first == "-" {
|
||||
if self.first == 45 {
|
||||
iterator = self.startIndex + 1
|
||||
direction = -1
|
||||
} else {
|
||||
|
@ -18,17 +18,17 @@ extension Array where Element == UInt8 {
|
|||
|
||||
while iterator < count {
|
||||
switch self[iterator] {
|
||||
case "0": result = result * 10
|
||||
case "1": result = (result * 10) + 1
|
||||
case "2": result = (result * 10) + 2
|
||||
case "3": result = (result * 10) + 3
|
||||
case "4": result = (result * 10) + 4
|
||||
case "5": result = (result * 10) + 5
|
||||
case "6": result = (result * 10) + 6
|
||||
case "7": result = (result * 10) + 7
|
||||
case "8": result = (result * 10) + 8
|
||||
case "9": result = (result * 10) + 9
|
||||
case ",": break
|
||||
case 48: result = result &* 10
|
||||
case 49: result = (result &* 10) &+ 1
|
||||
case 50: result = (result &* 10) &+ 2
|
||||
case 51: result = (result &* 10) &+ 3
|
||||
case 52: result = (result &* 10) &+ 4
|
||||
case 53: result = (result &* 10) &+ 5
|
||||
case 54: result = (result &* 10) &+ 6
|
||||
case 55: result = (result &* 10) &+ 7
|
||||
case 56: result = (result &* 10) &+ 8
|
||||
case 57: result = (result &* 10) &+ 9
|
||||
case 44: break
|
||||
default: return nil
|
||||
}
|
||||
|
||||
|
@ -46,7 +46,7 @@ extension Array where Element == UInt8 {
|
|||
let direction: Int
|
||||
var iterator: Int
|
||||
|
||||
if self.first == "-" {
|
||||
if self.first == 45 {
|
||||
iterator = self.startIndex + 1
|
||||
direction = -1
|
||||
} else {
|
||||
|
@ -56,18 +56,18 @@ extension Array where Element == UInt8 {
|
|||
|
||||
while iterator < count {
|
||||
switch self[iterator] {
|
||||
case "0": result = result * 10
|
||||
case "1": result = (result * 10) + 1
|
||||
case "2": result = (result * 10) + 2
|
||||
case "3": result = (result * 10) + 3
|
||||
case "4": result = (result * 10) + 4
|
||||
case "5": result = (result * 10) + 5
|
||||
case "6": result = (result * 10) + 6
|
||||
case "7": result = (result * 10) + 7
|
||||
case "8": result = (result * 10) + 8
|
||||
case "9": result = (result * 10) + 9
|
||||
case ".": decimal = pow(10, Float(count - 1 - iterator))
|
||||
case ",": break
|
||||
case 48: result = result &* 10
|
||||
case 49: result = (result &* 10) &+ 1
|
||||
case 50: result = (result &* 10) &+ 2
|
||||
case 51: result = (result &* 10) &+ 3
|
||||
case 52: result = (result &* 10) &+ 4
|
||||
case 53: result = (result &* 10) &+ 5
|
||||
case 54: result = (result &* 10) &+ 6
|
||||
case 55: result = (result &* 10) &+ 7
|
||||
case 56: result = (result &* 10) &+ 8
|
||||
case 57: result = (result &* 10) &+ 9
|
||||
case 46: decimal = pow(10, Float(count - 1 - iterator))
|
||||
case 44: break
|
||||
default: return nil
|
||||
}
|
||||
|
||||
|
@ -85,7 +85,7 @@ extension Array where Element == UInt8 {
|
|||
let direction: Int
|
||||
var iterator: Int
|
||||
|
||||
if self.first == "-" {
|
||||
if self.first == 45 {
|
||||
iterator = self.startIndex + 1
|
||||
direction = -1
|
||||
} else {
|
||||
|
@ -95,18 +95,18 @@ extension Array where Element == UInt8 {
|
|||
|
||||
while iterator < count {
|
||||
switch self[iterator] {
|
||||
case "0": result = result * 10
|
||||
case "1": result = (result * 10) + 1
|
||||
case "2": result = (result * 10) + 2
|
||||
case "3": result = (result * 10) + 3
|
||||
case "4": result = (result * 10) + 4
|
||||
case "5": result = (result * 10) + 5
|
||||
case "6": result = (result * 10) + 6
|
||||
case "7": result = (result * 10) + 7
|
||||
case "8": result = (result * 10) + 8
|
||||
case "9": result = (result * 10) + 9
|
||||
case ".": decimal = pow(10, Double(count - 1 - iterator))
|
||||
case ",": break
|
||||
case 48: result = result &* 10
|
||||
case 49: result = (result &* 10) &+ 1
|
||||
case 50: result = (result &* 10) &+ 2
|
||||
case 51: result = (result &* 10) &+ 3
|
||||
case 52: result = (result &* 10) &+ 4
|
||||
case 53: result = (result &* 10) &+ 5
|
||||
case 54: result = (result &* 10) &+ 6
|
||||
case 55: result = (result &* 10) &+ 7
|
||||
case 56: result = (result &* 10) &+ 8
|
||||
case 57: result = (result &* 10) &+ 9
|
||||
case 46: decimal = pow(10, Double(count - 1 - iterator))
|
||||
case 44: break
|
||||
default: return nil
|
||||
}
|
||||
|
||||
|
|
|
@ -18,7 +18,7 @@ final class UtilityTests: XCTestCase {
|
|||
|
||||
func testMeasureBytesToInt() {
|
||||
|
||||
// 0.095
|
||||
// 0.005
|
||||
measure {
|
||||
for _ in 0..<100_000 {
|
||||
_ = self.intBytes.int
|
||||
|
@ -34,7 +34,7 @@ final class UtilityTests: XCTestCase {
|
|||
|
||||
func testMeasureBytesToFloat() {
|
||||
|
||||
// 0.097
|
||||
// 0.007
|
||||
measure {
|
||||
for _ in 0..<100_000 {
|
||||
_ = self.floatBytes.float
|
||||
|
@ -50,7 +50,7 @@ final class UtilityTests: XCTestCase {
|
|||
|
||||
func testMeasureBytesToDouble() {
|
||||
|
||||
// 0.100
|
||||
// 0.007
|
||||
measure {
|
||||
for _ in 0..<100_000 {
|
||||
_ = self.doubleBytes.double
|
||||
|
|
Loading…
Reference in New Issue