Matematicheskiye_obosnovani.../lab1/string.js
2025-01-29 16:04:11 +03:00

65 lines
1.7 KiB
JavaScript

/**
* @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})`);
}
}