12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- /*
- * Copyright 1999-2101 Alibaba Group.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- //
- // OtherExtension.swift
- // HandyJSON
- //
- // Created by zhouzhuo on 08/01/2017.
- //
- protocol UTF8Initializable {
- init?(validatingUTF8: UnsafePointer<CChar>)
- }
- extension String : UTF8Initializable {}
- extension Array where Element : UTF8Initializable {
- init(utf8Strings: UnsafePointer<CChar>) {
- var strings = [Element]()
- var pointer = utf8Strings
- while let string = Element(validatingUTF8: pointer) {
- strings.append(string)
- while pointer.pointee != 0 {
- pointer.advance()
- }
- pointer.advance()
- guard pointer.pointee != 0 else {
- break
- }
- }
- self = strings
- }
- }
- extension Strideable {
- mutating func advance() {
- self = advanced(by: 1)
- }
- }
- extension UnsafePointer {
- init<T>(_ pointer: UnsafePointer<T>) {
- self = UnsafeRawPointer(pointer).assumingMemoryBound(to: Pointee.self)
- }
- }
- func relativePointer<T, U, V>(base: UnsafePointer<T>, offset: U) -> UnsafePointer<V> where U : FixedWidthInteger {
- return UnsafeRawPointer(base).advanced(by: Int(integer: offset)).assumingMemoryBound(to: V.self)
- }
- extension Int {
- fileprivate init<T : FixedWidthInteger>(integer: T) {
- switch integer {
- case let value as Int: self = value
- case let value as Int32: self = Int(value)
- case let value as Int16: self = Int(value)
- case let value as Int8: self = Int(value)
- default: self = 0
- }
- }
- }
|