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
|