Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- const START_OFFSET = 7;
- /**
- * @property {string} fields[].name
- * @property {int} fields[].length
- */
- export default class BufferCodec {
- constructor(options) {
- Object.assign(this, options);
- }
- createEncoder() {
- let offset = START_OFFSET;
- let code = `const buffer = Buffer.allocUnsafe(${size});`;
- for (let {length, name} of this.fields) {
- if (length > 6) {
- code += `${name}: buffer.subarray(${offset}, ${length}),`
- } else {
- code += `${name}: buffer.readUIntBE(${offset}, ${length}),`;
- }
- offset += length;
- }
- code += "};";
- return new Function('buffer', code);
- }
- createDecoder() {
- let offset = START_OFFSET;
- let code = "return {";
- for (let {length, name} of this.fields) {
- if (length > 6) {
- code += `${name}: buffer.subarray(${offset}, ${length}),`
- } else {
- code += `${name}: buffer.readUIntBE(${offset}, ${length}),`;
- }
- offset += length;
- }
- code += "};";
- return new Function('buffer', code);
- }
- }
Add Comment
Please, Sign In to add comment