import { Operand, ListOfNumbers, BitwiseOperation, Operator } from '../expression'; import { ExpressionElement, Expression } from '../expression-interfaces'; import calc from '../../core/calc'; import formatter from '../../core/formatter'; import exp from 'constants'; type Config = { emphasizeBytes: boolean; allowFlipBits: boolean; annotateDataTypes: boolean; } type ExpressionRowModel = { sign: string; css: string; expressionElement: ExpressionElement; allowFlipBits: boolean; label: string; maxBitSize: number; } export default class BitwiseResultViewModel { emphasizeBytes: boolean; items: ExpressionRowModel[]; maxNumberOfBits: number; allowFlipBits: boolean; annotateDataTypes: boolean; constructor({ emphasizeBytes = false, allowFlipBits = false, annotateDataTypes = false} : Config) { this.emphasizeBytes = emphasizeBytes; this.annotateDataTypes = annotateDataTypes; this.items = []; this.maxNumberOfBits = 0; this.allowFlipBits = allowFlipBits === true; } static buildListOfNumbers(expr : ListOfNumbers, config : Config) { var model = new BitwiseResultViewModel(config); expr.children.forEach(op => model.addScalarRow(op)); model.maxNumberOfBits = BitwiseResultViewModel.applyEmphasizeBytes(model.maxNumberOfBits, model.emphasizeBytes); return model; } static buildBitwiseOperation (expr : BitwiseOperation, config : Config) { var op = expr.children[0], i = 0, len = expr.children.length, ex, m = new BitwiseResultViewModel(config); var prev : Operand | null = null; for (;i