simple-squiggle

A restricted subset of Squiggle
Log | Files | Refs | README

StringXor.js (1120B)


      1 /*
      2 	MIT License http://www.opensource.org/licenses/mit-license.php
      3 	Author Tobias Koppers @sokra
      4 */
      5 
      6 "use strict";
      7 
      8 class StringXor {
      9 	constructor() {
     10 		this._value = undefined;
     11 	}
     12 
     13 	/**
     14 	 * @param {string} str string
     15 	 * @returns {void}
     16 	 */
     17 	add(str) {
     18 		const len = str.length;
     19 		const value = this._value;
     20 		if (value === undefined) {
     21 			const newValue = (this._value = Buffer.allocUnsafe(len));
     22 			for (let i = 0; i < len; i++) {
     23 				newValue[i] = str.charCodeAt(i);
     24 			}
     25 			return;
     26 		}
     27 		const valueLen = value.length;
     28 		if (valueLen < len) {
     29 			const newValue = (this._value = Buffer.allocUnsafe(len));
     30 			let i;
     31 			for (i = 0; i < valueLen; i++) {
     32 				newValue[i] = value[i] ^ str.charCodeAt(i);
     33 			}
     34 			for (; i < len; i++) {
     35 				newValue[i] = str.charCodeAt(i);
     36 			}
     37 		} else {
     38 			for (let i = 0; i < len; i++) {
     39 				value[i] = value[i] ^ str.charCodeAt(i);
     40 			}
     41 		}
     42 	}
     43 
     44 	toString() {
     45 		const value = this._value;
     46 		return value === undefined ? "" : value.toString("latin1");
     47 	}
     48 
     49 	updateHash(hash) {
     50 		const value = this._value;
     51 		if (value !== undefined) hash.update(value);
     52 	}
     53 }
     54 
     55 module.exports = StringXor;