mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-12-23 22:55:00 +00:00
no message
This commit is contained in:
@@ -136,6 +136,13 @@ public final class Encoder {
|
||||
self.buffer.write(UnsafePointer<Void>(key), offset: 0, length: Int(length))
|
||||
}
|
||||
|
||||
public func encodeKey(key: Int8) {
|
||||
var length: Int8 = 1
|
||||
self.buffer.write(&length, offset: 0, length: 1)
|
||||
var keyValue = key
|
||||
self.buffer.write(&keyValue, offset: 0, length: Int(length))
|
||||
}
|
||||
|
||||
public func encodeInt32(value: Int32, forKey key: UnsafePointer<Int8>) {
|
||||
self.encodeKey(key)
|
||||
var type: Int8 = ValueType.Int32.rawValue
|
||||
@@ -144,6 +151,14 @@ public final class Encoder {
|
||||
self.buffer.write(&v, offset: 0, length: 4)
|
||||
}
|
||||
|
||||
public func encodeInt32(value: Int32, forKey key: Int8) {
|
||||
self.encodeKey(key)
|
||||
var type: Int8 = ValueType.Int32.rawValue
|
||||
self.buffer.write(&type, offset: 0, length: 1)
|
||||
var v = value
|
||||
self.buffer.write(&v, offset: 0, length: 4)
|
||||
}
|
||||
|
||||
public func encodeInt64(value: Int64, forKey key: UnsafePointer<Int8>) {
|
||||
self.encodeKey(key)
|
||||
var type: Int8 = ValueType.Int64.rawValue
|
||||
@@ -152,6 +167,14 @@ public final class Encoder {
|
||||
self.buffer.write(&v, offset: 0, length: 8)
|
||||
}
|
||||
|
||||
public func encodeInt64(value: Int64, forKey key: Int8) {
|
||||
self.encodeKey(key)
|
||||
var type: Int8 = ValueType.Int64.rawValue
|
||||
self.buffer.write(&type, offset: 0, length: 1)
|
||||
var v = value
|
||||
self.buffer.write(&v, offset: 0, length: 8)
|
||||
}
|
||||
|
||||
public func encodeBool(value: Bool, forKey key: UnsafePointer<Int8>) {
|
||||
self.encodeKey(key)
|
||||
var type: Int8 = ValueType.Bool.rawValue
|
||||
@@ -160,6 +183,14 @@ public final class Encoder {
|
||||
self.buffer.write(&v, offset: 0, length: 1)
|
||||
}
|
||||
|
||||
public func encodeBool(value: Bool, forKey key: Int8) {
|
||||
self.encodeKey(key)
|
||||
var type: Int8 = ValueType.Bool.rawValue
|
||||
self.buffer.write(&type, offset: 0, length: 1)
|
||||
var v: Int8 = value ? 1 : 0
|
||||
self.buffer.write(&v, offset: 0, length: 1)
|
||||
}
|
||||
|
||||
public func encodeDouble(value: Double, forKey key: UnsafePointer<Int8>) {
|
||||
self.encodeKey(key)
|
||||
var type: Int8 = ValueType.Double.rawValue
|
||||
@@ -168,6 +199,14 @@ public final class Encoder {
|
||||
self.buffer.write(&v, offset: 0, length: 8)
|
||||
}
|
||||
|
||||
public func encodeDouble(value: Double, forKey key: Int8) {
|
||||
self.encodeKey(key)
|
||||
var type: Int8 = ValueType.Double.rawValue
|
||||
self.buffer.write(&type, offset: 0, length: 1)
|
||||
var v = value
|
||||
self.buffer.write(&v, offset: 0, length: 8)
|
||||
}
|
||||
|
||||
public func encodeString(value: String, forKey key: UnsafePointer<Int8>) {
|
||||
self.encodeKey(key)
|
||||
var type: Int8 = ValueType.String.rawValue
|
||||
@@ -178,6 +217,26 @@ public final class Encoder {
|
||||
self.buffer.write(data.bytes, offset: 0, length: Int(length))
|
||||
}
|
||||
|
||||
public func encodeString(value: DeferredString, forKey key: UnsafePointer<Int8>) {
|
||||
self.encodeKey(key)
|
||||
var type: Int8 = ValueType.String.rawValue
|
||||
self.buffer.write(&type, offset: 0, length: 1)
|
||||
let data = value.data
|
||||
var length: Int32 = Int32(data.length)
|
||||
self.buffer.write(&length, offset: 0, length: 4)
|
||||
self.buffer.write(data.bytes, offset: 0, length: Int(length))
|
||||
}
|
||||
|
||||
public func encodeString(value: String, forKey key: Int8) {
|
||||
self.encodeKey(key)
|
||||
var type: Int8 = ValueType.String.rawValue
|
||||
self.buffer.write(&type, offset: 0, length: 1)
|
||||
let data = value.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true)!
|
||||
var length: Int32 = Int32(data.length)
|
||||
self.buffer.write(&length, offset: 0, length: 4)
|
||||
self.buffer.write(data.bytes, offset: 0, length: Int(length))
|
||||
}
|
||||
|
||||
public func encodeRootObject(value: Coding) {
|
||||
self.encodeObject(value, forKey: "_")
|
||||
}
|
||||
@@ -278,6 +337,8 @@ public final class Encoder {
|
||||
self.buffer.write(&bytesLength, offset: 0, length: 4)
|
||||
self.buffer.write(bytes.memory, offset: 0, length: bytes.offset)
|
||||
}
|
||||
|
||||
public let sharedWriteBuffer = WriteBuffer()
|
||||
}
|
||||
|
||||
public final class Decoder {
|
||||
@@ -376,6 +437,37 @@ public final class Decoder {
|
||||
return false
|
||||
}
|
||||
|
||||
private class func positionOnKey(bytes: UnsafePointer<Int8>, inout offset: Int, maxOffset: Int, length: Int, key: Int16, valueType: ValueType) -> Bool
|
||||
{
|
||||
var keyValue = key
|
||||
let startOffset = offset
|
||||
|
||||
let keyLength: Int = 2
|
||||
while (offset < maxOffset)
|
||||
{
|
||||
let readKeyLength = bytes[offset]
|
||||
offset += 1
|
||||
offset += Int(readKeyLength)
|
||||
|
||||
let readValueType = bytes[offset]
|
||||
offset += 1
|
||||
|
||||
if readValueType != valueType.rawValue || keyLength != Int(readKeyLength) || memcmp(bytes + (offset - Int(readKeyLength) - 1), &keyValue, keyLength) != 0 {
|
||||
skipValue(bytes, offset: &offset, length: length, valueType: ValueType(rawValue: readValueType)!)
|
||||
} else {
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
if (startOffset != 0)
|
||||
{
|
||||
offset = 0
|
||||
return positionOnKey(bytes, offset: &offset, maxOffset: startOffset, length: length, key: key, valueType: valueType)
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
public func decodeInt32ForKey(key: UnsafePointer<Int8>) -> Int32 {
|
||||
if Decoder.positionOnKey(UnsafePointer<Int8>(self.buffer.memory), offset: &self.buffer.offset, maxOffset: self.buffer.length, length: self.buffer.length, key: key, valueType: .Int32) {
|
||||
var value: Int32 = 0
|
||||
@@ -433,6 +525,43 @@ public final class Decoder {
|
||||
}
|
||||
}
|
||||
|
||||
public func decodeStringForKey(key: UnsafePointer<Int8>) -> String? {
|
||||
if Decoder.positionOnKey(UnsafePointer<Int8>(self.buffer.memory), offset: &self.buffer.offset, maxOffset: self.buffer.length, length: self.buffer.length, key: key, valueType: .String) {
|
||||
var length: Int32 = 0
|
||||
memcpy(&length, self.buffer.memory + self.buffer.offset, 4)
|
||||
let data = NSData(bytes: self.buffer.memory + (self.buffer.offset + 4), length: Int(length))
|
||||
self.buffer.offset += 4 + Int(length)
|
||||
let value = NSString(data: data, encoding: NSUTF8StringEncoding)
|
||||
return value as? String
|
||||
} else {
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
public func decodeStringForKey(key: UnsafePointer<Int8>) -> DeferredString {
|
||||
if Decoder.positionOnKey(UnsafePointer<Int8>(self.buffer.memory), offset: &self.buffer.offset, maxOffset: self.buffer.length, length: self.buffer.length, key: key, valueType: .String) {
|
||||
var length: Int32 = 0
|
||||
memcpy(&length, self.buffer.memory + self.buffer.offset, 4)
|
||||
let data = NSData(bytes: self.buffer.memory + (self.buffer.offset + 4), length: Int(length))
|
||||
self.buffer.offset += 4 + Int(length)
|
||||
return DeferredStringValue(data)
|
||||
} else {
|
||||
return DeferredStringValue("")
|
||||
}
|
||||
}
|
||||
|
||||
public func decodeStringForKey(key: UnsafePointer<Int8>) -> DeferredString? {
|
||||
if Decoder.positionOnKey(UnsafePointer<Int8>(self.buffer.memory), offset: &self.buffer.offset, maxOffset: self.buffer.length, length: self.buffer.length, key: key, valueType: .String) {
|
||||
var length: Int32 = 0
|
||||
memcpy(&length, self.buffer.memory + self.buffer.offset, 4)
|
||||
let data = NSData(bytes: self.buffer.memory + (self.buffer.offset + 4), length: Int(length))
|
||||
self.buffer.offset += 4 + Int(length)
|
||||
return DeferredStringValue(data)
|
||||
} else {
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
public func decodeRootObject() -> Coding? {
|
||||
return self.decodeObjectForKey("_")
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user