/* * Read in the data for a structured clone version 1 ArrayBuffer, performing * endianness-conversion while reading. */ bool JSStructuredCloneReader::readV1ArrayBuffer(uint32_t arrayType, uint32_t nelems, Value *vp) { JS_ASSERT(arrayType <= TypedArray::TYPE_UINT8_CLAMPED); uint32_t nbytes = nelems * bytesPerTypedArrayElement(arrayType); JSObject *obj = ArrayBufferObject::create(context(), nbytes); if (!obj) return false; vp->setObject(*obj); ArrayBufferObject &buffer = obj->asArrayBuffer(); JS_ASSERT(buffer.byteLength() == nbytes); switch (arrayType) { case TypedArray::TYPE_INT8: case TypedArray::TYPE_UINT8: case TypedArray::TYPE_UINT8_CLAMPED: return in.readArray((uint8_t*) buffer.dataPointer(), nelems); case TypedArray::TYPE_INT16: case TypedArray::TYPE_UINT16: return in.readArray((uint16_t*) buffer.dataPointer(), nelems); case TypedArray::TYPE_INT32: case TypedArray::TYPE_UINT32: case TypedArray::TYPE_FLOAT32: return in.readArray((uint32_t*) buffer.dataPointer(), nelems); case TypedArray::TYPE_FLOAT64: return in.readArray((uint64_t*) buffer.dataPointer(), nelems); default: JS_NOT_REACHED("unknown TypedArray type"); return false; } }
bool JSStructuredCloneReader::readArrayBuffer(uint32_t nbytes, Value *vp) { JSObject *obj = ArrayBufferObject::create(context(), nbytes); if (!obj) return false; vp->setObject(*obj); ArrayBufferObject &buffer = obj->asArrayBuffer(); JS_ASSERT(buffer.byteLength() == nbytes); return in.readArray(buffer.dataPointer(), nbytes); }