Beispiel #1
0
  /**
   * Realiza la carga del valor en la posicion pos.
   *
   * @param pos
   * @return El valor cargado.
   * @throws MemoryException
   */
  public int load(int pos) throws AddressNotExistException {

    int accesableValue = 0;

    if (this.canLoad(pos)) {
      for (int i = 0; i <= _contador; i++) {
        if (_memory[i].getPos() == pos) accesableValue = _memory[i].getValue();
      }
    }

    for (Memory.Observer o : _observers) o.onMemoryChange(getData());
    return accesableValue;
  }
Beispiel #2
0
  /**
   * Almacena el valor value en la posicion de memoria pos. La posicion de memoria es independiente
   * de la posicion real en el array.
   *
   * @param pos
   * @param value
   * @return True si se almaceno correctamente
   */
  public void store(int pos, int value) throws FullMemoryException, AddressNotExistException {
    boolean realizado = false;

    if (pos >= 0) {
      for (int i = 0; i <= _contador; i++) {
        if (_memory[i].getPos() == pos) {
          _memory[i].setValue(value);
          realizado = true;
        }
      }

      if ((_contador != _memory.length - 1) && (!realizado)) {
        if (this._contador == -1) {
          _memory[0] = new DataMemoryRegister(pos, value);
          _contador++;
          realizado = true;
        } else {
          for (int k = 0;
              k <= this._contador && !realizado;
              k++) { // Recorre la memoria de principio a fin
            if (_memory[k].getPos()
                > pos) // Busca la primera posicion mayor que pos para anadir el nuevo elem antes.
            {
              for (int l = this._contador; l >= k; l--) {
                int auxPos = _memory[l].getPos();
                int auxValue = _memory[l].getValue();
                _memory[l + 1] = new DataMemoryRegister(auxPos, auxValue);
              }
              _memory[k] = new DataMemoryRegister(pos, value);
              _contador++;
              realizado = true;
            }
          }
          if (!realizado) {
            _contador++;
            _memory[_contador] = new DataMemoryRegister(pos, value);
            realizado = true;
          }
        }
      }
    } else throw new AddressNotExistException("Direccion no valida.");

    if (!realizado) throw new FullMemoryException();

    for (Memory.Observer o : _observers) o.onMemoryChange(getData());
  }
Beispiel #3
0
 public void setData(Data data) {
   _memory = data._data;
   _contador = data._cntr;
   for (Memory.Observer o : _observers) o.onMemoryChange(getData());
 }