1 // Copyright 2018 The Go Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file.
15 int8Array
= Global().Get("Int8Array")
16 int16Array
= Global().Get("Int16Array")
17 int32Array
= Global().Get("Int32Array")
18 uint8Array
= Global().Get("Uint8Array")
19 uint16Array
= Global().Get("Uint16Array")
20 uint32Array
= Global().Get("Uint32Array")
21 float32Array
= Global().Get("Float32Array")
22 float64Array
= Global().Get("Float64Array")
25 // TypedArray represents a JavaScript typed array.
26 type TypedArray
struct {
30 // Release frees up resources allocated for the typed array.
31 // The typed array and its buffer must not be accessed after calling Release.
32 func (a TypedArray
) Release() {
33 openTypedArraysMutex
.Lock()
34 delete(openTypedArrays
, a
)
35 openTypedArraysMutex
.Unlock()
39 openTypedArraysMutex sync
.Mutex
40 openTypedArrays
= make(map[TypedArray
]interface{})
43 // TypedArrayOf returns a JavaScript typed array backed by the slice's underlying array.
45 // The supported types are []int8, []int16, []int32, []uint8, []uint16, []uint32, []float32 and []float64.
46 // Passing an unsupported value causes a panic.
48 // TypedArray.Release must be called to free up resources when the typed array will not be used any more.
49 func TypedArrayOf(slice
interface{}) TypedArray
{
50 a
:= TypedArray
{typedArrayOf(slice
)}
51 openTypedArraysMutex
.Lock()
52 openTypedArrays
[a
] = slice
53 openTypedArraysMutex
.Unlock()
57 func typedArrayOf(slice
interface{}) Value
{
58 switch slice
:= slice
.(type) {
61 return int8Array
.New(memory
.Get("buffer"), 0, 0)
63 return int8Array
.New(memory
.Get("buffer"), unsafe
.Pointer(&slice
[0]), len(slice
))
66 return int16Array
.New(memory
.Get("buffer"), 0, 0)
68 return int16Array
.New(memory
.Get("buffer"), unsafe
.Pointer(&slice
[0]), len(slice
))
71 return int32Array
.New(memory
.Get("buffer"), 0, 0)
73 return int32Array
.New(memory
.Get("buffer"), unsafe
.Pointer(&slice
[0]), len(slice
))
76 return uint8Array
.New(memory
.Get("buffer"), 0, 0)
78 return uint8Array
.New(memory
.Get("buffer"), unsafe
.Pointer(&slice
[0]), len(slice
))
81 return uint16Array
.New(memory
.Get("buffer"), 0, 0)
83 return uint16Array
.New(memory
.Get("buffer"), unsafe
.Pointer(&slice
[0]), len(slice
))
86 return uint32Array
.New(memory
.Get("buffer"), 0, 0)
88 return uint32Array
.New(memory
.Get("buffer"), unsafe
.Pointer(&slice
[0]), len(slice
))
91 return float32Array
.New(memory
.Get("buffer"), 0, 0)
93 return float32Array
.New(memory
.Get("buffer"), unsafe
.Pointer(&slice
[0]), len(slice
))
96 return float64Array
.New(memory
.Get("buffer"), 0, 0)
98 return float64Array
.New(memory
.Get("buffer"), unsafe
.Pointer(&slice
[0]), len(slice
))
100 panic("TypedArrayOf: not a supported slice")