0001 import Echo
0002 import Foundation
0003
0004 #if os(Linux)
0005 import Glibc
0006 #else
0007 import Darwin
0008 #endif
0009
0010 public enum EncodingType| Data.swift:4 | static var encodingType: EncodingType { get } |
| Data.swift:9 | public static var encodingType: EncodingType { |
{
0011 case UTF8| Data.swift:10 | return .UTF8 |
| Vaquita.swift:17 | case UTF8: |
| Vaquita.swift:26 | case UTF8: |
0012
0013 var typeForEncoding: Any.Type {
0014
0015 let type: Any.Type
0016 switch self {
0017 case UTF8:
0018 type = UInt8.self
0019 }
0020
0021 return type
0022 }
0023
0024 var encoding| Data.swift:43 | encoding: UInt8.encodingType.encoding, |
: UInt {
0025 switch self {
0026 case UTF8:
0027 return NSUTF8StringEncoding
0028 }
0029 }
0030 }
0031
0032 public enum FileError| Vaquita.swift:58 | throw FileError.OpenFailed |
| Vaquita.swift:96 | throw FileError.OpenFailed |
: ErrorType {
0033 case ReadFailed
0034 case WriteFailed
0035 case OpenFailed| Vaquita.swift:58 | throw FileError.OpenFailed |
| Vaquita.swift:96 | throw FileError.OpenFailed |
0036 }
0037
0038 public class Vaquita {
0039
0040 static let fileQueue| Vaquita.swift:45 | dispatch_async(fileQueue) { |
| Vaquita.swift:83 | dispatch_async(fileQueue) { |
= dispatch_queue_create("com.vaquita.file",
0041 DISPATCH_QUEUE_SERIAL)
0042
0043 public class func readFile(path path: String,
0044 handler: (data: Data?, error: ErrorType?) -> ()) {
0045 dispatch_async(fileQueue) {
0046 do {
0047 let data = try self.readFileSync(path: path)
0048 handler(data: data, error: nil)
0049 } catch {
0050 handler(data: nil, error: error)
0051 }
0052 }
0053 }
0054
0055 public class func readFileSync| Vaquita.swift:47 | let data = try self.readFileSync(path: path) |
(path path: String) throws -> Data {
0056 let fileptr = fopen(path, "rb")
0057 if fileptr == nil {
0058 throw FileError.OpenFailed
0059 }
0060 fseek(fileptr, 0, SEEK_END)
0061 let fileLength = ftell(fileptr)
0062 rewind(fileptr)
0063
0064 var buffer: UnsafeMutablePointer<UInt8> =
0065 UnsafeMutablePointer.alloc(fileLength)
0066 fread(buffer, fileLength, 1, fileptr)
0067 fclose(fileptr)
0068
0069 var data = [UInt8]()
0070 for _ in 0 ..< fileLength {
0071
0072 data.append(buffer.memory)
0073 buffer = buffer.successor()
0074 }
0075
0076 buffer.destroy()
0077
0078 return Data(bytes: data)
0079 }
0080
0081 public class func writeData(data: Data, toFilePath path: String,
0082 handler: (error: ErrorType?) -> ()) {
0083 dispatch_async(fileQueue) {
0084 do {
0085 try self.writeDataSync(data, toFilePath: path)
0086 handler(error: nil)
0087 } catch {
0088 handler(error: error)
0089 }
0090 }
0091 }
0092
0093 public class func writeDataSync| Vaquita.swift:85 | try self.writeDataSync(data, toFilePath: path) |
(data: Data, toFilePath path: String) throws {
0094 let fileptr = fopen(path, "w")
0095 if fileptr == nil {
0096 throw FileError.OpenFailed
0097 }
0098 let string = try data.toString()
0099 fwrite(string, 1, data.size, fileptr)
0100 fclose(fileptr)
0101 }
0102 }
0103