// Functions for dealing with arrays.
function newArr(n, x) {
var arr = new Array(n);
for(var i = 0; i < n; ++i) {
arr[i] = x;
}
return arr;
}
// Create all views at once; perhaps it's wasteful, but it's better than having
// to check for the right view at each read or write.
function newByteArr(n) {
// Pad the thing to multiples of 8.
var padding = 8 - n % 8;
if(padding < 8) {
n += padding;
}
return new ByteArray(new ArrayBuffer(n));
}
// Wrap a JS ArrayBuffer into a ByteArray. Truncates the array length to the
// closest multiple of 8 bytes.
function wrapByteArr(buffer) {
var diff = buffer.byteLength % 8;
if(diff != 0) {
var buffer = buffer.slice(0, buffer.byteLength-diff);
}
return new ByteArray(buffer);
}
function ByteArray(buffer) {
var views =
{ 'i8' : new Int8Array(buffer)
, 'i16': new Int16Array(buffer)
, 'i32': new Int32Array(buffer)
, 'w8' : new Uint8Array(buffer)
, 'w16': new Uint16Array(buffer)
, 'w32': new Uint32Array(buffer)
, 'f32': new Float32Array(buffer)
, 'f64': new Float64Array(buffer)
};
this['b'] = buffer;
this['v'] = views;
this['off'] = 0;
}
window['newArr'] = newArr;
window['newByteArr'] = newByteArr;
window['wrapByteArr'] = wrapByteArr;
window['ByteArray'] = ByteArray;