149 lines
		
	
	
		
			5.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			149 lines
		
	
	
		
			5.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| 
								 | 
							
								#ifndef CPP_INT64_INCLUDED
							 | 
						||
| 
								 | 
							
								#define CPP_INT64_INCLUDED
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								namespace cpp
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class Int64Handler
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								   public:
							 | 
						||
| 
								 | 
							
								      static inline const char *getName() { return "cpp.Int64"; }
							 | 
						||
| 
								 | 
							
								      static inline String toString( const void *inValue ) { return String( *(Int64 *)inValue ); }
							 | 
						||
| 
								 | 
							
								      static inline void handler(DynamicHandlerOp op, void *ioValue,int inSize, void *outResult)
							 | 
						||
| 
								 | 
							
								      {
							 | 
						||
| 
								 | 
							
								         if (op==dhoToString)
							 | 
						||
| 
								 | 
							
								            *(String *)outResult = toString(ioValue);
							 | 
						||
| 
								 | 
							
								         else if (op==dhoGetClassName)
							 | 
						||
| 
								 | 
							
								            *(const char **)outResult = getName();
							 | 
						||
| 
								 | 
							
								         else if (op==dhoFromDynamic)
							 | 
						||
| 
								 | 
							
								         {
							 | 
						||
| 
								 | 
							
								            StructHandlerDynamicParams *params = (StructHandlerDynamicParams *)outResult;
							 | 
						||
| 
								 | 
							
								            cpp::Int64 &value = *(cpp::Int64 *)ioValue;
							 | 
						||
| 
								 | 
							
								            params->outProcessed = true;
							 | 
						||
| 
								 | 
							
								            if (!params->inData)
							 | 
						||
| 
								 | 
							
								               value = 0;
							 | 
						||
| 
								 | 
							
								            else
							 | 
						||
| 
								 | 
							
								               value = params->inData->__ToInt64();
							 | 
						||
| 
								 | 
							
								         }
							 | 
						||
| 
								 | 
							
								         else if (op==dhoToDynamic)
							 | 
						||
| 
								 | 
							
								         {
							 | 
						||
| 
								 | 
							
								            Dynamic value =  *(cpp::Int64 *)ioValue;
							 | 
						||
| 
								 | 
							
								            *(hx::Object **)outResult = value.mPtr;
							 | 
						||
| 
								 | 
							
								         }
							 | 
						||
| 
								 | 
							
								         else if (op==dhoIs)
							 | 
						||
| 
								 | 
							
								         {
							 | 
						||
| 
								 | 
							
								            StructHandlerDynamicParams *params = (StructHandlerDynamicParams *)outResult;
							 | 
						||
| 
								 | 
							
								            hx::Object *obj = params->inData;
							 | 
						||
| 
								 | 
							
								            int type = obj->__GetType();
							 | 
						||
| 
								 | 
							
								            params->outProcessed = type==vtInt || type==vtInt64;
							 | 
						||
| 
								 | 
							
								         }
							 | 
						||
| 
								 | 
							
								         else
							 | 
						||
| 
								 | 
							
								            return DefaultStructHandler::handler(op,ioValue,inSize, outResult);
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typedef Struct<Int64,Int64Handler> Int64Struct;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#if (HXCPP_API_LEVEL >= 420)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								inline cpp::Int64 _hx_int64_make(int a, int b) { return (((cpp::Int64)(unsigned int)a)<<32) | (unsigned int)b; }
							 | 
						||
| 
								 | 
							
								inline bool _hx_int64_is_neg(cpp::Int64 a) { return a<0; }
							 | 
						||
| 
								 | 
							
								inline bool _hx_int64_is_zero(cpp::Int64 a) { return a==0; }
							 | 
						||
| 
								 | 
							
								inline bool _hx_int64_eq(cpp::Int64 a, cpp::Int64 b) { return a==b; }
							 | 
						||
| 
								 | 
							
								inline bool _hx_int64_neq(cpp::Int64 a, cpp::Int64 b) { return a!=b; }
							 | 
						||
| 
								 | 
							
								inline int _hx_int64_compare(cpp::Int64 a, cpp::Int64 b)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								   return a==b ? 0 : a<b ? -1 : 1;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								inline int _hx_int64_ucompare(cpp::Int64 a, cpp::Int64 b)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								   return a==b ? 0 : ( ::cpp::UInt64)a<( ::cpp::UInt64)b ? -1 : 1;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								inline String _hx_int64_to_string(cpp::Int64 a) { return a; }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								inline cpp::Int64 _hx_int64_neg(cpp::Int64 a) { return -a; }
							 | 
						||
| 
								 | 
							
								inline cpp::Int64 _hx_int64_complement(cpp::Int64 a) { return ~a; }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								inline cpp::Int64 _hx_int64_pre_increment(cpp::Int64 &ioVal) {
							 | 
						||
| 
								 | 
							
								   return ++ioVal;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								inline cpp::Int64 _hx_int64_post_increment(cpp::Int64 &ioVal) {
							 | 
						||
| 
								 | 
							
								   return ioVal++;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								inline cpp::Int64 _hx_int64_pre_decrement(cpp::Int64 &ioVal) {
							 | 
						||
| 
								 | 
							
								   return --ioVal;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								inline cpp::Int64 _hx_int64_post_decrement(cpp::Int64 &ioVal) {
							 | 
						||
| 
								 | 
							
								   return ioVal--;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								inline cpp::Int64 _hx_int64_sub(cpp::Int64 a, cpp::Int64 b) { return a-b; }
							 | 
						||
| 
								 | 
							
								inline cpp::Int64 _hx_int64_add(cpp::Int64 a, cpp::Int64 b) { return a+b; }
							 | 
						||
| 
								 | 
							
								inline cpp::Int64 _hx_int64_mul(cpp::Int64 a, cpp::Int64 b) { return a*b; }
							 | 
						||
| 
								 | 
							
								inline cpp::Int64 _hx_int64_div(cpp::Int64 a, cpp::Int64 b) { return a/b; }
							 | 
						||
| 
								 | 
							
								inline cpp::Int64 _hx_int64_mod(cpp::Int64 a, cpp::Int64 b) { return a%b; }
							 | 
						||
| 
								 | 
							
								inline cpp::Int64 _hx_int64_and(cpp::Int64 a, cpp::Int64 b) { return a&b; }
							 | 
						||
| 
								 | 
							
								inline cpp::Int64 _hx_int64_or(cpp::Int64 a, cpp::Int64 b) { return a|b; }
							 | 
						||
| 
								 | 
							
								inline cpp::Int64 _hx_int64_xor(cpp::Int64 a, cpp::Int64 b) { return a^b; }
							 | 
						||
| 
								 | 
							
								inline cpp::Int64 _hx_int64_shl(cpp::Int64 a, int b) { return a<<(b&63); }
							 | 
						||
| 
								 | 
							
								inline cpp::Int64 _hx_int64_shr(cpp::Int64 a, int b) { return a>>(b&63); }
							 | 
						||
| 
								 | 
							
								inline cpp::Int64 _hx_int64_ushr(cpp::Int64 a, int b) { return ((cpp::UInt64)a)>>(b&63); }
							 | 
						||
| 
								 | 
							
								inline int _hx_int64_high(cpp::Int64 a) { return (int)( a >> 32 ); }
							 | 
						||
| 
								 | 
							
								inline int _hx_int64_low(cpp::Int64 a) { return (int)( a & 0xffffffff ); }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#else
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								inline cpp::Int64Struct _hx_int64_make(int a, int b) { return (((cpp::Int64)(unsigned int)a)<<32) | (unsigned int)b; }
							 | 
						||
| 
								 | 
							
								inline bool _hx_int64_is_neg(cpp::Int64 a) { return a<0; }
							 | 
						||
| 
								 | 
							
								inline bool _hx_int64_is_zero(cpp::Int64 a) { return a==0; }
							 | 
						||
| 
								 | 
							
								inline bool _hx_int64_eq(cpp::Int64 a, cpp::Int64 b) { return a==b; }
							 | 
						||
| 
								 | 
							
								inline bool _hx_int64_neq(cpp::Int64 a, cpp::Int64 b) { return a!=b; }
							 | 
						||
| 
								 | 
							
								inline int _hx_int64_compare(cpp::Int64 a, cpp::Int64 b)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								   return a==b ? 0 : a<b ? -1 : 1;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								inline int _hx_int64_ucompare(cpp::Int64 a, cpp::Int64 b)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								   return a==b ? 0 : ( ::cpp::UInt64)a<( ::cpp::UInt64)b ? -1 : 1;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								inline String _hx_int64_to_string(cpp::Int64Struct a) { return a; }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								inline cpp::Int64Struct _hx_int64_neg(cpp::Int64 a) { return -a; }
							 | 
						||
| 
								 | 
							
								inline cpp::Int64Struct _hx_int64_complement(cpp::Int64 a) { return ~a; }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								inline cpp::Int64Struct _hx_int64_pre_increment(cpp::Int64Struct &ioVal) {
							 | 
						||
| 
								 | 
							
								   return ++ioVal.get();
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								inline cpp::Int64Struct _hx_int64_post_increment(cpp::Int64Struct &ioVal) {
							 | 
						||
| 
								 | 
							
								   return ioVal.get()++;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								inline cpp::Int64Struct _hx_int64_pre_decrement(cpp::Int64Struct &ioVal) {
							 | 
						||
| 
								 | 
							
								   return --ioVal.get();
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								inline cpp::Int64Struct _hx_int64_post_decrement(cpp::Int64Struct &ioVal) {
							 | 
						||
| 
								 | 
							
								   return ioVal.get()--;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								inline cpp::Int64Struct _hx_int64_sub(cpp::Int64 a, cpp::Int64 b) { return a-b; }
							 | 
						||
| 
								 | 
							
								inline cpp::Int64Struct _hx_int64_add(cpp::Int64 a, cpp::Int64 b) { return a+b; }
							 | 
						||
| 
								 | 
							
								inline cpp::Int64Struct _hx_int64_mul(cpp::Int64 a, cpp::Int64 b) { return a*b; }
							 | 
						||
| 
								 | 
							
								inline cpp::Int64Struct _hx_int64_div(cpp::Int64 a, cpp::Int64 b) { return a/b; }
							 | 
						||
| 
								 | 
							
								inline cpp::Int64Struct _hx_int64_mod(cpp::Int64 a, cpp::Int64 b) { return a%b; }
							 | 
						||
| 
								 | 
							
								inline cpp::Int64Struct _hx_int64_and(cpp::Int64 a, cpp::Int64 b) { return a&b; }
							 | 
						||
| 
								 | 
							
								inline cpp::Int64Struct _hx_int64_or(cpp::Int64 a, cpp::Int64 b) { return a|b; }
							 | 
						||
| 
								 | 
							
								inline cpp::Int64Struct _hx_int64_xor(cpp::Int64 a, cpp::Int64 b) { return a^b; }
							 | 
						||
| 
								 | 
							
								inline cpp::Int64Struct _hx_int64_shl(cpp::Int64 a, int b) { return a<<(b&63); }
							 | 
						||
| 
								 | 
							
								inline cpp::Int64Struct _hx_int64_shr(cpp::Int64 a, int b) { return a>>(b&63); }
							 | 
						||
| 
								 | 
							
								inline cpp::Int64Struct _hx_int64_ushr(cpp::Int64 a, int b) { return ((cpp::UInt64)a)>>(b&63); }
							 | 
						||
| 
								 | 
							
								inline int _hx_int64_high(cpp::Int64Struct a) { return (int)( a.get() >>32 ); }
							 | 
						||
| 
								 | 
							
								inline int _hx_int64_low(cpp::Int64Struct a) { return (int)( a.get()  & 0xffffffff ); }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#endif
							 |