143 lines
8.4 KiB
JavaScript
143 lines
8.4 KiB
JavaScript
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"
|
|
|
|
/**
|
|
* @param { symbol } a
|
|
* @param { symbol } b
|
|
* @param { boolean } carry
|
|
* @returns { [value: symbol, carry: boolean] }
|
|
*/
|
|
export function add10B(a, b, carry) {
|
|
switch (a) {
|
|
case S10_0: switch (b) {
|
|
case S10_0: return carry ? [S10_1, false] : [S10_0, false];
|
|
case S10_1: return carry ? [S10_2, false] : [S10_1, false];
|
|
case S10_2: return carry ? [S10_3, false] : [S10_2, false];
|
|
case S10_3: return carry ? [S10_4, false] : [S10_3, false];
|
|
case S10_4: return carry ? [S10_5, false] : [S10_4, false];
|
|
case S10_5: return carry ? [S10_6, false] : [S10_5, false];
|
|
case S10_6: return carry ? [S10_7, false] : [S10_6, false];
|
|
case S10_7: return carry ? [S10_8, false] : [S10_7, false];
|
|
case S10_8: return carry ? [S10_9, false] : [S10_8, false];
|
|
case S10_9: return carry ? [S10_0, true ] : [S10_9, false];
|
|
default: throw new Error("unexpected symbol");
|
|
}
|
|
case S10_1: switch (b) {
|
|
case S10_0: return carry ? [S10_2, false] : [S10_1, false];
|
|
case S10_1: return carry ? [S10_3, false] : [S10_2, false];
|
|
case S10_2: return carry ? [S10_4, false] : [S10_3, false];
|
|
case S10_3: return carry ? [S10_5, false] : [S10_4, false];
|
|
case S10_4: return carry ? [S10_6, false] : [S10_5, false];
|
|
case S10_5: return carry ? [S10_7, false] : [S10_6, false];
|
|
case S10_6: return carry ? [S10_8, false] : [S10_7, false];
|
|
case S10_7: return carry ? [S10_9, false] : [S10_8, false];
|
|
case S10_8: return carry ? [S10_0, true ] : [S10_9, false];
|
|
case S10_9: return carry ? [S10_1, true ] : [S10_0, true ];
|
|
default: throw new Error("unexpected symbol");
|
|
}
|
|
case S10_2: switch (b) {
|
|
case S10_0: return carry ? [S10_3, false] : [S10_2, false];
|
|
case S10_1: return carry ? [S10_4, false] : [S10_3, false];
|
|
case S10_2: return carry ? [S10_5, false] : [S10_4, false];
|
|
case S10_3: return carry ? [S10_6, false] : [S10_5, false];
|
|
case S10_4: return carry ? [S10_7, false] : [S10_6, false];
|
|
case S10_5: return carry ? [S10_8, false] : [S10_7, false];
|
|
case S10_6: return carry ? [S10_9, false] : [S10_8, false];
|
|
case S10_7: return carry ? [S10_0, true ] : [S10_9, false];
|
|
case S10_8: return carry ? [S10_1, true ] : [S10_0, true ];
|
|
case S10_9: return carry ? [S10_2, true ] : [S10_1, true ];
|
|
default: throw new Error("unexpected symbol");
|
|
}
|
|
case S10_3: switch (b) {
|
|
case S10_0: return carry ? [S10_4, false] : [S10_3, false];
|
|
case S10_1: return carry ? [S10_5, false] : [S10_4, false];
|
|
case S10_2: return carry ? [S10_6, false] : [S10_5, false];
|
|
case S10_3: return carry ? [S10_7, false] : [S10_6, false];
|
|
case S10_4: return carry ? [S10_8, false] : [S10_7, false];
|
|
case S10_5: return carry ? [S10_9, false] : [S10_8, false];
|
|
case S10_6: return carry ? [S10_0, true ] : [S10_9, false];
|
|
case S10_7: return carry ? [S10_1, true ] : [S10_0, true ];
|
|
case S10_8: return carry ? [S10_2, true ] : [S10_1, true ];
|
|
case S10_9: return carry ? [S10_3, true ] : [S10_2, true ];
|
|
default: throw new Error("unexpected symbol");
|
|
}
|
|
case S10_4: switch (b) {
|
|
case S10_0: return carry ? [S10_5, false] : [S10_4, false];
|
|
case S10_1: return carry ? [S10_6, false] : [S10_5, false];
|
|
case S10_2: return carry ? [S10_7, false] : [S10_6, false];
|
|
case S10_3: return carry ? [S10_8, false] : [S10_7, false];
|
|
case S10_4: return carry ? [S10_9, false] : [S10_8, false];
|
|
case S10_5: return carry ? [S10_0, true ] : [S10_9, false];
|
|
case S10_6: return carry ? [S10_1, true ] : [S10_0, true ];
|
|
case S10_7: return carry ? [S10_2, true ] : [S10_1, true ];
|
|
case S10_8: return carry ? [S10_3, true ] : [S10_2, true ];
|
|
case S10_9: return carry ? [S10_4, true ] : [S10_3, true ];
|
|
default: throw new Error("unexpected symbol");
|
|
}
|
|
case S10_5: switch (b) {
|
|
case S10_0: return carry ? [S10_6, false] : [S10_5, false];
|
|
case S10_1: return carry ? [S10_7, false] : [S10_6, false];
|
|
case S10_2: return carry ? [S10_8, false] : [S10_7, false];
|
|
case S10_3: return carry ? [S10_9, false] : [S10_8, false];
|
|
case S10_4: return carry ? [S10_0, true ] : [S10_9, false];
|
|
case S10_5: return carry ? [S10_1, true ] : [S10_0, true ];
|
|
case S10_6: return carry ? [S10_2, true ] : [S10_1, true ];
|
|
case S10_7: return carry ? [S10_3, true ] : [S10_2, true ];
|
|
case S10_8: return carry ? [S10_4, true ] : [S10_3, true ];
|
|
case S10_9: return carry ? [S10_5, true ] : [S10_4, true ];
|
|
default: throw new Error("unexpected symbol");
|
|
}
|
|
case S10_6: switch (b) {
|
|
case S10_0: return carry ? [S10_7, false] : [S10_6, false];
|
|
case S10_1: return carry ? [S10_8, false] : [S10_7, false];
|
|
case S10_2: return carry ? [S10_9, false] : [S10_8, false];
|
|
case S10_3: return carry ? [S10_0, true ] : [S10_9, false];
|
|
case S10_4: return carry ? [S10_1, true ] : [S10_0, true ];
|
|
case S10_5: return carry ? [S10_2, true ] : [S10_1, true ];
|
|
case S10_6: return carry ? [S10_3, true ] : [S10_2, true ];
|
|
case S10_7: return carry ? [S10_4, true ] : [S10_3, true ];
|
|
case S10_8: return carry ? [S10_5, true ] : [S10_4, true ];
|
|
case S10_9: return carry ? [S10_6, true ] : [S10_5, true ];
|
|
default: throw new Error("unexpected symbol");
|
|
}
|
|
case S10_7: switch (b) {
|
|
case S10_0: return carry ? [S10_8, false] : [S10_7, false];
|
|
case S10_1: return carry ? [S10_9, false] : [S10_8, false];
|
|
case S10_2: return carry ? [S10_0, true ] : [S10_9, false];
|
|
case S10_3: return carry ? [S10_1, true ] : [S10_0, true ];
|
|
case S10_4: return carry ? [S10_2, true ] : [S10_1, true ];
|
|
case S10_5: return carry ? [S10_3, true ] : [S10_2, true ];
|
|
case S10_6: return carry ? [S10_4, true ] : [S10_3, true ];
|
|
case S10_7: return carry ? [S10_5, true ] : [S10_4, true ];
|
|
case S10_8: return carry ? [S10_6, true ] : [S10_5, true ];
|
|
case S10_9: return carry ? [S10_7, true ] : [S10_6, true ];
|
|
default: throw new Error("unexpected symbol");
|
|
}
|
|
case S10_8: switch (b) {
|
|
case S10_0: return carry ? [S10_9, false] : [S10_8, false];
|
|
case S10_1: return carry ? [S10_0, true ] : [S10_9, false];
|
|
case S10_2: return carry ? [S10_1, true ] : [S10_0, true ];
|
|
case S10_3: return carry ? [S10_2, true ] : [S10_1, true ];
|
|
case S10_4: return carry ? [S10_3, true ] : [S10_2, true ];
|
|
case S10_5: return carry ? [S10_4, true ] : [S10_3, true ];
|
|
case S10_6: return carry ? [S10_5, true ] : [S10_4, true ];
|
|
case S10_7: return carry ? [S10_6, true ] : [S10_5, true ];
|
|
case S10_8: return carry ? [S10_7, true ] : [S10_6, true ];
|
|
case S10_9: return carry ? [S10_8, true ] : [S10_7, true ];
|
|
default: throw new Error("unexpected symbol");
|
|
}
|
|
case S10_9: switch (b) {
|
|
case S10_0: return carry ? [S10_0, true ] : [S10_9, false];
|
|
case S10_1: return carry ? [S10_1, true ] : [S10_0, true ];
|
|
case S10_2: return carry ? [S10_2, true ] : [S10_1, true ];
|
|
case S10_3: return carry ? [S10_3, true ] : [S10_2, true ];
|
|
case S10_4: return carry ? [S10_4, true ] : [S10_3, true ];
|
|
case S10_5: return carry ? [S10_5, true ] : [S10_4, true ];
|
|
case S10_6: return carry ? [S10_6, true ] : [S10_5, true ];
|
|
case S10_7: return carry ? [S10_7, true ] : [S10_6, true ];
|
|
case S10_8: return carry ? [S10_8, true ] : [S10_7, true ];
|
|
case S10_9: return carry ? [S10_9, true ] : [S10_8, true ];
|
|
default: throw new Error("unexpected symbol");
|
|
}
|
|
default: throw new Error("unexpected symbol");
|
|
}
|
|
} |