parse static method
Implementation
static BinarySize? parse(String size) {
BinarySize? result;
var exp = RegExp(r'(\d+).?(\d*)\s*(B|Ki?B|Mi?B|Gi?B|Ti?B|Pi?B|Ei?B)', caseSensitive: false);
if (exp.hasMatch(size)) {
result = BinarySize();
var match = exp.firstMatch(size);
if (match == null) return null;
var integer = match.group(1) ?? '';
var left = match.group(2) ?? '';
var unit = match.group(3) ?? '';
var diff = unit.toLowerCase().contains('i') ? 1000.0 : 1024.0;
result.isInIecBase = diff == 1000;
var scale = 1.0;
switch (unit.toUpperCase().replaceAll('IB', 'B')) {
case 'B':
scale = 1;
break;
case 'KB':
scale = diff;
break;
case 'MB':
scale = diff * diff;
break;
case 'GB':
scale = pow(diff, 3).toDouble();
break;
case 'TB':
scale = pow(diff, 4).toDouble();
break;
case 'PB':
scale = pow(diff, 5).toDouble();
break;
case 'EB':
scale = pow(diff, 6).toDouble();
break;
default:
scale = 1;
break;
}
if (unit.contains('b')) scale *= 1.0 / 8.0;
var p = 0;
for (var i = integer.length - 1; i >= 0; --i, ++p) {
var addon = (int.parse(integer[i]) * pow(10, p) * scale).toInt();
result.bytesCount += addon;
}
p = -1;
for (var i = 0; i < left.length; ++i, --p) {
var addon = (int.parse(left[i]) * pow(10, p) * scale).toInt();
result.bytesCount += addon;
}
}
return result;
}