parse method
Parse the number or string value passed to a Big constructor.
Implementation
Big parse(Big x, String n) {
int e, i, nl;
if (!_numeric.hasMatch(n)) {
throw BigError(
code: BigErrorCode.type,
);
}
// Determine sign.
if (n[0] == '-') {
n = n.substring(1);
x.s = -1;
} else {
x.s = 1;
}
// Decimal point?
if ((e = n.indexOf('.')) > -1) {
n = n.replaceFirst('.', '');
}
// Exponential form?
if ((i = n.indexOf(RegExp(r'e', caseSensitive: false))) > 0) {
// Determine exponent.
if (e < 0) {
e = i;
}
e += int.parse(n.substring(i + 1));
n = n.substring(0, i);
} else if (e < 0) {
// Integer.
e = n.length;
}
nl = n.length;
// Determine leading zeros.
for (i = 0; i < nl && n[i] == '0';) {
++i;
}
if (i == nl) {
// Zero.
x.c = [x.e = 0];
} else {
// Determine trailing zeros.
for (; nl > 0 && n[--nl] == '0';) {}
x.e = e - i - 1;
x.c = [];
// Convert string to array of digits without leading/trailing zeros.
for (e = 0; i <= nl;) {
x.c.add(int.parse(n[i++]));
}
}
return x;
}