|
18 | 18 | * @license ByteBuffer.js (c) 2013 Daniel Wirtz <[email protected]>
|
19 | 19 | * Released under the Apache License, Version 2.0
|
20 | 20 | * see: https://github.com/dcodeIO/ByteBuffer.js for details
|
| 21 | + * |
| 22 | + * Note that this library carefully avoids using the array access operator |
| 23 | + * (i.e. buffer[x]) on ArrayBufferView subclasses (e.g. Uint8Array), and |
| 24 | + * uses DataView instead. This is required for IE 8 compatibility. |
21 | 25 | */
|
22 | 26 | (function(global) {
|
23 | 27 | "use strict";
|
|
1012 | 1016 | // ref: http://code.google.com/searchframe#WTeibokF6gE/trunk/src/google/protobuf/io/coded_stream.cc
|
1013 | 1017 | value = value >>> 0;
|
1014 | 1018 | this.ensureCapacity(offset+ByteBuffer.calculateVarint32(value));
|
1015 |
| - var dst = new Uint8Array(this.array), |
| 1019 | + var dst = new DataView(this.array), |
1016 | 1020 | size = 0;
|
1017 |
| - dst[offset] = (value | 0x80); |
| 1021 | + dst.setUint8(offset, value | 0x80); |
1018 | 1022 | if (value >= (1 << 7)) {
|
1019 |
| - dst[offset+1] = ((value >> 7) | 0x80); |
| 1023 | + dst.setUint8(offset+1, (value >> 7) | 0x80); |
1020 | 1024 | if (value >= (1 << 14)) {
|
1021 |
| - dst[offset+2] = ((value >> 14) | 0x80); |
| 1025 | + dst.setUint8(offset+2, (value >> 14) | 0x80); |
1022 | 1026 | if (value >= (1 << 21)) {
|
1023 |
| - dst[offset+3] = ((value >> 21) | 0x80); |
| 1027 | + dst.setUint8(offset+3, (value >> 21) | 0x80); |
1024 | 1028 | if (value >= (1 << 28)) {
|
1025 |
| - dst[offset+4] = (value >> 28) & 0x7F; |
| 1029 | + dst.setUint8(offset+4, (value >> 28) & 0x7F); |
1026 | 1030 | size = 5;
|
1027 | 1031 | } else {
|
1028 |
| - dst[offset+3] &= 0x7F; |
| 1032 | + dst.setUint8(offset+3, dst.getUint8(offset+3) & 0x7F); |
1029 | 1033 | size = 4;
|
1030 | 1034 | }
|
1031 | 1035 | } else {
|
1032 |
| - dst[offset+2] &= 0x7F; |
| 1036 | + dst.setUint8(offset+2, dst.getUint8(offset+2) & 0x7F); |
1033 | 1037 | size = 3;
|
1034 | 1038 | }
|
1035 | 1039 | } else {
|
1036 |
| - dst[offset+1] &= 0x7F; |
| 1040 | + dst.setUint8(offset+1, dst.getUint8(offset+1) & 0x7F); |
1037 | 1041 | size = 2;
|
1038 | 1042 | }
|
1039 | 1043 | } else {
|
1040 |
| - dst[offset] &= 0x7F; |
| 1044 | + dst.setUint8(offset, dst.getUint8(offset) & 0x7F); |
1041 | 1045 | size = 1;
|
1042 | 1046 | }
|
1043 | 1047 | if (advance) {
|
|
1060 | 1064 | offset = typeof offset != 'undefined' ? offset : this.offset;
|
1061 | 1065 | // ref: src/google/protobuf/io/coded_stream.cc
|
1062 | 1066 |
|
1063 |
| - var src = new Uint8Array(this.array), |
| 1067 | + var src = new DataView(this.array), |
1064 | 1068 | count = 0,
|
1065 | 1069 | b;
|
1066 | 1070 | var value = 0 >>> 0;
|
1067 | 1071 | do {
|
1068 |
| - b = src[offset+count]; |
| 1072 | + b = src.getUint8(offset+count); |
1069 | 1073 | value |= ((b&0x7F)<<(7*count)) >>> 0;
|
1070 | 1074 | ++count;
|
1071 | 1075 | } while (b & 0x80);
|
|
1166 | 1170 | size = ByteBuffer.calculateVarint64(value);
|
1167 | 1171 |
|
1168 | 1172 | this.ensureCapacity(offset+size);
|
1169 |
| - var dst = new Uint8Array(this.array); |
| 1173 | + var dst = new DataView(this.array); |
1170 | 1174 | switch (size) {
|
1171 |
| - case 10: dst[offset+9] = ((part2 >>> 7) | 0x80); |
1172 |
| - case 9 : dst[offset+8] = ((part2 ) | 0x80); |
1173 |
| - case 8 : dst[offset+7] = ((part1 >>> 21) | 0x80); |
1174 |
| - case 7 : dst[offset+6] = ((part1 >>> 14) | 0x80); |
1175 |
| - case 6 : dst[offset+5] = ((part1 >>> 7) | 0x80); |
1176 |
| - case 5 : dst[offset+4] = ((part1 ) | 0x80); |
1177 |
| - case 4 : dst[offset+3] = ((part0 >>> 21) | 0x80); |
1178 |
| - case 3 : dst[offset+2] = ((part0 >>> 14) | 0x80); |
1179 |
| - case 2 : dst[offset+1] = ((part0 >>> 7) | 0x80); |
1180 |
| - case 1 : dst[offset+0] = ((part0 ) | 0x80); |
1181 |
| - } |
1182 |
| - dst[offset+size-1] &= 0x7F; |
| 1175 | + case 10: dst.setUint8(offset+9, (part2 >>> 7) | 0x80); |
| 1176 | + case 9 : dst.setUint8(offset+8, (part2 ) | 0x80); |
| 1177 | + case 8 : dst.setUint8(offset+7, (part1 >>> 21) | 0x80); |
| 1178 | + case 7 : dst.setUint8(offset+6, (part1 >>> 14) | 0x80); |
| 1179 | + case 6 : dst.setUint8(offset+5, (part1 >>> 7) | 0x80); |
| 1180 | + case 5 : dst.setUint8(offset+4, (part1 ) | 0x80); |
| 1181 | + case 4 : dst.setUint8(offset+3, (part0 >>> 21) | 0x80); |
| 1182 | + case 3 : dst.setUint8(offset+2, (part0 >>> 14) | 0x80); |
| 1183 | + case 2 : dst.setUint8(offset+1, (part0 >>> 7) | 0x80); |
| 1184 | + case 1 : dst.setUint8(offset+0, (part0 ) | 0x80); |
| 1185 | + } |
| 1186 | + dst.setUint8(offset+size-1, dst.getUint8(offset+size-1) & 0x7F); |
1183 | 1187 | if (advance) {
|
1184 | 1188 | this.offset += size;
|
1185 | 1189 | return this;
|
|
1204 | 1208 | var start = offset;
|
1205 | 1209 | // ref: src/google/protobuf/io/coded_stream.cc
|
1206 | 1210 |
|
1207 |
| - var src = new Uint8Array(this.array); |
| 1211 | + var src = new DataView(this.array); |
1208 | 1212 | var part0, part1 = 0, part2 = 0, b;
|
1209 |
| - b = src[offset++]; part0 = (b & 0x7F) ; if (b & 0x80) { |
1210 |
| - b = src[offset++]; part0 |= (b & 0x7F) << 7; if (b & 0x80) { |
1211 |
| - b = src[offset++]; part0 |= (b & 0x7F) << 14; if (b & 0x80) { |
1212 |
| - b = src[offset++]; part0 |= (b & 0x7F) << 21; if (b & 0x80) { |
1213 |
| - b = src[offset++]; part1 = (b & 0x7F) ; if (b & 0x80) { |
1214 |
| - b = src[offset++]; part1 |= (b & 0x7F) << 7; if (b & 0x80) { |
1215 |
| - b = src[offset++]; part1 |= (b & 0x7F) << 14; if (b & 0x80) { |
1216 |
| - b = src[offset++]; part1 |= (b & 0x7F) << 21; if (b & 0x80) { |
1217 |
| - b = src[offset++]; part2 = (b & 0x7F) ; if (b & 0x80) { |
1218 |
| - b = src[offset++]; part2 |= (b & 0x7F) << 7; if (b & 0x80) { |
| 1213 | + b = src.getUint8(offset++); part0 = (b & 0x7F) ; if (b & 0x80) { |
| 1214 | + b = src.getUint8(offset++); part0 |= (b & 0x7F) << 7; if (b & 0x80) { |
| 1215 | + b = src.getUint8(offset++); part0 |= (b & 0x7F) << 14; if (b & 0x80) { |
| 1216 | + b = src.getUint8(offset++); part0 |= (b & 0x7F) << 21; if (b & 0x80) { |
| 1217 | + b = src.getUint8(offset++); part1 = (b & 0x7F) ; if (b & 0x80) { |
| 1218 | + b = src.getUint8(offset++); part1 |= (b & 0x7F) << 7; if (b & 0x80) { |
| 1219 | + b = src.getUint8(offset++); part1 |= (b & 0x7F) << 14; if (b & 0x80) { |
| 1220 | + b = src.getUint8(offset++); part1 |= (b & 0x7F) << 21; if (b & 0x80) { |
| 1221 | + b = src.getUint8(offset++); part2 = (b & 0x7F) ; if (b & 0x80) { |
| 1222 | + b = src.getUint8(offset++); part2 |= (b & 0x7F) << 7; if (b & 0x80) { |
1219 | 1223 | throw(new Error("Data must be corrupt: Buffer overrun")); }}}}}}}}}}
|
1220 | 1224 | var value = Long.from28Bits(part0, part1, part2, false);
|
1221 | 1225 | if (advance) {
|
|
1860 | 1864 | asArray = !!asArray;
|
1861 | 1865 | wrap = typeof wrap != 'undefined' ? parseInt(wrap, 10) : 16;
|
1862 | 1866 | if (wrap < 1) wrap = 16;
|
1863 |
| - var out = "", lines = [], view = new Uint8Array(this.array); |
| 1867 | + var out = "", lines = [], view = new DataView(this.array); |
1864 | 1868 | if (this.offset == 0 && this.length == 0) {
|
1865 | 1869 | out += "|";
|
1866 | 1870 | } else if (this.length == 0) {
|
|
1875 | 1879 | lines.push(out);
|
1876 | 1880 | out = " ";
|
1877 | 1881 | }
|
1878 |
| - var val = view[i]; |
| 1882 | + var val = view.getUint8(i); |
1879 | 1883 | val = val.toString(16).toUpperCase();
|
1880 | 1884 | if (val.length < 2) val = "0"+val;
|
1881 | 1885 | out += val;
|
|
1908 | 1912 | asArray = !!asArray;
|
1909 | 1913 | wrap = typeof wrap != 'undefined' ? parseInt(wrap, 10) : 16;
|
1910 | 1914 | if (wrap < 1) wrap = 16;
|
1911 |
| - var out = "", lines = [], view = new Uint8Array(this.array); |
| 1915 | + var out = "", lines = [], view = new DataView(this.array); |
1912 | 1916 | for (var i=0; i<this.array.byteLength; i++) {
|
1913 | 1917 | if (i>0 && i%wrap == 0) {
|
1914 | 1918 | lines.push(out);
|
1915 | 1919 | out = "";
|
1916 | 1920 | }
|
1917 |
| - var val = view[i]; |
| 1921 | + var val = view.getUint8(i); |
1918 | 1922 | if (val > 32 && val < 127) {
|
1919 | 1923 | val = String.fromCharCode(val);
|
1920 | 1924 | } else {
|
|
0 commit comments