// // DataWithPointer.swift // SWCompression // // Created by Timofey Solomko on 01.11.16. // Copyright © 2016 Timofey Solomko. All rights reserved. // import Foundation import CoreFoundation class DataWithPointer { /// Only needed for creation of bitVector in initData() let data: Data fileprivate(set) var bitVector: CFBitVector? fileprivate(set) var index: Int fileprivate(set) var bitShift: Int init(data: Data) { self.data = data self.index = 0 self.bitShift = 0 self.bitVector = nil data.withUnsafeBytes { (bytes: UnsafePointer) in self.bitVector = CFBitVectorCreate(kCFAllocatorDefault, bytes, data.count * 8) } } func bits(count: Int) -> [UInt8] { guard count > 0 else { return [] } var array: [UInt8] = [] for _ in 0..= 8 { self.bitShift = 0 self.index += 1 } } return array } func intFromBits(count: Int) -> Int { guard count > 0 else { return 0 } var result = 0 for i in 0..= 8 { self.bitShift = 0 self.index += 1 } } return result } func bit() -> UInt8 { return self.bits(count: 1).first! } /// Use with caution: not effective. func data(ofBytes count: Data.Index) -> Data { precondition(self.bitShift == 0, "Misaligned byte.") let returnData = Data(data[index.. [UInt8] { guard count > 0 else { return [] } var array: [UInt8] = [] for _ in 0..= 8 { self.bitShift = 0 self.index += 1 } } return array } override func intFromBits(count: Int) -> Int { guard count > 0 else { return 0 } var result = 0 for i in 0..= 8 { self.bitShift = 0 self.index += 1 } } return result } }