forked from LeenkxTeam/LNXSDK
		
	
		
			
	
	
		
			223 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			223 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
|  | #ifndef HX_OBJC_HELPERS_INCLUDED
 | ||
|  | #define HX_OBJC_HELPERS_INCLUDED
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | @interface NSHaxeWrapperClass : NSObject { | ||
|  |   @public hx::Object *haxeObject; | ||
|  | } | ||
|  | - (id)init:(hx::Object *) inHaxe; | ||
|  | - (void)dealloc; | ||
|  | @end | ||
|  | 
 | ||
|  | 
 | ||
|  | NSDictionary<NSString *, id> *_hx_obj_to_nsdictionary(Dynamic d); | ||
|  | 
 | ||
|  | id _hx_value_to_objc(Dynamic d); | ||
|  | 
 | ||
|  | 
 | ||
|  | Dynamic _hx_nsdictionary_to_obj(NSDictionary<NSString *, id> *inDictionary); | ||
|  | 
 | ||
|  | Dynamic _hx_objc_to_dynamic(id inValue); | ||
|  | 
 | ||
|  | Array<unsigned char> _hx_objc_to_bytes(id value); | ||
|  | 
 | ||
|  | 
 | ||
|  | namespace hx | ||
|  | { | ||
|  | 
 | ||
|  | 
 | ||
|  | // 0 args
 | ||
|  | struct TObjcBlockVoidVoid | ||
|  | { | ||
|  |    typedef void (^t)(); | ||
|  | 
 | ||
|  |    static t create(Dynamic func) | ||
|  |    { | ||
|  |       NSHaxeWrapperClass *wrapper = [[NSHaxeWrapperClass alloc] init:func.mPtr]; | ||
|  |       t wrap = ^ { | ||
|  |          wrapper->haxeObject->__run(); | ||
|  |       }; | ||
|  |       return wrap; | ||
|  |    } | ||
|  | }; | ||
|  | 
 | ||
|  | 
 | ||
|  | template<typename Ret> | ||
|  | struct TObjcBlockRetVoid | ||
|  | { | ||
|  |    typedef Ret (^t)(); | ||
|  | 
 | ||
|  |    static t create(Dynamic func) | ||
|  |    { | ||
|  |       NSHaxeWrapperClass *wrapper = [[NSHaxeWrapperClass alloc] init:func.mPtr]; | ||
|  |       t wrap = ^() { | ||
|  |          return (Ret) wrapper->haxeObject->__run(); | ||
|  |       }; | ||
|  |       return wrap; | ||
|  |    } | ||
|  | }; | ||
|  | 
 | ||
|  | 
 | ||
|  | // 1 arg
 | ||
|  | template<typename Arg0> | ||
|  | struct TObjcBlockVoidArgs1 | ||
|  | { | ||
|  |    typedef void (^t)(Arg0 a); | ||
|  | 
 | ||
|  |    static t create(Dynamic func) | ||
|  |    { | ||
|  |       NSHaxeWrapperClass *wrapper = [[NSHaxeWrapperClass alloc] init:func.mPtr]; | ||
|  |       t wrap = ^(Arg0 a0) { | ||
|  |          wrapper->haxeObject->__run(a0); | ||
|  |       }; | ||
|  |       return wrap; | ||
|  |    } | ||
|  | }; | ||
|  | 
 | ||
|  | template<typename Ret, typename Arg0> | ||
|  | struct TObjcBlockRetArgs1 | ||
|  | { | ||
|  |    typedef Ret (^t)(Arg0 a); | ||
|  |    inline static t create(Dynamic func) | ||
|  |    { | ||
|  |       NSHaxeWrapperClass *wrapper = [[NSHaxeWrapperClass alloc] init:func.mPtr]; | ||
|  |       t wrap = ^(Arg0 a0) { | ||
|  |          return (Ret) wrapper->haxeObject->__run(a0); | ||
|  |       } ; | ||
|  |    } | ||
|  | }; | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | // 2 arg
 | ||
|  | template<typename Arg0, typename Arg1> | ||
|  | struct TObjcBlockVoidArgs2 | ||
|  | { | ||
|  |    typedef void (^t)(Arg0 a0, Arg1 a1); | ||
|  | 
 | ||
|  |    static t create(Dynamic func) | ||
|  |    { | ||
|  |       NSHaxeWrapperClass *wrapper = [[NSHaxeWrapperClass alloc] init:func.mPtr]; | ||
|  |       t wrap = ^(Arg0 a0, Arg1 a1) { | ||
|  |          wrapper->haxeObject->__run(a0,a1); | ||
|  |       }; | ||
|  |       return wrap; | ||
|  |    } | ||
|  | }; | ||
|  | 
 | ||
|  | template<typename Ret, typename Arg0, typename Arg1> | ||
|  | struct TObjcBlockRetArgs2 | ||
|  | { | ||
|  |    typedef Ret (^t)(Arg0 a0, Arg1 a1); | ||
|  |    inline static t create(Dynamic func) | ||
|  |    { | ||
|  |       NSHaxeWrapperClass *wrapper = [[NSHaxeWrapperClass alloc] init:func.mPtr]; | ||
|  |       t wrap = ^(Arg0 a0, Arg1 a1) { | ||
|  |          return (Ret) wrapper->haxeObject->__run(a0,a1); | ||
|  |       } ; | ||
|  |    } | ||
|  | }; | ||
|  | 
 | ||
|  | 
 | ||
|  | // 3 arg
 | ||
|  | template<typename Arg0, typename Arg1, typename Arg2> | ||
|  | struct TObjcBlockVoidArgs3 | ||
|  | { | ||
|  |    typedef void (^t)(Arg0 a0, Arg1 a1, Arg2 a2); | ||
|  | 
 | ||
|  |    static t create(Dynamic func) | ||
|  |    { | ||
|  |       NSHaxeWrapperClass *wrapper = [[NSHaxeWrapperClass alloc] init:func.mPtr]; | ||
|  |       t wrap = ^(Arg0 a0, Arg1 a1, Arg2 a2) { | ||
|  |          wrapper->haxeObject->__run(a0,a1,a2); | ||
|  |       }; | ||
|  |       return wrap; | ||
|  |    } | ||
|  | }; | ||
|  | 
 | ||
|  | template<typename Ret, typename Arg0, typename Arg1, typename Arg2> | ||
|  | struct TObjcBlockRetArgs3 | ||
|  | { | ||
|  |    typedef Ret (^t)(Arg0 a0, Arg1 a1, Arg2 a2); | ||
|  |    inline static t create(Dynamic func) | ||
|  |    { | ||
|  |       NSHaxeWrapperClass *wrapper = [[NSHaxeWrapperClass alloc] init:func.mPtr]; | ||
|  |       t wrap = ^(Arg0 a0, Arg1 a1, Arg2 a2) { | ||
|  |          return (Ret) wrapper->haxeObject->__run(a0,a1,a2); | ||
|  |       } ; | ||
|  |    } | ||
|  | }; | ||
|  | 
 | ||
|  | 
 | ||
|  | // 4 arg
 | ||
|  | template<typename Arg0, typename Arg1, typename Arg2, typename Arg3> | ||
|  | struct TObjcBlockVoidArgs4 | ||
|  | { | ||
|  |    typedef void (^t)(Arg0 a0, Arg1 a1, Arg2 a2, Arg3 a3); | ||
|  | 
 | ||
|  |    static t create(Dynamic func) | ||
|  |    { | ||
|  |       NSHaxeWrapperClass *wrapper = [[NSHaxeWrapperClass alloc] init:func.mPtr]; | ||
|  |       t wrap = ^(Arg0 a0, Arg1 a1, Arg2 a2, Arg3 a3) { | ||
|  |          wrapper->haxeObject->__run(a0,a1,a2,a3); | ||
|  |       }; | ||
|  |       return wrap; | ||
|  |    } | ||
|  | }; | ||
|  | 
 | ||
|  | template<typename Ret, typename Arg0, typename Arg1, typename Arg2, typename Arg3> | ||
|  | struct TObjcBlockRetArgs4 | ||
|  | { | ||
|  |    typedef Ret (^t)(Arg0 a0, Arg1 a1, Arg2 a2, Arg3 a3); | ||
|  |    inline static t create(Dynamic func) | ||
|  |    { | ||
|  |       NSHaxeWrapperClass *wrapper = [[NSHaxeWrapperClass alloc] init:func.mPtr]; | ||
|  |       t wrap = ^(Arg0 a0, Arg1 a1, Arg2 a2, Arg3 a3) { | ||
|  |          return (Ret) wrapper->haxeObject->__run(a0,a1,a2,a3); | ||
|  |       } ; | ||
|  |    } | ||
|  | }; | ||
|  | 
 | ||
|  | 
 | ||
|  | // 5 arg
 | ||
|  | template<typename Arg0, typename Arg1, typename Arg2, typename Arg3, typename Arg4> | ||
|  | struct TObjcBlockVoidArgs5 | ||
|  | { | ||
|  |    typedef void (^t)(Arg0 a0, Arg1 a1, Arg2 a2, Arg3 a3, Arg4 a4); | ||
|  | 
 | ||
|  |    static t create(Dynamic func) | ||
|  |    { | ||
|  |       NSHaxeWrapperClass *wrapper = [[NSHaxeWrapperClass alloc] init:func.mPtr]; | ||
|  |       t wrap = ^(Arg0 a0, Arg1 a1, Arg2 a2, Arg3 a3, Arg4 a4) { | ||
|  |          wrapper->haxeObject->__run(a0,a1,a2,a3,a4); | ||
|  |       }; | ||
|  |       return wrap; | ||
|  |    } | ||
|  | }; | ||
|  | 
 | ||
|  | template<typename Ret, typename Arg0, typename Arg1, typename Arg2, typename Arg3, typename Arg4> | ||
|  | struct TObjcBlockRetArgs5 | ||
|  | { | ||
|  |    typedef Ret (^t)(Arg0 a0, Arg1 a1, Arg2 a2, Arg3 a3, Arg4 a4); | ||
|  |    inline static t create(Dynamic func) | ||
|  |    { | ||
|  |       NSHaxeWrapperClass *wrapper = [[NSHaxeWrapperClass alloc] init:func.mPtr]; | ||
|  |       t wrap = ^(Arg0 a0, Arg1 a1, Arg2 a2, Arg3 a3, Arg4 a4) { | ||
|  |          return (Ret) wrapper->haxeObject->__run(a0,a1,a2,a3,a4); | ||
|  |       } ; | ||
|  |    } | ||
|  | }; | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | } | ||
|  | 
 | ||
|  | #endif
 | ||
|  | 
 |