compressIPv6 static method
Returns the compressed form for ip.
Implementation
static String compressIPv6(String ip) {
// Split into hextets
List<String> parts = ip.split(':');
// Removes leading zeros.
for (int i = 0; i < parts.length; i++) {
if (parts[i].isNotEmpty) {
parts[i] = parts[i].replaceFirst(RegExp(r'^0+'), '');
if (parts[i].isEmpty) parts[i] = '0';
}
}
// Finds the longest zero run.
int bestStart = -1;
int bestLen = 0;
int curStart = -1;
int curLen = 0;
for (int i = 0; i < parts.length; i++) {
if (parts[i] == '0') {
if (curStart == -1) curStart = i;
curLen++;
} else {
if (curLen > bestLen) {
bestStart = curStart;
bestLen = curLen;
}
curStart = -1;
curLen = 0;
}
}
if (curLen > bestLen) {
bestStart = curStart;
bestLen = curLen;
}
// Collapses the zero run.
if (bestLen > 1) {
parts.replaceRange(bestStart, bestStart + bestLen, ['']);
if (bestStart == 0) {
parts.insert(0, '');
}
if (bestStart + bestLen == ip.split(':').length) {
parts.add('');
}
}
return parts.join(':').replaceAll(':::', '::');
}