JSFiddle - React, Tailwind, and code Playground
by Kamal Kumawat
JavaScript
var nodes = [1,4,9,11,14,18,20,21,28];
var fingerSize = 5;
var cyclicNodes =[...nodes];
nodes.forEach((val,k)=>{
cyclicNodes[cyclicNodes.length] = Math.pow(2,fingerSize) + val;
})
function createFingerTable(nodes, fingerSize){
var fingerTable = {};
nodes.forEach((node,key)=>{
let table = [];
for(var i = 1; i<= fingerSize; i++){
let val = node+Math.pow(2, i-1);
/* while(val > nodes[nodes.length-1]){
val -= Math.pow(2,fingerSize);
} */
let selectedNode;
for(var j = 0; j< cyclicNodes.length; j++){
if(val <= cyclicNodes[j]) {
selectedNode = cyclicNodes[j];
break;
}
}
table.push(selectedNode)
}
fingerTable[node] = table;
});
return fingerTable;
}
var fingerTable = createFingerTable(nodes, fingerSize)
console.log("table===>>", fingerTable);
function fingerHop(source,key, target = []){
if(source >= Math.pow(2,fingerSize)){
conso
source = source - Math.pow(2,fingerSize);
key = key - Math.pow(2,fingerSize);
}
target.push(source);
let fingerTabSource = fingerTable[source]
console.log("--->>",source, fingerTabSource);
if(key<source) key = key + Math.pow(2,fingerSize)
if(key <=fingerTabSource[0]){
target.push(fingerTabSource[0]);
return target;
}else{
let i = fingerTabSource.length-1
while(i>0){
if(key > fingerTabSource[i]){
return fingerHop(fingerTabSource[i],key,target);
i=0;
}else{
i--;
}
}
}
}