js-binary icon indicating copy to clipboard operation
js-binary copied to clipboard

Pack Booleans

Open leo60228 opened this issue 8 years ago • 1 comments

With this type, it packs the buttons compound type into 10 bytes instead of the preferable 2 bytes, or even 1.25 (though this would probably be much slower). Could you change this? I didn't see any plans for backwards-compatibility in the spec.

const Format = new Type({
  version: 'uint',
  frames: [{
    buttons: {
      A: 'boolean',
      B: 'boolean',
      X: 'boolean',
      Y: 'boolean',
      L: 'boolean',
      R: 'boolean',
      ZL: 'boolean',
      ZR: 'boolean',
      plus: 'boolean',
      minus: 'boolean',
    },
    sticks: {
      L: {
        x: 'uint',
        y: 'uint'
      },
      R: {
        x: 'uint',
        y: 'uint'
      }
    }
  }]
});

leo60228 avatar Jan 15 '18 02:01 leo60228

Hello @leo60228 ,

Currently you can implement this yourself on top of this lib, using a Buffer and them extracting the bits:

function getBit(buffer, n) {
  return buffer[n>>3] >> (n & 0x7) & 1
}

We could implement a 'bit' type in the future that could group multiple fields into a single byte, but this isn't straight forward as it seems at first.

sitegui avatar Feb 07 '18 14:02 sitegui