Current File : //home/tradevaly/www/node_modules/restructure/src/String.coffee |
{Number:NumberT} = require './Number'
utils = require './utils'
class StringT
constructor: (@length, @encoding = 'ascii') ->
decode: (stream, parent) ->
length = if @length?
utils.resolveLength @length, stream, parent
else
{buffer, length, pos} = stream
while pos < length and buffer[pos] isnt 0x00
++pos
pos - stream.pos
encoding = @encoding
if typeof encoding is 'function'
encoding = encoding.call(parent, parent) or 'ascii'
string = stream.readString(length, encoding)
if not @length? and stream.pos < stream.length
stream.pos++
return string
size: (val, parent) ->
# Use the defined value if no value was given
unless val
return utils.resolveLength @length, null, parent
encoding = @encoding
if typeof encoding is 'function'
encoding = encoding.call(parent?.val, parent?.val) or 'ascii'
if encoding is 'utf16be'
encoding = 'utf16le'
size = Buffer.byteLength(val, encoding)
if @length instanceof NumberT
size += @length.size()
if not @length?
size++
return size
encode: (stream, val, parent) ->
encoding = @encoding
if typeof encoding is 'function'
encoding = encoding.call(parent?.val, parent?.val) or 'ascii'
if @length instanceof NumberT
@length.encode(stream, Buffer.byteLength(val, encoding))
stream.writeString(val, encoding)
if not @length?
stream.writeUInt8(0x00)
module.exports = StringT