66 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			66 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /**
 | |
|  * 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 Uint8Array(size * size)
 | |
|   this.reservedBit = new Uint8Array(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) {
 | |
|   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]
 | |
| }
 | |
| 
 | |
| module.exports = BitMatrix
 | 
