Skip to content

Commit 398aad5

Browse files
committed
Make slice a safe method, and delete the Unsafe module.
As requested in #discussion_r244536851
1 parent 9b48b29 commit 398aad5

File tree

4 files changed

+27
-75
lines changed

4 files changed

+27
-75
lines changed

src/Node/Buffer/Mutable.purs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ module Node.Buffer.Mutable
1515
, toArray
1616
, getAtOffset
1717
, setAtOffset
18+
, slice
1819
, size
1920
, concat
2021
, concat'
@@ -89,6 +90,10 @@ class Monad m <= MutableBuffer buf m | m -> buf, buf -> m where
8990
-- | Writes an octet in the buffer at the specified offset.
9091
setAtOffset :: Octet -> Offset -> buf -> m Unit
9192

93+
-- | Creates a new buffer slice that acts like a window on the original buffer.
94+
-- | Writing to the slice buffer updates the original buffer and vice-versa.
95+
slice :: Offset -> Offset -> buf -> buf
96+
9297
-- | Returns the size of a buffer.
9398
size :: buf -> m Int
9499

@@ -135,6 +140,7 @@ instance mutableBufferEffect :: MutableBuffer EffectBuffer Effect where
135140
toArray = toArrayImpl
136141
getAtOffset = getAtOffsetImpl
137142
setAtOffset = setAtOffsetImpl
143+
slice = sliceImpl
138144
size = sizeImpl
139145
concat = concatImpl
140146
concat' = concatImpl'
@@ -157,6 +163,7 @@ instance mutableBufferST :: MutableBuffer (STBuffer h) (ST h) where
157163
toArray = toArrayImpl
158164
getAtOffset = getAtOffsetImpl
159165
setAtOffset = setAtOffsetImpl
166+
slice = sliceImpl
160167
size = sizeImpl
161168
concat = concatImpl
162169
concat' = concatImpl'
@@ -214,6 +221,9 @@ getAtOffsetImpl o = usingFromFrozen $ Buffer.getAtOffset o
214221

215222
foreign import setAtOffsetImpl :: forall buf m. Octet -> Offset -> buf -> m Unit
216223

224+
sliceImpl :: forall buf. Offset -> Offset -> buf -> buf
225+
sliceImpl = unsafeCoerce Buffer.slice
226+
217227
sizeImpl :: forall buf m. buf -> m Int
218228
sizeImpl = usingFromFrozen Buffer.size
219229

src/Node/Buffer/Mutable/Unsafe.purs

Lines changed: 0 additions & 30 deletions
This file was deleted.

test/Test/Node/Buffer/Mutable.purs

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,9 @@ import Effect (Effect)
99
import Effect.Console (log)
1010
import Node.Buffer (BufferValueType(..))
1111
import Node.Buffer as Buffer
12-
import Node.Buffer.Mutable (class MutableBuffer, EffectBuffer, STBuffer, concat', copy, create, fill, freeze, fromArray, fromArrayBuffer, toArrayBuffer, fromString, getAtOffset, read, readString, runST, thaw, toArray, toString, write)
12+
import Node.Buffer.Mutable (class MutableBuffer, EffectBuffer, STBuffer, concat', copy, create, fill, freeze, fromArray, fromArrayBuffer, toArrayBuffer, fromString, getAtOffset, setAtOffset, read, readString, runST, thaw, toArray, toString, write, slice)
1313
import Node.Encoding (Encoding(..))
1414
import Test.Assert (assertEqual)
15-
import Test.Node.Buffer.Mutable.Unsafe as Unsafe
1615
import Type.Proxy (Proxy(..))
1716
import Unsafe.Coerce (unsafeCoerce)
1817

@@ -27,8 +26,6 @@ test = do
2726
log " - runST"
2827
testRunSt
2928

30-
Unsafe.test
31-
3229
testMutableBuffer :: forall buf m. MutableBuffer buf m =>
3330
Proxy buf -> (forall a. m a -> Effect a) -> Effect Unit
3431
testMutableBuffer _ run = do
@@ -63,6 +60,9 @@ testMutableBuffer _ run = do
6360
log " - readString"
6461
testReadString
6562

63+
log " - slice"
64+
testSlice
65+
6666
log " - copy"
6767
testCopy
6868

@@ -154,6 +154,19 @@ testMutableBuffer _ run = do
154154

155155
assertEqual {expected: "world", actual: strOut}
156156

157+
testSlice :: Effect Unit
158+
testSlice = do
159+
{bufArr, bufSliceArr} <- run do
160+
buf <- fromArray [1, 2, 3, 4] :: m buf
161+
let bufSlice = slice 1 3 buf :: buf
162+
setAtOffset 42 1 bufSlice
163+
bufArr <- toArray buf
164+
bufSliceArr <- toArray bufSlice
165+
pure {bufArr, bufSliceArr}
166+
167+
assertEqual {expected: [1, 2, 42, 4], actual: bufArr}
168+
assertEqual {expected: [2, 42], actual: bufSliceArr}
169+
157170
testCopy :: Effect Unit
158171
testCopy = do
159172
{copied, out} <- run do

test/Test/Node/Buffer/Mutable/Unsafe.purs

Lines changed: 0 additions & 41 deletions
This file was deleted.

0 commit comments

Comments
 (0)