12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- var BufferUtil = require('../utils/buffer')
- /**
- * Helper class to handle QR Code symbol modules
- *
- * @param {Number} size Symbol size
- */
- function BitMatrix (size) {
- if (!size || size < 1) {
- throw new Error('BitMatrix size must be defined and greater than 0')
- }
- this.size = size
- this.data = BufferUtil.alloc(size * size)
- this.reservedBit = BufferUtil.alloc(size * size)
- }
- /**
- * Set bit value at specified location
- * If reserved flag is set, this bit will be ignored during masking process
- *
- * @param {Number} row
- * @param {Number} col
- * @param {Boolean} value
- * @param {Boolean} reserved
- */
- BitMatrix.prototype.set = function (row, col, value, reserved) {
- var index = row * this.size + col
- this.data[index] = value
- if (reserved) this.reservedBit[index] = true
- }
- /**
- * Returns bit value at specified location
- *
- * @param {Number} row
- * @param {Number} col
- * @return {Boolean}
- */
- BitMatrix.prototype.get = function (row, col) {
- return this.data[row * this.size + col]
- }
- /**
- * Applies xor operator at specified location
- * (used during masking process)
- *
- * @param {Number} row
- * @param {Number} col
- * @param {Boolean} value
- */
- BitMatrix.prototype.xor = function (row, col, value) {
- this.data[row * this.size + col] ^= value
- }
- /**
- * Check if bit at specified location is reserved
- *
- * @param {Number} row
- * @param {Number} col
- * @return {Boolean}
- */
- BitMatrix.prototype.isReserved = function (row, col) {
- return this.reservedBit[row * this.size + col]
- }
- module.exports = BitMatrix
|