diff options
author | Peter Wu | 2014-07-26 12:14:04 +0200 |
---|---|---|
committer | Pim van den Berg | 2014-08-02 12:29:48 +0200 |
commit | 9e315f904bf32c0e00709d11cffa96a24029f4ad (patch) | |
tree | 4a36027c797f80eab7e7d28bc692d506feade848 /js | |
parent | jsrrdgraph: Drop iDataOffset and iDataLength parameters (diff) | |
download | apt-panopticon_cgp-9e315f904bf32c0e00709d11cffa96a24029f4ad.zip apt-panopticon_cgp-9e315f904bf32c0e00709d11cffa96a24029f4ad.tar.gz apt-panopticon_cgp-9e315f904bf32c0e00709d11cffa96a24029f4ad.tar.bz2 apt-panopticon_cgp-9e315f904bf32c0e00709d11cffa96a24029f4ad.tar.xz |
jsrrdgraph: Remove unused getStringAt, move implementation
Rename switch_endian to littleEndian to be more explicit (the meaning
is now inversed too). Make getEndianByteAt private since it is an
implementation detail.
Drop getStringAt as this is not used in this library. Move getCharAt
above getCStringAt since they are more related.
Move the methods definition for the current implementation to a new
function.
Diffstat (limited to 'js')
-rw-r--r-- | js/binaryXHR.js | 91 |
1 files changed, 43 insertions, 48 deletions
diff --git a/js/binaryXHR.js b/js/binaryXHR.js index 8ce4b0f..2cd02dd 100644 --- a/js/binaryXHR.js +++ b/js/binaryXHR.js | |||
@@ -33,12 +33,8 @@ InvalidBinaryFile.prototype.toString = function() { | |||
33 | function BinaryFile(data) { | 33 | function BinaryFile(data) { |
34 | "use strict"; | 34 | "use strict"; |
35 | var dataLength; | 35 | var dataLength; |
36 | // added | 36 | // whether the data is in little endian format |
37 | var doubleMantExpHi=Math.pow(2,-28); | 37 | var littleEndian = true; |
38 | var doubleMantExpLo=Math.pow(2,-52); | ||
39 | var doubleMantExpFast=Math.pow(2,-20); | ||
40 | |||
41 | var switch_endian = false; | ||
42 | 38 | ||
43 | this.getRawData = function() { | 39 | this.getRawData = function() { |
44 | return data; | 40 | return data; |
@@ -61,20 +57,32 @@ function BinaryFile(data) { | |||
61 | throw new InvalidBinaryFile("Unsupported type " + (typeof data)); | 57 | throw new InvalidBinaryFile("Unsupported type " + (typeof data)); |
62 | } | 58 | } |
63 | 59 | ||
64 | if (switch_endian) { | 60 | this.getLength = function() { |
65 | this.getEndianByteAt = function(iOffset, width, delta) { | 61 | return dataLength; |
66 | return this.getByteAt(iOffset + width - delta - 1); | 62 | }; |
63 | |||
64 | // antique browser, use slower fallback implementation | ||
65 | this.extendWithFallback(data, littleEndian); | ||
66 | } | ||
67 | |||
68 | BinaryFile.prototype.extendWithFallback = function(data, littleEndian) { | ||
69 | "use strict"; | ||
70 | var doubleMantExpHi = Math.pow(2,-28); | ||
71 | var doubleMantExpLo = Math.pow(2,-52); | ||
72 | var doubleMantExpFast = Math.pow(2,-20); | ||
73 | |||
74 | // private function for getting bytes depending on endianess | ||
75 | var that = this, getEndianByteAt; | ||
76 | if (littleEndian) { | ||
77 | getEndianByteAt = function(iOffset, width, delta) { | ||
78 | return that.getByteAt(iOffset + delta); | ||
67 | }; | 79 | }; |
68 | } else { | 80 | } else { |
69 | this.getEndianByteAt = function(iOffset, width, delta) { | 81 | getEndianByteAt = function(iOffset, width, delta) { |
70 | return this.getByteAt(iOffset + delta); | 82 | return that.getByteAt(iOffset + width - delta - 1); |
71 | }; | 83 | }; |
72 | } | 84 | } |
73 | 85 | ||
74 | this.getLength = function() { | ||
75 | return dataLength; | ||
76 | }; | ||
77 | |||
78 | this.getSByteAt = function(iOffset) { | 86 | this.getSByteAt = function(iOffset) { |
79 | var iByte = this.getByteAt(iOffset); | 87 | var iByte = this.getByteAt(iOffset); |
80 | if (iByte > 127) | 88 | if (iByte > 127) |
@@ -82,9 +90,8 @@ function BinaryFile(data) { | |||
82 | else | 90 | else |
83 | return iByte; | 91 | return iByte; |
84 | }; | 92 | }; |
85 | |||
86 | this.getShortAt = function(iOffset) { | 93 | this.getShortAt = function(iOffset) { |
87 | var iShort = (this.getEndianByteAt(iOffset,2,1) << 8) + this.getEndianByteAt(iOffset,2,0); | 94 | var iShort = (getEndianByteAt(iOffset,2,1) << 8) + getEndianByteAt(iOffset,2,0); |
88 | if (iShort < 0) iShort += 65536; | 95 | if (iShort < 0) iShort += 65536; |
89 | return iShort; | 96 | return iShort; |
90 | }; | 97 | }; |
@@ -96,10 +103,10 @@ function BinaryFile(data) { | |||
96 | return iUShort; | 103 | return iUShort; |
97 | }; | 104 | }; |
98 | this.getLongAt = function(iOffset) { | 105 | this.getLongAt = function(iOffset) { |
99 | var iByte1 = this.getEndianByteAt(iOffset,4,0), | 106 | var iByte1 = getEndianByteAt(iOffset,4,0), |
100 | iByte2 = this.getEndianByteAt(iOffset,4,1), | 107 | iByte2 = getEndianByteAt(iOffset,4,1), |
101 | iByte3 = this.getEndianByteAt(iOffset,4,2), | 108 | iByte3 = getEndianByteAt(iOffset,4,2), |
102 | iByte4 = this.getEndianByteAt(iOffset,4,3); | 109 | iByte4 = getEndianByteAt(iOffset,4,3); |
103 | 110 | ||
104 | var iLong = (((((iByte4 << 8) + iByte3) << 8) + iByte2) << 8) + iByte1; | 111 | var iLong = (((((iByte4 << 8) + iByte3) << 8) + iByte2) << 8) + iByte1; |
105 | if (iLong < 0) iLong += 4294967296; | 112 | if (iLong < 0) iLong += 4294967296; |
@@ -112,15 +119,9 @@ function BinaryFile(data) { | |||
112 | else | 119 | else |
113 | return iULong; | 120 | return iULong; |
114 | }; | 121 | }; |
115 | this.getStringAt = function(iOffset, iLength) { | 122 | this.getCharAt = function(iOffset) { |
116 | var aStr = []; | 123 | return String.fromCharCode(this.getByteAt(iOffset)); |
117 | for (var i=iOffset,j=0;i<iOffset+iLength;i++,j++) { | ||
118 | aStr[j] = String.fromCharCode(this.getByteAt(i)); | ||
119 | } | ||
120 | return aStr.join(""); | ||
121 | }; | 124 | }; |
122 | |||
123 | // Added | ||
124 | this.getCStringAt = function(iOffset, iMaxLength) { | 125 | this.getCStringAt = function(iOffset, iMaxLength) { |
125 | var aStr = []; | 126 | var aStr = []; |
126 | for (var i=iOffset,j=0;(i<iOffset+iMaxLength) && (this.getByteAt(i)>0);i++,j++) { | 127 | for (var i=iOffset,j=0;(i<iOffset+iMaxLength) && (this.getByteAt(i)>0);i++,j++) { |
@@ -128,17 +129,15 @@ function BinaryFile(data) { | |||
128 | } | 129 | } |
129 | return aStr.join(""); | 130 | return aStr.join(""); |
130 | }; | 131 | }; |
131 | |||
132 | // Added | ||
133 | this.getDoubleAt = function(iOffset) { | 132 | this.getDoubleAt = function(iOffset) { |
134 | var iByte1 = this.getEndianByteAt(iOffset,8,0), | 133 | var iByte1 = getEndianByteAt(iOffset,8,0), |
135 | iByte2 = this.getEndianByteAt(iOffset,8,1), | 134 | iByte2 = getEndianByteAt(iOffset,8,1), |
136 | iByte3 = this.getEndianByteAt(iOffset,8,2), | 135 | iByte3 = getEndianByteAt(iOffset,8,2), |
137 | iByte4 = this.getEndianByteAt(iOffset,8,3), | 136 | iByte4 = getEndianByteAt(iOffset,8,3), |
138 | iByte5 = this.getEndianByteAt(iOffset,8,4), | 137 | iByte5 = getEndianByteAt(iOffset,8,4), |
139 | iByte6 = this.getEndianByteAt(iOffset,8,5), | 138 | iByte6 = getEndianByteAt(iOffset,8,5), |
140 | iByte7 = this.getEndianByteAt(iOffset,8,6), | 139 | iByte7 = getEndianByteAt(iOffset,8,6), |
141 | iByte8 = this.getEndianByteAt(iOffset,8,7); | 140 | iByte8 = getEndianByteAt(iOffset,8,7); |
142 | var iSign=iByte8 >> 7; | 141 | var iSign=iByte8 >> 7; |
143 | var iExpRaw=((iByte8 & 0x7F)<< 4) + (iByte7 >> 4); | 142 | var iExpRaw=((iByte8 & 0x7F)<< 4) + (iByte7 >> 4); |
144 | var iMantHi=((((((iByte7 & 0x0F) << 8) + iByte6) << 8) + iByte5) << 8) + iByte4; | 143 | var iMantHi=((((((iByte7 & 0x0F) << 8) + iByte6) << 8) + iByte5) << 8) + iByte4; |
@@ -152,13 +151,12 @@ function BinaryFile(data) { | |||
152 | var dDouble = ((iSign==1)?-1:1)*Math.pow(2,iExp)*(1.0 + iMantLo*doubleMantExpLo + iMantHi*doubleMantExpHi); | 151 | var dDouble = ((iSign==1)?-1:1)*Math.pow(2,iExp)*(1.0 + iMantLo*doubleMantExpLo + iMantHi*doubleMantExpHi); |
153 | return dDouble; | 152 | return dDouble; |
154 | }; | 153 | }; |
155 | // added | ||
156 | // Extracts only 4 bytes out of 8, loosing in precision (20 bit mantissa) | 154 | // Extracts only 4 bytes out of 8, loosing in precision (20 bit mantissa) |
157 | this.getFastDoubleAt = function(iOffset) { | 155 | this.getFastDoubleAt = function(iOffset) { |
158 | var iByte5 = this.getEndianByteAt(iOffset,8,4), | 156 | var iByte5 = getEndianByteAt(iOffset,8,4), |
159 | iByte6 = this.getEndianByteAt(iOffset,8,5), | 157 | iByte6 = getEndianByteAt(iOffset,8,5), |
160 | iByte7 = this.getEndianByteAt(iOffset,8,6), | 158 | iByte7 = getEndianByteAt(iOffset,8,6), |
161 | iByte8 = this.getEndianByteAt(iOffset,8,7); | 159 | iByte8 = getEndianByteAt(iOffset,8,7); |
162 | var iSign=iByte8 >> 7; | 160 | var iSign=iByte8 >> 7; |
163 | var iExpRaw=((iByte8 & 0x7F)<< 4) + (iByte7 >> 4); | 161 | var iExpRaw=((iByte8 & 0x7F)<< 4) + (iByte7 >> 4); |
164 | var iMant=((((iByte7 & 0x0F) << 8) + iByte6) << 8) + iByte5; | 162 | var iMant=((((iByte7 & 0x0F) << 8) + iByte6) << 8) + iByte5; |
@@ -172,11 +170,8 @@ function BinaryFile(data) { | |||
172 | dDouble *= Math.pow(2,iExp) * (1.0 + iMant*doubleMantExpFast); | 170 | dDouble *= Math.pow(2,iExp) * (1.0 + iMant*doubleMantExpFast); |
173 | return dDouble; | 171 | return dDouble; |
174 | }; | 172 | }; |
173 | }; | ||
175 | 174 | ||
176 | this.getCharAt = function(iOffset) { | ||
177 | return String.fromCharCode(this.getByteAt(iOffset)); | ||
178 | }; | ||
179 | } | ||
180 | 175 | ||
181 | 176 | ||
182 | // Use document.write only for stone-age browsers. | 177 | // Use document.write only for stone-age browsers. |