
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
const {Number:NumberT} = require('./Number');
const utils = require('./utils');
class StringT {
constructor(length, encoding = 'ascii') {
this.length = length;
this.encoding = encoding;
}
decode(stream, parent) {
let length, pos;
if (this.length != null) {
length = utils.resolveLength(this.length, stream, parent);
} else {
let buffer;
({buffer, length, pos} = stream);
while ((pos < length) && (buffer[pos] !== 0x00)) {
++pos;
}
length = pos - stream.pos;
}
let { encoding } = this;
if (typeof encoding === 'function') {
encoding = encoding.call(parent, parent) || 'ascii';
}
const string = stream.readString(length, encoding);
if ((this.length == null) && (stream.pos < stream.length)) {
stream.pos++;
}
return string;
}
size(val, parent) {
// Use the defined value if no value was given
if (!val) {
return utils.resolveLength(this.length, null, parent);
}
let { encoding } = this;
if (typeof encoding === 'function') {
encoding = encoding.call(parent != null ? parent.val : undefined, parent != null ? parent.val : undefined) || 'ascii';
}
if (encoding === 'utf16be') {
encoding = 'utf16le';
}
let size = Buffer.byteLength(val, encoding);
if (this.length instanceof NumberT) {
size += this.length.size();
}
if ((this.length == null)) {
size++;
}
return size;
}
encode(stream, val, parent) {
let { encoding } = this;
if (typeof encoding === 'function') {
encoding = encoding.call(parent != null ? parent.val : undefined, parent != null ? parent.val : undefined) || 'ascii';
}
if (this.length instanceof NumberT) {
this.length.encode(stream, Buffer.byteLength(val, encoding));
}
stream.writeString(val, encoding);
if ((this.length == null)) {
return stream.writeUInt8(0x00);
}
}
}
module.exports = StringT;