diff --git a/DataToString.swift b/DataToString.swift old mode 100644 new mode 100755 index f439d36..519ebc8 --- a/DataToString.swift +++ b/DataToString.swift @@ -113,6 +113,28 @@ let lock = DispatchSemaphore(value: 1) var completeLoops:Int = 0 var RUNNING = true +class Holder { + var pointer: UnsafeMutablePointer! + var count: Int! + + + init(data: Data) + { + let rawData: UnsafePointer + rawData = data.withUnsafeBytes { (u8Ptr: UnsafePointer) in + return u8Ptr + } + let uint8Pointer = UnsafeMutablePointer.allocate(capacity: data.count) + uint8Pointer.initialize(from: rawData, count: data.count) + pointer = uint8Pointer + count = data.count + } + + deinit { + pointer.deallocate(capacity: count) + } +} + func makeString(data: Data) -> String { let array = Array(data) + [0] return array.withUnsafeBytes { rawBuffer in @@ -129,10 +151,26 @@ func makeStringB(data: Data) -> String { } ?? "" } +func dataToString(data: Data) -> String { + let holder = Holder(data: data) + + let string = String(_StringCore( + baseAddress: holder.pointer, + count: Int(data.count), + elementShift: 0, + hasCocoaBuffer: false, + owner: holder + )) + + return string +} + + // Block to be scheduled func code(block: Int, loops: Int) -> () -> Void { return { var string: String? + var nsstring: NSString? let lDATA = DATAS[block-1] if METHOD == 1 { for _ in 1...EFFORT { @@ -142,7 +180,21 @@ return { for _ in 1...EFFORT { string = makeString(data: lDATA) } - } else { + } else if METHOD == 0 { + for _ in 1...EFFORT { + string = String(repeating: "a", count: 6) + } +// } else if METHOD == 3 { +// for _ in 1...EFFORT { +// nsstring = NSString(data: lDATA, encoding: Encoding.utf8.rawValue)! +// } + } + else if METHOD == 3 { + for _ in 1...EFFORT { + string = dataToString(data: lDATA) + } + } + else { for _ in 1...EFFORT { string = makeStringB(data: lDATA) }