Add MemMapFileStream. Fixes in memFiles. (#7944)
* Add MemMapFileStream * Added tests * Fixed bug in memfiles (zero index for string) * Added flush to changelog * Attempt to fix Win's nuances * Fix attempt to fix * Continue... * And again... * Reworked tests (all for win on Win) * Fixes in flush (Win) * Replace fn vars to consts * Added the attempts parameter to the flush * Replace while to for * Move to memfiles * Use Natural instead of uint * Better error messages for append mode. Handle specific cases.
This commit is contained in:
parent
f1d5e9090e
commit
bf5d619a52
5 changed files with 195 additions and 23 deletions
|
|
@ -4,9 +4,10 @@ discard """
|
|||
Half read size: 10 Data: Hello'''
|
||||
"""
|
||||
import memfiles, os
|
||||
const
|
||||
fn = "test.mmap"
|
||||
var
|
||||
mm, mm_full, mm_half: MemFile
|
||||
fn = "test.mmap"
|
||||
p: pointer
|
||||
|
||||
if fileExists(fn): removeFile(fn)
|
||||
|
|
|
|||
53
tests/stdlib/tmemmapstreams.nim
Normal file
53
tests/stdlib/tmemmapstreams.nim
Normal file
|
|
@ -0,0 +1,53 @@
|
|||
discard """
|
||||
file: "tmemmapstreams.nim"
|
||||
output: '''Created size: 10
|
||||
Position after writing: 5
|
||||
Position after writing one char: 6
|
||||
Peeked data: Hello
|
||||
Position after peeking: 0
|
||||
Readed data: Hello!
|
||||
Position after reading line: 7
|
||||
Position after setting position: 6
|
||||
Readed line: Hello!
|
||||
Position after reading line: 7'''
|
||||
"""
|
||||
import os, streams, memfiles
|
||||
const
|
||||
fn = "test.mmapstream"
|
||||
var
|
||||
mms: MemMapFileStream
|
||||
|
||||
if fileExists(fn): removeFile(fn)
|
||||
|
||||
# Create a new memory mapped file, data all zeros
|
||||
mms = newMemMapFileStream(fn, mode = fmReadWrite, fileSize = 10)
|
||||
mms.close()
|
||||
if fileExists(fn): echo "Created size: ", getFileSize(fn)
|
||||
|
||||
# write, flush, peek, read
|
||||
mms = newMemMapFileStream(fn, mode = fmReadWrite)
|
||||
let s = "Hello"
|
||||
|
||||
mms.write(s)
|
||||
mms.flush
|
||||
echo "Position after writing: ", mms.getPosition()
|
||||
mms.write('!')
|
||||
mms.flush
|
||||
echo "Position after writing one char: ", mms.getPosition()
|
||||
mms.close()
|
||||
|
||||
mms = newMemMapFileStream(fn, mode = fmRead)
|
||||
echo "Peeked data: ", mms.peekStr(s.len)
|
||||
echo "Position after peeking: ", mms.getPosition()
|
||||
echo "Readed data: ", mms.readLine
|
||||
echo "Position after reading line: ", mms.getPosition()
|
||||
mms.setPosition(mms.getPosition() - 1)
|
||||
echo "Position after setting position: ", mms.getPosition()
|
||||
|
||||
mms.setPosition(0)
|
||||
echo "Readed line: ", mms.readLine
|
||||
echo "Position after reading line: ", mms.getPosition()
|
||||
|
||||
mms.close()
|
||||
|
||||
if fileExists(fn): removeFile(fn)
|
||||
Loading…
Add table
Add a link
Reference in a new issue