package elw.dp.app; import elw.dp.mips.Reg; import elw.dp.mips.Registers; import elw.dp.mips.asm.Data; import javax.swing.table.AbstractTableModel; public class RegistersTableModel extends AbstractTableModel { public static final String COL_NUMBER = "#"; public static final String COL_NAME = "Name"; public static final String COL_HEX = "Hex"; public static final String COL_DEC = "Dec"; public static final String COL_ACC = InstructionsTableModel.COL_ACC; private final String[] columns = new String[]{COL_ACC, COL_NUMBER, COL_NAME, COL_HEX, COL_DEC}; private final Registers registers; public RegistersTableModel(Registers registers) { this.registers = registers; } public String getColumnName(int column) { return columns[column]; } public int getColumnCount() { return columns.length; } public int getRowCount() { return registers.getSetupRegOrdinals().length; } public Object getValueAt(int rowIndex, int columnIndex) { final Reg reg = Reg.values()[registers.getSetupRegOrdinals()[rowIndex]]; final String colName = columns[columnIndex]; if (COL_NUMBER.equals(colName)) { return Data.str(reg.ordinal(), 2, 5); } else if (COL_NAME.equals(colName)) { return "$" + reg.toString(); } else if (COL_HEX.equals(colName)) { return Data.str((long) registers.getRegInternal(reg) & 0xFFFFFFFFL, 16, 8); } else if (COL_DEC.equals(colName)) { return Data.str(registers.getRegInternal(reg), 10, 1); } else if (COL_ACC.equals(colName)) { return getAccessMod(reg); } return ""; } private String getAccessMod(Reg rowIndex) { StringBuffer accessMod = new StringBuffer(); if (registers.getReadRegs().contains(rowIndex.ordinal())) { accessMod.append("r"); } if (registers.getWriteRegs().contains(rowIndex.ordinal())) { accessMod.append("w"); } return accessMod.toString(); } }