This app provides monitoring and information features for the common freifunk user and the technical stuff of a freifunk community.
Code base is taken from a TUM Practical Course project and added here to see if Freifunk Altdorf can use it.
https://www.freifunk-altdorf.de
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
85 lines
1.5 KiB
85 lines
1.5 KiB
/* eslint-disable no-nested-ternary */ |
|
'use strict'; |
|
var arr = []; |
|
var charCodeCache = []; |
|
|
|
module.exports = function (a, b) { |
|
if (a === b) { |
|
return 0; |
|
} |
|
|
|
var swap = a; |
|
|
|
// Swapping the strings if `a` is longer than `b` so we know which one is the |
|
// shortest & which one is the longest |
|
if (a.length > b.length) { |
|
a = b; |
|
b = swap; |
|
} |
|
|
|
var aLen = a.length; |
|
var bLen = b.length; |
|
|
|
if (aLen === 0) { |
|
return bLen; |
|
} |
|
|
|
if (bLen === 0) { |
|
return aLen; |
|
} |
|
|
|
// Performing suffix trimming: |
|
// We can linearly drop suffix common to both strings since they |
|
// don't increase distance at all |
|
// Note: `~-` is the bitwise way to perform a `- 1` operation |
|
while (aLen > 0 && (a.charCodeAt(~-aLen) === b.charCodeAt(~-bLen))) { |
|
aLen--; |
|
bLen--; |
|
} |
|
|
|
if (aLen === 0) { |
|
return bLen; |
|
} |
|
|
|
// Performing prefix trimming |
|
// We can linearly drop prefix common to both strings since they |
|
// don't increase distance at all |
|
var start = 0; |
|
|
|
while (start < aLen && (a.charCodeAt(start) === b.charCodeAt(start))) { |
|
start++; |
|
} |
|
|
|
aLen -= start; |
|
bLen -= start; |
|
|
|
if (aLen === 0) { |
|
return bLen; |
|
} |
|
|
|
var bCharCode; |
|
var ret; |
|
var tmp; |
|
var tmp2; |
|
var i = 0; |
|
var j = 0; |
|
|
|
while (i < aLen) { |
|
charCodeCache[start + i] = a.charCodeAt(start + i); |
|
arr[i] = ++i; |
|
} |
|
|
|
while (j < bLen) { |
|
bCharCode = b.charCodeAt(start + j); |
|
tmp = j++; |
|
ret = j; |
|
|
|
for (i = 0; i < aLen; i++) { |
|
tmp2 = bCharCode === charCodeCache[start + i] ? tmp : tmp + 1; |
|
tmp = arr[i]; |
|
ret = arr[i] = tmp > ret ? tmp2 > ret ? ret + 1 : tmp2 : tmp2 > tmp ? tmp + 1 : tmp2; |
|
} |
|
} |
|
|
|
return ret; |
|
};
|
|
|