Skip to content

Commit c5743cd

Browse files
authored
use_typed_memory_view
use_typed_memory_view
1 parent 12e4cd1 commit c5743cd

File tree

1 file changed

+20
-16
lines changed

1 file changed

+20
-16
lines changed

src/convert.cpp

Lines changed: 20 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -128,25 +128,29 @@ namespace pyjs
128128
TypedArrayBuffer::TypedArrayBuffer(
129129
em::val js_array, const std::string & format_descriptor
130130
)
131-
: m_size(js_array["length"].as<unsigned>()),
132-
m_bytes_per_element(js_array["BYTES_PER_ELEMENT"].as<unsigned>()),
133-
m_format_descriptor(format_descriptor),
134-
m_data( new uint8_t[m_size * m_bytes_per_element] )
131+
: m_size(js_array["length"].as<unsigned>()),
132+
m_bytes_per_element(js_array["BYTES_PER_ELEMENT"].as<unsigned>()),
133+
m_format_descriptor(format_descriptor),
134+
m_data(new uint8_t[m_size * m_bytes_per_element])
135135
{
136-
em::val js_array_buffer = js_array["buffer"].as<em::val>();
137-
138-
const unsigned byte_offset = js_array["byteOffset"].as<em::val>().as<unsigned>();
139-
140-
// this is a uint8 view of the array
136+
// Get the ArrayBuffer backing the JS TypedArray
137+
em::val js_array_buffer = js_array["buffer"];
138+
139+
// Offset within the ArrayBuffer
140+
const unsigned byte_offset = js_array["byteOffset"].as<unsigned>();
141+
142+
// Create a Uint8Array view of the source JS array
141143
em::val js_uint8array = em::val::global("Uint8Array")
142144
.new_(js_array_buffer, byte_offset, m_size * m_bytes_per_element);
143-
144-
em::val wasm_heap_allocated = js_uint8array["constructor"].new_(
145-
em::val::module_property("HEAPU8")["buffer"],
146-
reinterpret_cast<uintptr_t>(m_data),
147-
m_size * m_bytes_per_element
148-
);
149-
wasm_heap_allocated.call<void>("set", js_uint8array);
145+
146+
// Create a typed_memory_view for the C++ buffer
147+
em::val cpp_view = em::val(emscripten::typed_memory_view(
148+
m_size * m_bytes_per_element,
149+
m_data
150+
));
151+
152+
// Copy data from JS array into C++ buffer
153+
cpp_view.call<void>("set", js_uint8array);
150154
}
151155

152156
TypedArrayBuffer::~TypedArrayBuffer(){

0 commit comments

Comments
 (0)