basant307/AI_Governance_Project
048
1export const DEFAULT_HASH_SEED = 9261;2const K = 65599; // 37 also works pretty well3export const DEFAULT_HASH_SEED_ALT = 5381;4 5export const hashIterableInts = function( iterator, seed = DEFAULT_HASH_SEED ){ // sdbm/string-hash6 let hash = seed;7 let entry;8 9 for( ;; ){10 entry = iterator.next();11 12 if( entry.done ){ break; }13 14 hash = ((hash * K) + entry.value) | 0;15 }16 17 return hash;18};19 20export const hashInt = function( num, seed = DEFAULT_HASH_SEED ){ // sdbm/string-hash21 return ((seed * K) + num) | 0;22};23 24export const hashIntAlt = function( num, seed = DEFAULT_HASH_SEED_ALT ){ // djb2/string-hash25 return ((seed << 5) + seed + num) | 0;26};27 28export const combineHashes = function(hash1, hash2){29 return hash1 * 0x200000 + hash2;30};31 32export const combineHashesArray = function(hashes){33 return hashes[0] * 0x200000 + hashes[1];34};35 36export const hashArrays = function(hashes1, hashes2){37 return [38 hashInt(hashes1[0], hashes2[0]),39 hashIntAlt(hashes1[1], hashes2[1])40 ];41};42 43export const hashIntsArray = function( ints, seed ){44 let entry = { value: 0, done: false };45 let i = 0;46 let length = ints.length;47 48 let iterator = {49 next(){50 if( i < length ){51 entry.value = ints[i++];52 } else {53 entry.done = true;54 }55 56 return entry;57 }58 };59 60 return hashIterableInts( iterator, seed );61};62 63export const hashString = function( str, seed ){64 let entry = { value: 0, done: false };65 let i = 0;66 let length = str.length;67 68 let iterator = {69 next(){70 if( i < length ){71 entry.value = str.charCodeAt(i++);72 } else {73 entry.done = true;74 }75 76 return entry;77 }78 };79 80 return hashIterableInts( iterator, seed );81};82 83export const hashStrings = function(){84 return hashStringsArray( arguments );85};86 87export const hashStringsArray = function( strs ){88 let hash;89 90 for( let i = 0; i < strs.length; i++ ){91 let str = strs[i];92 93 if( i === 0 ){94 hash = hashString( str );95 } else {96 hash = hashString( str, hash );97 }98 }99 100 return hash;101};102 