diff options
| -rw-r--r-- | buffer.sml | 49 |
1 files changed, 24 insertions, 25 deletions
@@ -1,20 +1,20 @@ structure Buffer = struct - fun append (a : Word8ArraySlice.slice) (b : Word8VectorSlice.slice) : Word8ArraySlice.slice = + fun append (a : Word8ArraySlice.slice) (b : Word8ArraySlice.slice) : Word8ArraySlice.slice = let - val bLen = Word8VectorSlice.length b + val bLen = Word8ArraySlice.length b val (base, i, aLen) = Word8ArraySlice.base a val baseLen = Word8Array.length base in if i + aLen + bLen <= baseLen then - (Word8ArraySlice.copyVec { src = b, dst = base, di = i + aLen } ; + (Word8ArraySlice.copy { src = b, dst = base, di = i + aLen } ; Word8ArraySlice.slice (base, i, SOME (aLen + bLen))) else let val newBuf = Word8Array.array (baseLen * 2 + bLen, Word8.fromInt 0) in Word8ArraySlice.copy { src = a, dst = newBuf, di = 0 } ; - Word8ArraySlice.copyVec { src = b, dst = newBuf, di = aLen } ; + Word8ArraySlice.copy { src = b, dst = newBuf, di = aLen } ; Word8ArraySlice.slice (newBuf, 0, SOME (aLen + bLen)) end end @@ -24,27 +24,26 @@ struct in (BinIO.mkOutstream (BinIO.StreamIO.mkOutstream - (BinPrimIO.augmentWriter - (BinPrimIO.WR - { name = "buffer" - , chunkSize = 1 - , writeVec = - SOME - (fn a => - (buffer := append (!buffer) a ; - Word8VectorSlice.length a)) - , writeArr = NONE - , writeVecNB = NONE - , writeArrNB = NONE - , block = SOME (fn () => ()) - , canOutput = SOME (fn () => true) - , getPos = NONE - , setPos = NONE - , endPos = NONE - , verifyPos = NONE - , close = fn () => () - , ioDesc = NONE - }), + (BinPrimIO.WR + { name = "buffer" + , chunkSize = 1 + , writeVec = NONE + , writeArr = + SOME + (fn a => + (buffer := append (!buffer) a ; + Word8ArraySlice.length a)) + , writeVecNB = NONE + , writeArrNB = NONE + , block = NONE + , canOutput = NONE + , getPos = NONE + , setPos = NONE + , endPos = NONE + , verifyPos = NONE + , close = fn () => () + , ioDesc = NONE + }, IO.NO_BUF)), buffer) end |
