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
							 | 
						||
| 
								 | 
							
								
							 |