cnf-qrcode
Version:
generate qrcode,support svg base64 utf8
70 lines (62 loc) • 1.59 kB
JavaScript
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;