blob: ec1d401a5c2bf815908a867c8a9273f4e2c822dc [file] [log] [blame]
def ObjectiveCBridgeableImplementationForNSValue(Type):
return """
extension {Type}: _ObjectiveCBridgeable {{
public func _bridgeToObjectiveC() -> NSValue {{
var myself = self
return NSValue(bytes: &myself, objCType: _getObjCTypeEncoding({Type}.self))
}}
public static func _forceBridgeFromObjectiveC(_ source: NSValue,
result: inout {Type}?) {{
precondition(strcmp(source.objCType,
_getObjCTypeEncoding({Type}.self)) == 0,
"NSValue does not contain the right type to bridge to {Type}")
result = {Type}()
source.getValue(&result!)
}}
public static func _conditionallyBridgeFromObjectiveC(_ source: NSValue,
result: inout {Type}?)
-> Bool {{
if strcmp(source.objCType, _getObjCTypeEncoding({Type}.self)) != 0 {{
result = nil
return false
}}
result = {Type}()
source.getValue(&result!)
return true
}}
public static func _unconditionallyBridgeFromObjectiveC(_ source: NSValue?)
-> {Type} {{
let unwrappedSource = source!
precondition(strcmp(unwrappedSource.objCType,
_getObjCTypeEncoding({Type}.self)) == 0,
"NSValue does not contain the right type to bridge to {Type}")
var result = {Type}()
unwrappedSource.getValue(&result)
return result
}}
}}
""".format(Type=Type)
def ObjectiveCBridgeableImplementationForNSValueWithCategoryMethods(
Type,
initializer,
getter,
objCType="_getObjCTypeEncoding"
):
return """
extension {Type}: _ObjectiveCBridgeable {{
public func _bridgeToObjectiveC() -> NSValue {{
return {initializer}(self)
}}
public static func _forceBridgeFromObjectiveC(_ source: NSValue,
result: inout {Type}?) {{
precondition(strcmp(source.objCType,
{objCType}({Type}.self)) == 0,
"NSValue does not contain the right type to bridge to {Type}")
result = {getter}(source)
}}
public static func _conditionallyBridgeFromObjectiveC(_ source: NSValue,
result: inout {Type}?)
-> Bool {{
if strcmp(source.objCType, {objCType}({Type}.self)) != 0 {{
result = nil
return false
}}
result = {getter}(source)
return true
}}
public static func _unconditionallyBridgeFromObjectiveC(_ source: NSValue?)
-> {Type} {{
let unwrappedSource = source!
precondition(strcmp(unwrappedSource.objCType,
{objCType}({Type}.self)) == 0,
"NSValue does not contain the right type to bridge to {Type}")
return {getter}(unwrappedSource)
}}
}}
""".format(Type=Type, initializer=initializer,
getter=getter, objCType=objCType)