/** * @import { Num } from "./num.js" */ import { kBuffer } from "./num.js"; import { string16B } from "./string/16B.js" import { string8B } from "./string/8B.js" import { string2B } from "./string/2B.js"; import { string10B } from "./string/10B.js" import { S8_0 } from "./symbol/S8.js"; import { S16_0 } from "./symbol/S16.js"; import { S2_0 } from "./symbol/S2.js"; import { S10_0 } from "./symbol/S10.js"; /** * @param { Num } n */ export function string16(n) { const { [kBuffer]: buff } = n; let str = "" for (let i = buff.length - 1; i >= 0; i--) if (buff[i] !== S16_0) while (i >= 0) str += string16B(buff[i--]); return `0x${str.padStart(1, "0")}`; } /** * @param { Num } n */ export function string8(n) { const { [kBuffer]: buff } = n; let str = "" for (let i = buff.length - 1; i >= 0; i--) if (buff[i] !== S8_0) while (i >= 0) str += string8B(buff[i--]); return `0o${str.padStart(1, "0")}`; } /** * @param { Num } n */ export function string2(n) { const { [kBuffer]: buff } = n; let str = "" for (let i = buff.length - 1; i >= 0; i--) if (buff[i] !== S2_0) while (i >= 0) str += string2B(buff[i--]); return `0b${str.padStart(1, "0")}`; } /** * @param { Num } n */ export function string10(n) { const { [kBuffer]: buff } = n; let str = "" for (let i = buff.length - 1; i >= 0; i--) if (buff[i] !== S10_0) while (i >= 0) str += string10B(buff[i--]); return str.padStart(1, "0"); } /** * @param { Num } n */ export function string(n) { switch (n.radix) { case 2: return string2(n); case 8: return string8(n); case 16: return string16(n); case 10: return string10(n); default: throw new Error(`unsupported radix (${n.radix})`); } }