// Path: src/main/java/com/kasirgalabs/etumulator/processor/LR.java
// @Singleton
// public class LR implements Observable {
//     private int lr;
//     private final Dispatcher dispatcher;
// 
//     /**
//      * Construct a LR with {@link BaseDispatcher}.
//      *
//      * @see BaseDispatcher
//      */
//     public LR() {
//         dispatcher = new BaseDispatcher();
//     }
// 
//     /**
//      * Construct a LR with the given dispatcher as parameter.
//      *
//      * @param dispatcher The dispatcher which will be used to notify observers.
//      *
//      * @see Dispatcher
//      */
//     @Inject
//     public LR(Dispatcher dispatcher) {
//         this.dispatcher = dispatcher;
//     }
// 
//     /**
//      * Adds an observer to the list of observers for this object.
//      *
//      * @param observer The observer to be deleted.
//      *
//      * @see Observer
//      */
//     @Override
//     public void addObserver(Observer observer) {
//         dispatcher.addObserver(observer);
//     }
// 
//     /**
//      * @param value The LR value to set.
//      */
//     public void setValue(int value) {
//         lr = value;
//         dispatcher.notifyObservers(LR.class);
//     }
// 
//     /**
//      * @return The value of LR.
//      */
//     public int getValue() {
//         return lr;
//     }
// 
//     /**
//      * Sets LR value to zero.
//      */
//     public void reset() {
//         lr = 0;
//         dispatcher.notifyObservers(LR.class);
//     }
// }
// 
// Path: src/main/java/com/kasirgalabs/etumulator/processor/PC.java
// @Singleton
// public class PC implements Observable {
//     private int pc;
//     private final Dispatcher dispatcher;
// 
//     /**
//      * Construct a PC with {@link BaseDispatcher}.
//      *
//      * @see BaseDispatcher
//      */
//     public PC() {
//         dispatcher = new BaseDispatcher();
//     }
// 
//     /**
//      * Construct a PC with the given dispatcher as parameter.
//      *
//      * @param dispatcher The dispatcher which will be used to notify observers.
//      *
//      * @see Dispatcher
//      */
//     @Inject
//     public PC(Dispatcher dispatcher) {
//         this.dispatcher = dispatcher;
//     }
// 
//     /**
//      * Adds an observer to the list of observers for this object.
//      *
//      * @param observer The observer to be deleted.
//      *
//      * @see Observer
//      */
//     @Override
//     public void addObserver(Observer observer) {
//         dispatcher.addObserver(observer);
//     }
// 
//     /**
//      * Increases the value of PC by one.
//      */
//     public void increment() {
//         pc++;
//         dispatcher.notifyObservers(PC.class);
//     }
// 
//     /**
//      * @param value The PC value to set.
//      */
//     public void setValue(int value) {
//         pc = value;
//         dispatcher.notifyObservers(PC.class);
//     }
// 
//     /**
//      * @return The value of PC.
//      */
//     public int getValue() {
//         return pc;
//     }
// 
//     /**
//      * Sets PC value to zero.
//      */
//     public void reset() {
//         pc = 0;
//         dispatcher.notifyObservers(PC.class);
//     }
// }
// 
// Path: src/main/java/com/kasirgalabs/etumulator/processor/RegisterFile.java
// @Singleton
// public class RegisterFile implements Observable {
//     private final Map<String, Integer> registers = new HashMap<>(14);
//     private final Dispatcher dispatcher;
// 
//     public RegisterFile() {
//         for(int i = 0; i < 13; i++) {
//             registers.put("r" + Integer.toString(i), 0);
//         }
//         this.dispatcher = new BaseDispatcher();
//     }
// 
//     @Inject
//     public RegisterFile(Dispatcher dispatcher) {
//         for(int i = 0; i < 13; i++) {
//             registers.put("r" + Integer.toString(i), 0);
//         }
//         this.dispatcher = dispatcher;
//     }
// 
//     @Override
//     public void addObserver(Observer observer) {
//         dispatcher.addObserver(observer);
//     }
// 
//     public void setValue(String registerName, int value) {
//         registers.replace(registerName, value);
//         dispatcher.notifyObservers(RegisterFile.class, registerName);
//     }
// 
//     public int getValue(String registerName) {
//         return registers.get(registerName);
//     }
// 
//     public void reset() {
//         registers.clear();
//         for(int i = 0; i < 13; i++) {
//             registers.put("r" + Integer.toString(i), 0);
//         }
//         dispatcher.notifyObservers(RegisterFile.class, "clear");
//     }
// }
// 
// Path: src/main/java/com/kasirgalabs/etumulator/util/Observer.java
// public interface Observer {
//     void update(Class<?> clazz, Object arg);
// }


import com.google.inject.Inject;
import com.kasirgalabs.etumulator.processor.LR;
import com.kasirgalabs.etumulator.processor.PC;
import com.kasirgalabs.etumulator.processor.RegisterFile;
import com.kasirgalabs.etumulator.util.Observer;
import java.net.URL;
import java.util.ResourceBundle;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.cell.PropertyValueFactory;
package com.kasirgalabs.etumulator.navigator;


public class RegistersTab implements Initializable, Observer {
    @FXML
    private TableView<NavigatorRow> table;
    @FXML
    private TableColumn<NavigatorRow, String> property;
    @FXML
    private TableColumn<NavigatorRow, String> value;
    private final RegisterFile registerFile;
    private final PC pc;
    private final LR lr;
    private final Navigator navigator;
    private final ObservableList<NavigatorRow> data;

    @Inject
// Path: src/main/java/com/kasirgalabs/etumulator/processor/LR.java
// @Singleton
// public class LR implements Observable {
//     private int lr;
//     private final Dispatcher dispatcher;
// 
//     /**
//      * Construct a LR with {@link BaseDispatcher}.
//      *
//      * @see BaseDispatcher
//      */
//     public LR() {
//         dispatcher = new BaseDispatcher();
//     }
// 
//     /**
//      * Construct a LR with the given dispatcher as parameter.
//      *
//      * @param dispatcher The dispatcher which will be used to notify observers.
//      *
//      * @see Dispatcher
//      */
//     @Inject
//     public LR(Dispatcher dispatcher) {
//         this.dispatcher = dispatcher;
//     }
// 
//     /**
//      * Adds an observer to the list of observers for this object.
//      *
//      * @param observer The observer to be deleted.
//      *
//      * @see Observer
//      */
//     @Override
//     public void addObserver(Observer observer) {
//         dispatcher.addObserver(observer);
//     }
// 
//     /**
//      * @param value The LR value to set.
//      */
//     public void setValue(int value) {
//         lr = value;
//         dispatcher.notifyObservers(LR.class);
//     }
// 
//     /**
//      * @return The value of LR.
//      */
//     public int getValue() {
//         return lr;
//     }
// 
//     /**
//      * Sets LR value to zero.
//      */
//     public void reset() {
//         lr = 0;
//         dispatcher.notifyObservers(LR.class);
//     }
// }
// 
// Path: src/main/java/com/kasirgalabs/etumulator/processor/PC.java
// @Singleton
// public class PC implements Observable {
//     private int pc;
//     private final Dispatcher dispatcher;
// 
//     /**
//      * Construct a PC with {@link BaseDispatcher}.
//      *
//      * @see BaseDispatcher
//      */
//     public PC() {
//         dispatcher = new BaseDispatcher();
//     }
// 
//     /**
//      * Construct a PC with the given dispatcher as parameter.
//      *
//      * @param dispatcher The dispatcher which will be used to notify observers.
//      *
//      * @see Dispatcher
//      */
//     @Inject
//     public PC(Dispatcher dispatcher) {
//         this.dispatcher = dispatcher;
//     }
// 
//     /**
//      * Adds an observer to the list of observers for this object.
//      *
//      * @param observer The observer to be deleted.
//      *
//      * @see Observer
//      */
//     @Override
//     public void addObserver(Observer observer) {
//         dispatcher.addObserver(observer);
//     }
// 
//     /**
//      * Increases the value of PC by one.
//      */
//     public void increment() {
//         pc++;
//         dispatcher.notifyObservers(PC.class);
//     }
// 
//     /**
//      * @param value The PC value to set.
//      */
//     public void setValue(int value) {
//         pc = value;
//         dispatcher.notifyObservers(PC.class);
//     }
// 
//     /**
//      * @return The value of PC.
//      */
//     public int getValue() {
//         return pc;
//     }
// 
//     /**
//      * Sets PC value to zero.
//      */
//     public void reset() {
//         pc = 0;
//         dispatcher.notifyObservers(PC.class);
//     }
// }
// 
// Path: src/main/java/com/kasirgalabs/etumulator/processor/RegisterFile.java
// @Singleton
// public class RegisterFile implements Observable {
//     private final Map<String, Integer> registers = new HashMap<>(14);
//     private final Dispatcher dispatcher;
// 
//     public RegisterFile() {
//         for(int i = 0; i < 13; i++) {
//             registers.put("r" + Integer.toString(i), 0);
//         }
//         this.dispatcher = new BaseDispatcher();
//     }
// 
//     @Inject
//     public RegisterFile(Dispatcher dispatcher) {
//         for(int i = 0; i < 13; i++) {
//             registers.put("r" + Integer.toString(i), 0);
//         }
//         this.dispatcher = dispatcher;
//     }
// 
//     @Override
//     public void addObserver(Observer observer) {
//         dispatcher.addObserver(observer);
//     }
// 
//     public void setValue(String registerName, int value) {
//         registers.replace(registerName, value);
//         dispatcher.notifyObservers(RegisterFile.class, registerName);
//     }
// 
//     public int getValue(String registerName) {
//         return registers.get(registerName);
//     }
// 
//     public void reset() {
//         registers.clear();
//         for(int i = 0; i < 13; i++) {
//             registers.put("r" + Integer.toString(i), 0);
//         }
//         dispatcher.notifyObservers(RegisterFile.class, "clear");
//     }
// }
// 
// Path: src/main/java/com/kasirgalabs/etumulator/util/Observer.java
// public interface Observer {
//     void update(Class<?> clazz, Object arg);
// }


// Path: src/main/java/com/kasirgalabs/etumulator/navigator/RegistersTab.java
import com.google.inject.Inject;
import com.kasirgalabs.etumulator.processor.LR;
import com.kasirgalabs.etumulator.processor.PC;
import com.kasirgalabs.etumulator.processor.RegisterFile;
import com.kasirgalabs.etumulator.util.Observer;
import java.net.URL;
import java.util.ResourceBundle;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.cell.PropertyValueFactory;

package com.kasirgalabs.etumulator.navigator;


public class RegistersTab implements Initializable, Observer {
    @FXML
    private TableView<NavigatorRow> table;
    @FXML
    private TableColumn<NavigatorRow, String> property;
    @FXML
    private TableColumn<NavigatorRow, String> value;
    private final RegisterFile registerFile;
    private final PC pc;
    private final LR lr;
    private final Navigator navigator;
    private final ObservableList<NavigatorRow> data;

    @Inject
    public RegistersTab(RegisterFile registerFile, PC pc, LR lr, Navigator navigator) {