/
vladlevin790
/
cpp-lab-2
Обзор
Документация
Войти
/
vladlevin790
/
cpp-lab-2
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
web/js/dataTypes.js
143 строки
4 KB
vladlevin790
init
05 май 2026, 21:32
05 май 2026, 21:32
3310cbd
Код
Авторство
О чём код?
export const DATA_TYPES = { int: { label: "int", placeholder: "42", supportsShift: true, supportsMean: true }, long: { label: "long", placeholder: "9223372036854775807", supportsShift: true, supportsMean: true }, double: { label: "double", placeholder: "3.14", supportsShift: false, supportsMean: true }, char: { label: "char", placeholder: "A", supportsShift: false, supportsMean: false }, string: { label: "string", placeholder: { ru: "любой текст", en: "any text" }, supportsShift: false, supportsMean: false } }; export function getTypeMeta(type) { return DATA_TYPES[type] ?? DATA_TYPES.int; } export function getRemoveLabel(structureName, language = "ru") { if (structureName === "Queue") { return "Dequeue"; } if (structureName === "Stack") { return "Pop"; } return language === "en" ? "Remove" : "Удалить"; } export function getInsertLabel(structureName, language = "ru") { if (structureName === "Queue") { return "Enqueue"; } if (structureName === "Stack") { return "Push"; } return language === "en" ? "Add" : "Добавить"; } export function getValuePlaceholder(type, language = "ru") { const placeholder = getTypeMeta(type).placeholder; if (typeof placeholder === "string") { return placeholder; } return placeholder[language] ?? placeholder.ru; } export function canRunShift(state) { return Boolean(state?.supportsShift ?? getTypeMeta(state?.dataType).supportsShift); } export function canRunMean(state) { return Boolean(state?.supportsMean ?? getTypeMeta(state?.dataType).supportsMean); } export function formatMeanResult(value) { if (typeof value !== "number" || Number.isNaN(value)) { return "—"; } return value.toFixed(4); } export function buildAsciiPreviewFromState(state) { const items = Array.isArray(state?.items) ? state.items : []; const dataType = state?.dataType ?? "int"; const controlNames = [ "NUL", "SOH", "STX", "ETX", "EOT", "ENQ", "ACK", "BEL", "BS", "TAB", "LF", "VT", "FF", "CR", "SO", "SI", "DLE", "DC1", "DC2", "DC3", "DC4", "NAK", "SYN", "ETB", "CAN", "EM", "SUB", "ESC", "FS", "GS", "RS", "US" ]; return { items: items.map((item) => { const value = String(item.value ?? ""); let char = "OUT"; let kind = "out"; let code = ""; if (dataType === "int" || dataType === "long") { const number = Number(value); code = Number.isFinite(number) ? String(number) : ""; if (Number.isInteger(number) && number >= 0 && number <= 127) { if (number < 32) { char = controlNames[number]; kind = "control"; } else if (number === 127) { char = "DEL"; kind = "control"; } else { char = String.fromCharCode(number); kind = "printable"; } } } else if (dataType === "char") { char = value.length > 0 ? value[0] : "EMPTY"; code = value.length > 0 ? String(value.charCodeAt(0)) : ""; kind = value.length > 0 ? "printable" : "out"; } else if (dataType === "string") { char = value.length > 0 ? value[0] : "EMPTY"; code = value.length > 0 ? String(value.charCodeAt(0)) : ""; kind = value.length > 0 ? "printable" : "out"; } return { index: item.index, value, code, char, kind }; }) }; }