/** * @import { Num } from "./num.js" */ import { S16_0, S16_1, S16_2, S16_3, S16_4, S16_5, S16_6, S16_7, S16_8, S16_9, S16_A, S16_B, S16_C, S16_D, S16_E, S16_F } from "./symbol/S16.js" import { S8_0, S8_1, S8_2, S8_3, S8_4, S8_5, S8_6, S8_7 } from "./symbol/S8.js" import { S2_0, S2_1 } from "./symbol/S2.js" import { S10_0, S10_1, S10_2, S10_3, S10_4, S10_5, S10_6, S10_7, S10_8, S10_9 } from "./symbol/S10.js" import { kBuffer } from "./num.js" /** * @param { Num } a */ function neg16(a) { const { [kBuffer]: buff } = a; switch (buff[buff.length - 1]) { case S16_0: return false; case S16_1: return false; case S16_2: return false; case S16_3: return false; case S16_4: return false; case S16_5: return false; case S16_6: return false; case S16_7: return false; case S16_8: return true; case S16_9: return true; case S16_A: return true; case S16_B: return true; case S16_C: return true; case S16_D: return true; case S16_E: return true; case S16_F: return true; default: throw new Error("unexpected symbol"); } } /** * @param { Num } a */ function neg8(a) { const { [kBuffer]: buff } = a; switch (buff[buff.length - 1]) { case S8_0: return false; case S8_1: return false; case S8_2: return false; case S8_3: return false; case S8_4: return true; case S8_5: return true; case S8_6: return true; case S8_7: return true; default: throw new Error("unexpected symbol"); } } /** * @param { Num } a */ function neg2(a) { const { [kBuffer]: buff } = a; switch (buff[buff.length - 1]) { case S2_0: return false; case S2_1: return true; default: throw new Error("unexpected symbol"); } } /** * @param { Num } a */ function neg10(a) { const { [kBuffer]: buff } = a; switch (buff[buff.length - 1]) { case S10_0: return false; case S10_1: return false; case S10_2: return false; case S10_3: return false; case S10_4: return false; case S10_5: return true; case S10_6: return true; case S10_7: return true; case S10_8: return true; case S10_9: return true; default: throw new Error("unexpected symbol"); } } /** * @param { Num } a */ export function neg(a) { switch (a.radix) { case 2: return neg2(a); case 8: return neg8(a); case 16: return neg16(a); case 10: return neg10(a); default: throw new Error(`unsupported radix (${a.radix})`); } }