UNPKG

cnf-qrcode

Version:

generate qrcode,support svg base64 utf8

70 lines (62 loc) 1.59 kB
import Buffer from '../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 = new Buffer(size * size); this.data.fill(0); this.reservedBit = new Buffer(size * size); this.reservedBit.fill(0); } /** * 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) { const 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]; }; export default BitMatrix;