Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 define([], function () { | |
|
abarth-chromium
2014/07/23 02:13:51
I think you can just omit [] when it's empty.
hansmuller
2014/07/23 18:06:35
Done.
| |
| 6 | |
| 7 function Buffer(sizeOrArrayBuffer) { | |
| 8 if (sizeOrArrayBuffer instanceof ArrayBuffer) | |
| 9 this.arrayBuffer = sizeOrArrayBuffer; | |
| 10 else | |
| 11 this.arrayBuffer = new ArrayBuffer(sizeOrArrayBuffer); | |
| 12 | |
| 13 this.dataView = new DataView(this.arrayBuffer); | |
| 14 this.byteLength = this.arrayBuffer.byteLength; | |
|
yzshen1
2014/07/23 07:26:55
Maybe we could make a getter which simply reads th
hansmuller
2014/07/23 18:06:35
Good point.
| |
| 15 this.next = 0; | |
| 16 } | |
| 17 | |
| 18 var kHostIsLittleEndian = (function () { | |
|
yzshen1
2014/07/23 07:26:55
(Not familiar with JS style.)
Maybe we should ord
hansmuller
2014/07/23 18:06:35
OK.
| |
| 19 var endianArrayBuffer = new ArrayBuffer(2); | |
| 20 var endianUint8Array = new Uint8Array(endianArrayBuffer); | |
| 21 var endianUint16Array = new Uint16Array(endianArrayBuffer); | |
| 22 endianUint16Array[0] = 1; | |
| 23 return endianUint8Array[0] == 1; | |
| 24 })(); | |
| 25 | |
| 26 var kHighWordMultiplier = 0x100000000; | |
| 27 | |
| 28 function getInt64(dataView, byteOffset, value) { | |
| 29 var lo, hi; | |
| 30 if (kHostIsLittleEndian) { | |
| 31 lo = dataView.getUint32(byteOffset, kHostIsLittleEndian); | |
| 32 hi = dataView.getInt32(byteOffset + 4, kHostIsLittleEndian); | |
| 33 } else { | |
| 34 hi = dataView.getInt32(byteOffset, kHostIsLittleEndian); | |
| 35 lo = dataView.getUint32(byteOffset + 4, kHostIsLittleEndian); | |
| 36 } | |
| 37 return lo + hi * kHighWordMultiplier; | |
| 38 } | |
| 39 | |
| 40 function getUint64(dataView, byteOffset, value) { | |
| 41 var lo, hi; | |
| 42 if (kHostIsLittleEndian) { | |
| 43 lo = dataView.getUint32(byteOffset, kHostIsLittleEndian); | |
| 44 hi = dataView.getUint32(byteOffset + 4, kHostIsLittleEndian); | |
| 45 } else { | |
| 46 hi = dataView.getUint32(byteOffset, kHostIsLittleEndian); | |
| 47 lo = dataView.getUint32(byteOffset + 4, kHostIsLittleEndian); | |
| 48 } | |
| 49 return lo + hi * kHighWordMultiplier; | |
| 50 } | |
| 51 | |
| 52 function setInt64(dataView, byteOffset, value) { | |
| 53 var hi = Math.floor(value / kHighWordMultiplier); | |
| 54 if (kHostIsLittleEndian) { | |
| 55 dataView.setInt32(byteOffset, value, kHostIsLittleEndian); | |
| 56 dataView.setInt32(byteOffset + 4, hi, kHostIsLittleEndian); | |
| 57 } else { | |
| 58 dataView.setInt32(byteOffset, hi, kHostIsLittleEndian); | |
| 59 dataView.setInt32(byteOffset + 4, value, kHostIsLittleEndian); | |
| 60 } | |
| 61 } | |
| 62 | |
| 63 function setUint64(dataView, byteOffset, value) { | |
| 64 var hi = (value / kHighWordMultiplier) | 0; | |
| 65 if (kHostIsLittleEndian) { | |
| 66 dataView.setInt32(byteOffset, value, kHostIsLittleEndian); | |
| 67 dataView.setInt32(byteOffset + 4, hi, kHostIsLittleEndian); | |
| 68 } else { | |
| 69 dataView.setInt32(byteOffset, hi, kHostIsLittleEndian); | |
| 70 dataView.setInt32(byteOffset + 4, value, kHostIsLittleEndian); | |
| 71 } | |
| 72 } | |
| 73 | |
| 74 Buffer.prototype.alloc = function(size) { | |
| 75 var pointer = this.next; | |
| 76 this.next += size; | |
| 77 if (this.next > this.byteLength) { | |
| 78 var newSize = (1.5 * (this.byteLength + size)) | 0; | |
| 79 this.grow(newSize); | |
| 80 } | |
| 81 return pointer; | |
| 82 }; | |
| 83 | |
| 84 function copyArrayBuffer(dstArrayBuffer, srcArrayBuffer) { | |
| 85 (new Uint8Array(dstArrayBuffer)).set(new Uint8Array(srcArrayBuffer)); | |
| 86 } | |
| 87 | |
| 88 Buffer.prototype.grow = function(size) { | |
| 89 var newArrayBuffer = new ArrayBuffer(size); | |
| 90 copyArrayBuffer(newArrayBuffer, this.arrayBuffer); | |
| 91 this.arrayBuffer = newArrayBuffer; | |
| 92 this.dataView = new DataView(this.arrayBuffer); | |
| 93 this.byteLength = size; | |
| 94 }; | |
| 95 | |
| 96 Buffer.prototype.trim = function() { | |
| 97 this.arrayBuffer = this.arrayBuffer.slice(0, this.next); | |
| 98 this.dataView = new DataView(this.arrayBuffer); | |
| 99 this.byteLength = this.next; | |
| 100 }; | |
| 101 | |
| 102 Buffer.prototype.getUint8 = function(offset) { | |
| 103 return this.dataView.getUint8(offset); | |
| 104 } | |
| 105 Buffer.prototype.getUint16 = function(offset) { | |
| 106 return this.dataView.getUint16(offset, kHostIsLittleEndian); | |
| 107 } | |
| 108 Buffer.prototype.getUint32 = function(offset) { | |
| 109 return this.dataView.getUint32(offset, kHostIsLittleEndian); | |
| 110 } | |
| 111 Buffer.prototype.getUint64 = function(offset) { | |
| 112 return getUint64(this.dataView, offset, kHostIsLittleEndian); | |
|
yzshen1
2014/07/23 07:26:55
Does it make sense to merge the impl of getUint64(
hansmuller
2014/07/23 18:06:35
Yes, that makes sense.
| |
| 113 } | |
| 114 | |
| 115 Buffer.prototype.getInt8 = function(offset) { | |
| 116 return this.dataView.getInt8(offset); | |
| 117 } | |
| 118 Buffer.prototype.getInt16 = function(offset) { | |
| 119 return this.dataView.getInt16(offset, kHostIsLittleEndian); | |
| 120 } | |
| 121 Buffer.prototype.getInt32 = function(offset) { | |
| 122 return this.dataView.getInt32(offset, kHostIsLittleEndian); | |
| 123 } | |
| 124 Buffer.prototype.getInt64 = function(offset) { | |
| 125 return getInt64(this.dataView, offset, kHostIsLittleEndian); | |
| 126 } | |
| 127 | |
| 128 Buffer.prototype.getFloat32 = function(offset) { | |
| 129 return this.dataView.getFloat32(offset, kHostIsLittleEndian); | |
| 130 } | |
| 131 Buffer.prototype.getFloat64 = function(offset) { | |
| 132 return this.dataView.getFloat64(offset, kHostIsLittleEndian); | |
| 133 } | |
| 134 | |
| 135 Buffer.prototype.setUint8 = function(offset, value) { | |
| 136 this.dataView.setUint8(offset, value); | |
| 137 } | |
| 138 Buffer.prototype.setUint16 = function(offset, value) { | |
| 139 this.dataView.setUint16(offset, value, kHostIsLittleEndian); | |
| 140 } | |
| 141 Buffer.prototype.setUint32 = function(offset, value) { | |
| 142 this.dataView.setUint32(offset, value, kHostIsLittleEndian); | |
| 143 } | |
| 144 Buffer.prototype.setUint64 = function(offset, value) { | |
| 145 setUint64(this.dataView, offset, value, kHostIsLittleEndian); | |
| 146 } | |
| 147 | |
| 148 Buffer.prototype.setInt8 = function(offset, value) { | |
| 149 this.dataView.setInt8(offset, value); | |
| 150 } | |
| 151 Buffer.prototype.setInt16 = function(offset, value) { | |
| 152 this.dataView.setInt16(offset, value, kHostIsLittleEndian); | |
| 153 } | |
| 154 Buffer.prototype.setInt32 = function(offset, value) { | |
| 155 this.dataView.setInt32(offset, value, kHostIsLittleEndian); | |
| 156 } | |
| 157 Buffer.prototype.setInt64 = function(offset, value) { | |
| 158 setInt64(this.dataView, offset, value, kHostIsLittleEndian); | |
| 159 } | |
| 160 | |
| 161 Buffer.prototype.setFloat32 = function(offset, value) { | |
| 162 this.dataView.setFloat32(offset, value, kHostIsLittleEndian); | |
| 163 } | |
| 164 Buffer.prototype.setFloat64 = function(offset, value) { | |
| 165 this.dataView.setFloat64(offset, value, kHostIsLittleEndian); | |
| 166 } | |
| 167 | |
| 168 return Buffer; | |
|
Matt Perry
2014/07/23 00:39:38
I think you should return a dictionary object that
abarth-chromium
2014/07/23 02:13:51
+1
hansmuller
2014/07/23 18:06:35
I didn't want user s of this module to have to wri
| |
| 169 }); | |
| OLD | NEW |