/** * 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; }
/** * 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()); }
public void setData(Data data) { _memory = data._data; _contador = data._cntr; for (Memory.Observer o : _observers) o.onMemoryChange(getData()); }