1 | "use strict";
|
---|
2 |
|
---|
3 | Object.defineProperty(exports, "__esModule", {
|
---|
4 | value: true
|
---|
5 | });
|
---|
6 | exports.read = read;
|
---|
7 | exports.write = write;
|
---|
8 |
|
---|
9 | function read(buffer, offset, isLE, mLen, nBytes) {
|
---|
10 | var e, m;
|
---|
11 | var eLen = nBytes * 8 - mLen - 1;
|
---|
12 | var eMax = (1 << eLen) - 1;
|
---|
13 | var eBias = eMax >> 1;
|
---|
14 | var nBits = -7;
|
---|
15 | var i = isLE ? nBytes - 1 : 0;
|
---|
16 | var d = isLE ? -1 : 1;
|
---|
17 | var s = buffer[offset + i];
|
---|
18 | i += d;
|
---|
19 | e = s & (1 << -nBits) - 1;
|
---|
20 | s >>= -nBits;
|
---|
21 | nBits += eLen;
|
---|
22 |
|
---|
23 | for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
|
---|
24 |
|
---|
25 | m = e & (1 << -nBits) - 1;
|
---|
26 | e >>= -nBits;
|
---|
27 | nBits += mLen;
|
---|
28 |
|
---|
29 | for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
|
---|
30 |
|
---|
31 | if (e === 0) {
|
---|
32 | e = 1 - eBias;
|
---|
33 | } else if (e === eMax) {
|
---|
34 | return m ? NaN : (s ? -1 : 1) * Infinity;
|
---|
35 | } else {
|
---|
36 | m = m + Math.pow(2, mLen);
|
---|
37 | e = e - eBias;
|
---|
38 | }
|
---|
39 |
|
---|
40 | return (s ? -1 : 1) * m * Math.pow(2, e - mLen);
|
---|
41 | }
|
---|
42 |
|
---|
43 | function write(buffer, value, offset, isLE, mLen, nBytes) {
|
---|
44 | var e, m, c;
|
---|
45 | var eLen = nBytes * 8 - mLen - 1;
|
---|
46 | var eMax = (1 << eLen) - 1;
|
---|
47 | var eBias = eMax >> 1;
|
---|
48 | var rt = mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0;
|
---|
49 | var i = isLE ? 0 : nBytes - 1;
|
---|
50 | var d = isLE ? 1 : -1;
|
---|
51 | var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0;
|
---|
52 | value = Math.abs(value);
|
---|
53 |
|
---|
54 | if (isNaN(value) || value === Infinity) {
|
---|
55 | m = isNaN(value) ? 1 : 0;
|
---|
56 | e = eMax;
|
---|
57 | } else {
|
---|
58 | e = Math.floor(Math.log(value) / Math.LN2);
|
---|
59 |
|
---|
60 | if (value * (c = Math.pow(2, -e)) < 1) {
|
---|
61 | e--;
|
---|
62 | c *= 2;
|
---|
63 | }
|
---|
64 |
|
---|
65 | if (e + eBias >= 1) {
|
---|
66 | value += rt / c;
|
---|
67 | } else {
|
---|
68 | value += rt * Math.pow(2, 1 - eBias);
|
---|
69 | }
|
---|
70 |
|
---|
71 | if (value * c >= 2) {
|
---|
72 | e++;
|
---|
73 | c /= 2;
|
---|
74 | }
|
---|
75 |
|
---|
76 | if (e + eBias >= eMax) {
|
---|
77 | m = 0;
|
---|
78 | e = eMax;
|
---|
79 | } else if (e + eBias >= 1) {
|
---|
80 | m = (value * c - 1) * Math.pow(2, mLen);
|
---|
81 | e = e + eBias;
|
---|
82 | } else {
|
---|
83 | m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen);
|
---|
84 | e = 0;
|
---|
85 | }
|
---|
86 | }
|
---|
87 |
|
---|
88 | for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
|
---|
89 |
|
---|
90 | e = e << mLen | m;
|
---|
91 | eLen += mLen;
|
---|
92 |
|
---|
93 | for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
|
---|
94 |
|
---|
95 | buffer[offset + i - d] |= s * 128;
|
---|
96 | }
|
---|