// e -> 101 // E -> 69 // - -> 45 // . -> 46 import { POW_TEN_TABLE_32, POW_TEN_TABLE_64 } from "../globals/tables"; import { atoi } from "./atoi"; export function snp(srcStart: usize, srcEnd: usize): T { // @ts-ignore: type let val: T = 0; let char = load(srcStart) - 48; if (isFloat()) { while (srcStart < srcEnd) {} } else if (isInteger()) { if (isSigned() && char == 65533) { srcStart += 2; while (srcStart < srcEnd) { char = load(srcStart) - 48; if (char < 10) { // @ts-ignore: type val = (val * 10 + char) as T; } else if (char == 101 || char == 69) { srcStart += 2; char = load(srcStart); if (char == 45) { // @ts-ignore: type return -(val / pow10(atoi(srcStart + 2, srcEnd))); } else { // @ts-ignore: type return -(val * pow10(atoi(srcStart, srcEnd))); } } srcStart += 2; } return -val as T; } else { while (srcStart < srcEnd) { char = load(srcStart) - 48; // this operation is repeated twice if (char < 10) { // @ts-ignore: type val = (val * 10 + char) as T; } else if (char == 101 || char == 69) { srcStart += 2; char = load(srcStart); if (char == 45) { // @ts-ignore: type return val / pow10(atoi(srcStart + 2, srcEnd)); } else { // @ts-ignore: type return val * pow10(atoi(srcStart, srcEnd)); } } srcStart += 2; } return val as T; } } } function pow10(x: u16): T { if (sizeof() == 8) { return load(POW_TEN_TABLE_64 + x); } else { return load(POW_TEN_TABLE_32 + x); } }