forked from purescript-contrib/purescript-arraybuffer
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathArrayBuffer.purs
31 lines (24 loc) · 1.24 KB
/
ArrayBuffer.purs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
-- | This module represents the functional bindings to JavaScript's `ArrayBuffer`
-- | objects. See [MDN's spec](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer) for details.
module Data.ArrayBuffer.ArrayBuffer
( empty
, byteLength
, slice
) where
import Data.ArrayBuffer.Types (ArrayBuffer, ByteOffset, ByteLength)
import Data.Function.Uncurried (Fn3, runFn3)
import Data.Maybe (Maybe(..))
import Data.Nullable (Nullable, notNull, null)
import Data.Tuple (Tuple(..))
-- | Create an `ArrayBuffer` with the given capacity.
foreign import empty :: ByteLength -> ArrayBuffer
-- | Represents the length of an `ArrayBuffer` in bytes.
foreign import byteLength :: ArrayBuffer -> ByteLength
foreign import sliceImpl :: Fn3 ArrayBuffer (Nullable ByteOffset) (Nullable ByteOffset) ArrayBuffer
-- | Returns a new `ArrayBuffer` whose contents are a copy of this ArrayBuffer's bytes from begin, inclusive, up to end, exclusive.
slice :: ArrayBuffer -> Maybe (Tuple ByteOffset (Maybe ByteOffset)) -> ArrayBuffer
slice a mz = case mz of
Nothing -> runFn3 sliceImpl a null null
Just (Tuple s me) -> case me of
Nothing -> runFn3 sliceImpl a (notNull s) null
Just e -> runFn3 sliceImpl a (notNull s) (notNull e)