@@ -47,31 +47,42 @@ instance isDeserializableFloat32 :: IsDeserializable Float32 where
4747instance isDeserializableFloat64 :: IsDeserializable Float64 where
4848 get = getFloat64
4949
50- getDataView :: forall e . Deserializer -> ByteLength -> Eff (reader :: DV.Reader | e ) DV.DataView
50+ getDataView :: forall e . Deserializer -> ByteLength -> Eff (reader :: DV.Reader | e ) ( Either String DV.DataView )
5151getDataView d n = do
5252 o <- advance n d
53- return $ DV .slice o n (DV .buffer d.dv)
53+ return $ case DV .slice o n (DV .buffer d.dv) of
54+ (Just dv) -> Right dv
55+ otherwise -> Left " short read"
56+
57+ type AD t = forall e . Deserializer -> Number -> Eff (reader :: DV.Reader | e ) (Either String t )
58+
59+
60+ getTypedArray :: forall e t . Deserializer -> Number -> (DV.DataView -> t ) -> Eff (reader :: DV.Reader | e ) (Either String t )
61+ getTypedArray d sz conv = do
62+ edv <- getDataView d sz
63+ return $ case edv of
64+ Right dv -> Right $ conv dv
65+ Left err -> Left err
5466
55- type AD t = forall e . Deserializer -> Number -> Eff (reader :: DV.Reader | e ) t
5667
5768getInt8Array :: AD TA.Int8Array
58- getInt8Array d n = getDataView d n >>= return <<< TA .asInt8Array
69+ getInt8Array d n = getTypedArray d n TA .asInt8Array
5970getInt16Array :: AD TA.Int16Array
60- getInt16Array d n = getDataView d (n * 2 ) >>= return <<< TA .asInt16Array
71+ getInt16Array d n = getTypedArray d (n * 2 ) TA .asInt16Array
6172getInt32Array :: AD TA.Int32Array
62- getInt32Array d n = getDataView d (n * 4 ) >>= return <<< TA .asInt32Array
73+ getInt32Array d n = getTypedArray d (n * 4 ) TA .asInt32Array
6374getUint8Array :: AD TA.Uint8Array
64- getUint8Array d n = getDataView d n >>= return <<< TA .asUint8Array
75+ getUint8Array d n = getTypedArray d n TA .asUint8Array
6576getUint16Array :: AD TA.Uint16Array
66- getUint16Array d n = getDataView d (n * 2 ) >>= return <<< TA .asUint16Array
77+ getUint16Array d n = getTypedArray d (n * 2 ) TA .asUint16Array
6778getUint32Array :: AD TA.Uint32Array
68- getUint32Array d n = getDataView d (n * 4 ) >>= return <<< TA .asUint32Array
79+ getUint32Array d n = getTypedArray d (n * 4 ) TA .asUint32Array
6980getUint8ClampedArray :: AD TA.Uint8ClampedArray
70- getUint8ClampedArray d n = getDataView d n >>= return <<< TA .asUint8ClampedArray
81+ getUint8ClampedArray d n = getTypedArray d n TA .asUint8ClampedArray
7182getFloat32Array :: AD TA.Float32Array
72- getFloat32Array d n = getDataView d (n * 4 ) >>= return <<< TA .asFloat32Array
83+ getFloat32Array d n = getTypedArray d (n * 4 ) TA .asFloat32Array
7384getFloat64Array :: AD TA.Float64Array
74- getFloat64Array d n = getDataView d (n * 8 ) >>= return <<< TA .asFloat64Array
85+ getFloat64Array d n = getTypedArray d (n * 8 ) TA .asFloat64Array
7586
7687deserializer :: forall e . AB.ArrayBuffer -> Eff (reader :: DV.Reader | e ) Deserializer
7788deserializer ab = return $ { dv : DV .whole ab, off : 0 }
0 commit comments