starling-framework
Version:
A fast, productive library for 2D cross-platform development.
154 lines (137 loc) • 3.73 kB
JavaScript
// Class: haxe.io.FPHelper
var $global = typeof window != "undefined" ? window : typeof global != "undefined" ? global : typeof self != "undefined" ? self : this
$global.Object.defineProperty(exports, "__esModule", {value: true});
var __map_reserved = {};
// Imports
var $hxClasses = require("./../../hxClasses_stub").default;
var $hxEnums = require("./../../hxEnums_stub").default;
var $import = require("./../../import_stub").default;
function haxe__$Int64__$_$_$Int64() {return require("./../../haxe/_Int64/___Int64");}
function Std() {return require("./../../Std");}
// Constructor
var FPHelper = function(){}
// Meta
FPHelper.__name__ = "haxe.io.FPHelper";
FPHelper.__isInterface__ = false;
FPHelper.prototype = {
};
FPHelper.prototype.__class__ = FPHelper.prototype.constructor = $hxClasses["haxe.io.FPHelper"] = FPHelper;
// Init
// Statics
FPHelper._i32ToFloat = function(i) {
var sign = 1 - (i >>> 31 << 1);
var e = i >> 23 & 255;
if(e == 255) {
if((i & 8388607) == 0) {
if(sign > 0) {
return Infinity;
} else {
return -Infinity;
}
} else {
return NaN;
}
}
var m = e == 0 ? (i & 8388607) << 1 : i & 8388607 | 8388608;
return sign * m * Math.pow(2,e - 150);
}
FPHelper._i64ToDouble = function(lo,hi) {
var sign = 1 - (hi >>> 31 << 1);
var e = hi >> 20 & 2047;
if(e == 2047) {
if(lo == 0 && (hi & 1048575) == 0) {
if(sign > 0) {
return Infinity;
} else {
return -Infinity;
}
} else {
return NaN;
}
}
var m = 2.220446049250313e-16 * ((hi & 1048575) * 4294967296. + (lo >>> 31) * 2147483648. + (lo & 2147483647));
if(e == 0) {
m *= 2.0;
} else {
m += 1.0;
}
return sign * m * Math.pow(2,e - 1023);
}
FPHelper._floatToI32 = function(f) {
if(f == 0) {
return 0;
}
var af = f < 0 ? -f : f;
var exp = Math.floor(Math.log(af) / 0.6931471805599453);
if(exp > 127) {
return 2139095040;
} else {
if(exp <= -127) {
exp = -127;
af *= 7.1362384635298e+44;
} else {
af = (af / Math.pow(2,exp) - 1.0) * 8388608;
}
return (f < 0 ? -2147483648 : 0) | exp + 127 << 23 | Math.round(af);
}
}
FPHelper._doubleToI64 = function(v) {
var i64 = FPHelper.i64tmp;
if(v == 0) {
i64.low = 0;
i64.high = 0;
} else if(!isFinite(v)) {
i64.low = 0;
i64.high = v > 0 ? 2146435072 : -1048576;
} else {
var av = v < 0 ? -v : v;
var exp = Math.floor(Math.log(av) / 0.6931471805599453);
if(exp > 1023) {
i64.low = -1;
i64.high = 2146435071;
} else {
if(exp <= -1023) {
exp = -1023;
av /= 2.2250738585072014e-308;
} else {
av = av / Math.pow(2,exp) - 1.0;
}
var sig = Math.round(av * 4503599627370496.);
var sig_l = (Std().default).int(sig);
var sig_h = (Std().default).int(sig / 4294967296.0);
i64.low = sig_l;
i64.high = (v < 0 ? -2147483648 : 0) | exp + 1023 << 20 | sig_h;
}
}
return i64;
}
FPHelper.i32ToFloat = function(i) {
FPHelper.helper.setInt32(0,i,true);
return FPHelper.helper.getFloat32(0,true);
}
FPHelper.floatToI32 = function(f) {
FPHelper.helper.setFloat32(0,f,true);
return FPHelper.helper.getInt32(0,true);
}
FPHelper.i64ToDouble = function(low,high) {
FPHelper.helper.setInt32(0,low,true);
FPHelper.helper.setInt32(4,high,true);
return FPHelper.helper.getFloat64(0,true);
}
FPHelper.doubleToI64 = function(v) {
var i64 = FPHelper.i64tmp;
FPHelper.helper.setFloat64(0,v,true);
i64.low = FPHelper.helper.getInt32(0,true);
i64.high = FPHelper.helper.getInt32(4,true);
return i64;
}
FPHelper.i64tmp = (function($this) {
var $r;
var this1 = new (haxe__$Int64__$_$_$Int64().default)(0,0);
$r = this1;
return $r;
}(this))
FPHelper.LN2 = 0.6931471805599453
FPHelper.helper = new DataView(new ArrayBuffer(8))
// Export
exports.default = FPHelper;