ghcjs-base-stub-0.3.0.1: ghcjs-base/JavaScript/TypedArray/ArrayBuffer.hs
module JavaScript.TypedArray.ArrayBuffer
( ArrayBuffer
, MutableArrayBuffer
, freeze, unsafeFreeze
, thaw, unsafeThaw
, byteLength
) where
import JavaScript.TypedArray.ArrayBuffer.Internal
import GHC.Exts
import GHC.Types
create :: Int -> IO MutableArrayBuffer
create n = fmap SomeArrayBuffer (IO (js_create n))
{-# INLINE create #-}
{- | Create an immutable 'ArrayBuffer' by copying a 'MutableArrayBuffer' -}
freeze :: MutableArrayBuffer -> IO ArrayBuffer
freeze (SomeArrayBuffer b) = fmap SomeArrayBuffer (IO (js_slice1 0 b))
{-# INLINE freeze #-}
{- | Create an immutable 'ArrayBuffer' from a 'MutableArrayBuffer' without
copying. The result shares the buffer with the argument, not modify
the data in the 'MutableArrayBuffer' after freezing
-}
unsafeFreeze :: MutableArrayBuffer -> IO ArrayBuffer
unsafeFreeze (SomeArrayBuffer b) = pure (SomeArrayBuffer b)
{-# INLINE unsafeFreeze #-}
{- | Create a 'MutableArrayBuffer' by copying an immutable 'ArrayBuffer' -}
thaw :: ArrayBuffer -> IO MutableArrayBuffer
thaw (SomeArrayBuffer b) = fmap SomeArrayBuffer (IO (js_slice1 0 b))
{-# INLINE thaw #-}
unsafeThaw :: ArrayBuffer -> IO MutableArrayBuffer
unsafeThaw (SomeArrayBuffer b) = pure (SomeArrayBuffer b)
{-# INLINE unsafeThaw #-}
slice :: Int -> Maybe Int -> SomeArrayBuffer any -> SomeArrayBuffer any
slice begin (Just end) b = js_slice_imm begin end b
slice begin _ b = js_slice1_imm begin b
{-# INLINE slice #-}
byteLength :: SomeArrayBuffer any -> Int
byteLength b = js_byteLength b
{-# INLINE byteLength #-}