lignite0

SP24

Aug 5th, 2019
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. const START_OFFSET = 7;
  2.  
  3. /**
  4.  * @property {string} fields[].name
  5.  * @property {int} fields[].length
  6.  */
  7. export default class BufferCodec {
  8.  
  9.     constructor(options) {
  10.         Object.assign(this, options);
  11.     }
  12.  
  13.     createEncoder() {
  14.         let offset = START_OFFSET;
  15.  
  16.         let code = `const buffer = Buffer.allocUnsafe(${size});`;
  17.  
  18.         for (let {length, name} of this.fields) {
  19.             if (length > 6) {
  20.                 code += `${name}: buffer.subarray(${offset}, ${length}),`
  21.             } else {
  22.                 code += `${name}: buffer.readUIntBE(${offset}, ${length}),`;
  23.             }
  24.             offset += length;
  25.         }
  26.         code += "};";
  27.  
  28.         return new Function('buffer', code);
  29.     }
  30.  
  31.     createDecoder() {
  32.         let offset = START_OFFSET;
  33.         let code = "return {";
  34.  
  35.         for (let {length, name} of this.fields) {
  36.             if (length > 6) {
  37.                 code += `${name}: buffer.subarray(${offset}, ${length}),`
  38.             } else {
  39.                 code += `${name}: buffer.readUIntBE(${offset}, ${length}),`;
  40.             }
  41.             offset += length;
  42.         }
  43.         code += "};";
  44.  
  45.         return new Function('buffer', code);
  46.     }
  47. }
Add Comment
Please, Sign In to add comment