disable StringStream for JS (needs copyMem)
This commit is contained in:
parent
9604444d09
commit
0d45c17388
2 changed files with 60 additions and 60 deletions
|
|
@ -306,67 +306,67 @@ proc peekLine*(s: Stream): TaintedString =
|
||||||
defer: setPosition(s, pos)
|
defer: setPosition(s, pos)
|
||||||
result = readLine(s)
|
result = readLine(s)
|
||||||
|
|
||||||
type
|
|
||||||
StringStream* = ref StringStreamObj ## a stream that encapsulates a string
|
|
||||||
StringStreamObj* = object of StreamObj
|
|
||||||
data*: string
|
|
||||||
pos: int
|
|
||||||
|
|
||||||
{.deprecated: [PStringStream: StringStream, TStringStream: StringStreamObj].}
|
|
||||||
|
|
||||||
proc ssAtEnd(s: Stream): bool =
|
|
||||||
var s = StringStream(s)
|
|
||||||
return s.pos >= s.data.len
|
|
||||||
|
|
||||||
proc ssSetPosition(s: Stream, pos: int) =
|
|
||||||
var s = StringStream(s)
|
|
||||||
s.pos = clamp(pos, 0, s.data.len)
|
|
||||||
|
|
||||||
proc ssGetPosition(s: Stream): int =
|
|
||||||
var s = StringStream(s)
|
|
||||||
return s.pos
|
|
||||||
|
|
||||||
proc ssReadData(s: Stream, buffer: pointer, bufLen: int): int =
|
|
||||||
var s = StringStream(s)
|
|
||||||
result = min(bufLen, s.data.len - s.pos)
|
|
||||||
if result > 0:
|
|
||||||
copyMem(buffer, addr(s.data[s.pos]), result)
|
|
||||||
inc(s.pos, result)
|
|
||||||
|
|
||||||
proc ssPeekData(s: Stream, buffer: pointer, bufLen: int): int =
|
|
||||||
var s = StringStream(s)
|
|
||||||
result = min(bufLen, s.data.len - s.pos)
|
|
||||||
if result > 0:
|
|
||||||
copyMem(buffer, addr(s.data[s.pos]), result)
|
|
||||||
|
|
||||||
proc ssWriteData(s: Stream, buffer: pointer, bufLen: int) =
|
|
||||||
var s = StringStream(s)
|
|
||||||
if bufLen <= 0:
|
|
||||||
return
|
|
||||||
if s.pos + bufLen > s.data.len:
|
|
||||||
setLen(s.data, s.pos + bufLen)
|
|
||||||
copyMem(addr(s.data[s.pos]), buffer, bufLen)
|
|
||||||
inc(s.pos, bufLen)
|
|
||||||
|
|
||||||
proc ssClose(s: Stream) =
|
|
||||||
var s = StringStream(s)
|
|
||||||
s.data = nil
|
|
||||||
|
|
||||||
proc newStringStream*(s: string = ""): StringStream =
|
|
||||||
## creates a new stream from the string `s`.
|
|
||||||
new(result)
|
|
||||||
result.data = s
|
|
||||||
result.pos = 0
|
|
||||||
result.closeImpl = ssClose
|
|
||||||
result.atEndImpl = ssAtEnd
|
|
||||||
result.setPositionImpl = ssSetPosition
|
|
||||||
result.getPositionImpl = ssGetPosition
|
|
||||||
result.readDataImpl = ssReadData
|
|
||||||
result.peekDataImpl = ssPeekData
|
|
||||||
result.writeDataImpl = ssWriteData
|
|
||||||
|
|
||||||
when not defined(js):
|
when not defined(js):
|
||||||
|
|
||||||
|
type
|
||||||
|
StringStream* = ref StringStreamObj ## a stream that encapsulates a string
|
||||||
|
StringStreamObj* = object of StreamObj
|
||||||
|
data*: string
|
||||||
|
pos: int
|
||||||
|
|
||||||
|
{.deprecated: [PStringStream: StringStream, TStringStream: StringStreamObj].}
|
||||||
|
|
||||||
|
proc ssAtEnd(s: Stream): bool =
|
||||||
|
var s = StringStream(s)
|
||||||
|
return s.pos >= s.data.len
|
||||||
|
|
||||||
|
proc ssSetPosition(s: Stream, pos: int) =
|
||||||
|
var s = StringStream(s)
|
||||||
|
s.pos = clamp(pos, 0, s.data.len)
|
||||||
|
|
||||||
|
proc ssGetPosition(s: Stream): int =
|
||||||
|
var s = StringStream(s)
|
||||||
|
return s.pos
|
||||||
|
|
||||||
|
proc ssReadData(s: Stream, buffer: pointer, bufLen: int): int =
|
||||||
|
var s = StringStream(s)
|
||||||
|
result = min(bufLen, s.data.len - s.pos)
|
||||||
|
if result > 0:
|
||||||
|
copyMem(buffer, addr(s.data[s.pos]), result)
|
||||||
|
inc(s.pos, result)
|
||||||
|
|
||||||
|
proc ssPeekData(s: Stream, buffer: pointer, bufLen: int): int =
|
||||||
|
var s = StringStream(s)
|
||||||
|
result = min(bufLen, s.data.len - s.pos)
|
||||||
|
if result > 0:
|
||||||
|
copyMem(buffer, addr(s.data[s.pos]), result)
|
||||||
|
|
||||||
|
proc ssWriteData(s: Stream, buffer: pointer, bufLen: int) =
|
||||||
|
var s = StringStream(s)
|
||||||
|
if bufLen <= 0:
|
||||||
|
return
|
||||||
|
if s.pos + bufLen > s.data.len:
|
||||||
|
setLen(s.data, s.pos + bufLen)
|
||||||
|
copyMem(addr(s.data[s.pos]), buffer, bufLen)
|
||||||
|
inc(s.pos, bufLen)
|
||||||
|
|
||||||
|
proc ssClose(s: Stream) =
|
||||||
|
var s = StringStream(s)
|
||||||
|
s.data = nil
|
||||||
|
|
||||||
|
proc newStringStream*(s: string = ""): StringStream =
|
||||||
|
## creates a new stream from the string `s`.
|
||||||
|
new(result)
|
||||||
|
result.data = s
|
||||||
|
result.pos = 0
|
||||||
|
result.closeImpl = ssClose
|
||||||
|
result.atEndImpl = ssAtEnd
|
||||||
|
result.setPositionImpl = ssSetPosition
|
||||||
|
result.getPositionImpl = ssGetPosition
|
||||||
|
result.readDataImpl = ssReadData
|
||||||
|
result.peekDataImpl = ssPeekData
|
||||||
|
result.writeDataImpl = ssWriteData
|
||||||
|
|
||||||
type
|
type
|
||||||
FileStream* = ref FileStreamObj ## a stream that encapsulates a `File`
|
FileStream* = ref FileStreamObj ## a stream that encapsulates a `File`
|
||||||
FileStreamObj* = object of Stream
|
FileStreamObj* = object of Stream
|
||||||
|
|
|
||||||
|
|
@ -336,7 +336,7 @@ proc readLine(f: File, line: var StaticStr): bool =
|
||||||
if c == 10'i32: break # LF
|
if c == 10'i32: break # LF
|
||||||
if c == 13'i32: # CR
|
if c == 13'i32: # CR
|
||||||
c = c_fgetc(f) # is the next char LF?
|
c = c_fgetc(f) # is the next char LF?
|
||||||
if c != 10'i32: ungetc(c, f) # no, put the character back
|
if c != 10'i32: discard c_ungetc(c, f) # no, put the character back
|
||||||
break
|
break
|
||||||
add line, chr(int(c))
|
add line, chr(int(c))
|
||||||
result = true
|
result = true
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue