Skip to content

Commit 17c798f

Browse files
committed
Refactoring
1 parent 87522f9 commit 17c798f

File tree

7 files changed

+37
-52
lines changed

7 files changed

+37
-52
lines changed

bower.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
"output"
1212
],
1313
"devDependencies": {
14-
"purescript-transformers": "*",
1514
"purescript-quickcheck": "*"
1615
}
1716
}

src/Data/ArrayBuffer.purs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,10 @@
11
module Data.ArrayBuffer where
22

33
import Data.Function
4+
import Data.ArrayBuffer.Types
45

56
foreign import data ArrayBuffer :: *
67

7-
type ByteOffset = Number
8-
type ByteLength = Number
9-
108
instance showArrayBuffer :: Show ArrayBuffer where
119
show = showImpl
1210

src/Data/ArrayBuffer/DataView.purs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
module Data.ArrayBuffer.DataView where
22

3-
import Data.ArrayBuffer(ArrayBuffer(), ByteOffset(), ByteLength())
3+
import Data.ArrayBuffer(ArrayBuffer())
44
import Data.ArrayBuffer.Types
55
import Data.Function
66
import Control.Monad.Eff
@@ -64,13 +64,13 @@ foreign import data Writer :: !
6464
foreign import setInt8
6565
"""
6666
function setInt8(v) {
67-
return function(o) {
68-
return function(n) {
67+
return function(n) {
68+
return function(o) {
6969
return function() {
7070
v.setInt8(o, n);
7171
};
7272
};
7373
};
7474
}
75-
""" :: forall e. DataView -> ByteOffset -> Int8 -> Eff (writer :: Writer | e) Unit
75+
""" :: forall e. DataView -> Int8 -> ByteOffset -> Eff (writer :: Writer | e) Unit
7676

src/Data/ArrayBuffer/Deserializer.purs

Lines changed: 4 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -4,29 +4,17 @@ import Data.ArrayBuffer.Types
44
import qualified Data.ArrayBuffer as AB
55
import qualified Data.ArrayBuffer.DataView as DV
66
import Data.Function
7+
import Data.ArrayBuffer.Advancer
78
import Control.Monad.Eff
89

9-
foreign import advance
10-
"""
11-
function advance(d) {
12-
return function(s) {
13-
return function() {
14-
d.off += s;
15-
};
16-
};
17-
}
18-
""" :: forall e. Deserializer -> AB.ByteOffset -> Eff (reader :: DV.Reader | e) Unit
19-
newtype Deserializer = Deserializer { dv :: DV.DataView, off :: AB.ByteOffset }
10+
type Deserializer = Advancer
2011

2112
class IsDeserializable a where
2213
get :: forall e. Deserializer -> Eff (reader :: DV.Reader | e) a
2314

2415
instance isDeserializableInt8 :: IsDeserializable Int8 where
25-
get ds@(Deserializer d) = do
26-
v <- DV.getInt8 d.dv d.off
27-
advance ds 1
28-
return v
16+
get d = advance 1 d >>= DV.getInt8 d.dv
2917

3018
deserializer :: forall e. AB.ArrayBuffer -> Eff (reader :: DV.Reader | e) Deserializer
31-
deserializer ab = return $ Deserializer { dv : DV.whole ab, off : 0 }
19+
deserializer ab = return $ { dv : DV.whole ab, off : 0 }
3220

src/Data/ArrayBuffer/Serializer.purs

Lines changed: 9 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -3,38 +3,26 @@ module Data.ArrayBuffer.Serializer where
33
import Data.ArrayBuffer.Types
44
import qualified Data.ArrayBuffer as AB
55
import qualified Data.ArrayBuffer.DataView as DV
6+
import Data.ArrayBuffer.Advancer
67
import Data.Function
78
import Control.Monad.Eff
89

9-
foreign import advance
10-
"""
11-
function advance(d) {
12-
return function(s) {
13-
return function() {
14-
d.off += s;
15-
};
16-
};
17-
}
18-
""" :: forall e. Serializer -> AB.ByteOffset -> Eff (writer :: DV.Writer | e) Unit
19-
20-
newtype Serializer = Serializer { dv :: DV.DataView, off :: AB.ByteOffset }
10+
type Serializer = Advancer
2111

2212
class IsSerializable a where
2313
put :: forall e. Serializer -> a -> Eff (writer :: DV.Writer | e) Unit
2414

2515
instance isSerializableInt8 :: IsSerializable Int8 where
26-
put ss@(Serializer s) v = do
27-
DV.setInt8 s.dv s.off v
28-
advance ss 1
16+
put s v = advance 1 s >>= DV.setInt8 s.dv v
2917

30-
serializer :: forall e. AB.ByteLength -> Eff (writer :: DV.Writer | e) Serializer
31-
serializer l = return $ Serializer { dv : DV.whole $ AB.create l, off : 0 }
18+
serializer :: forall e. ByteLength -> Eff (writer :: DV.Writer | e) Serializer
19+
serializer l = return $ { dv : DV.whole $ AB.create l, off : 0 }
3220

3321
close :: Serializer -> forall e. Eff (writer :: DV.Writer | e) AB.ArrayBuffer
34-
close (Serializer s) = return $ AB.slice 0 s.off (DV.buffer s.dv)
22+
close s = return $ AB.slice 0 s.off (DV.buffer s.dv)
3523

36-
serialized :: forall e. (Serializer -> Eff (writer :: DV.Writer | e) Unit) -> Eff (writer :: DV.Writer | e) AB.ArrayBuffer
37-
serialized f = do
38-
s <- serializer 1000
24+
serialized :: forall e. ByteLength -> (Serializer -> Eff (writer :: DV.Writer | e) Unit) -> Eff (writer :: DV.Writer | e) AB.ArrayBuffer
25+
serialized n f = do
26+
s <- serializer n
3927
f s
4028
close s

src/Data/ArrayBuffer/Types.purs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
module Data.ArrayBuffer.Types where
22

3+
type ByteOffset = Number
4+
type ByteLength = Number
5+
6+
37
newtype Int8 = Int8 Number
48
--newtype Uint8
59
--newtype Uint8Clamped

test/Main.purs

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ import qualified Data.ArrayBuffer.Deserializer as D
1212
import Control.Monad.Eff
1313
import Control.Monad.Eff.Random
1414
import Control.Monad.Eff.Exception
15-
import Control.Monad.Trans
1615
import Math
1716

1817
instance eqInt8 :: Eq Int8 where
@@ -122,14 +121,23 @@ main = do
122121
let i8 = TA.asInt8Array dv
123122
((Just 2) == i8 `TA.at` 1) && (Nothing == i8 `TA.at` 4) && (Nothing == i8 `TA.at` (-1))
124123

125-
quickCheck serdes
124+
quickCheck' 5000 serdes
126125

127-
serdes :: M4I8 -> Boolean
128-
serdes v0 = forcePure $ do
129-
a <- S.serialized $ \s -> S.put s v0
126+
serdes :: M4I8 -> M4I8 -> M4I8 -> M4I8 -> Boolean
127+
serdes m0 m1 m2 m3 = forcePure $ do
128+
a <- S.serialized 256 $ \s -> do
129+
let p = S.put s
130+
p m0
131+
p m1
132+
p m2
133+
p m3
130134
d <- D.deserializer a
131-
v1 <- D.get d
132-
return $ v0 == v1
135+
let g = D.get d
136+
m0' <- g
137+
m1' <- g
138+
m2' <- g
139+
m3' <- g
140+
return $ m0 == m0' && m1 == m1' && m2 == m2' && m3 == m3'
133141

134142

135143
assert :: Boolean -> QC Unit

0 commit comments

Comments
 (0)