compressIPv6 static method

String compressIPv6(
  1. String ip
)

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(':::', '::');
}