-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathESMapeadaNaMemoria.cpp
74 lines (64 loc) · 1.95 KB
/
ESMapeadaNaMemoria.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#include "ESMapeadaNaMemoria.h"
#include "MemoriaRAM.h"
#include "Dispositivo.h"
#include <iostream>
#include <stdexcept>
#include <vector>
using namespace std;
ESMapeadaNaMemoria::ESMapeadaNaMemoria(MemoriaRAM* m): Memoria (m) {
Dispositivos = new vector<Dispositivo*>();
}
ESMapeadaNaMemoria::ESMapeadaNaMemoria(MemoriaRAM* m, vector<Dispositivo*>* dispositivos): Memoria (m) {
Dispositivos = new vector<Dispositivo*>();
for(unsigned int i = 0; i < dispositivos->size(); i++) {
Dispositivos->push_back((dispositivos->at(i)));
}
}
ESMapeadaNaMemoria::~ESMapeadaNaMemoria() {
delete Memoria;
while (!Dispositivos->empty()) {
Dispositivo* u = Dispositivos->back();
Dispositivos->pop_back();
delete u;
}
delete Dispositivos;
}
MemoriaRAM* ESMapeadaNaMemoria::getMemoriaSubjacente() {
return this->Memoria;
}
void ESMapeadaNaMemoria::adicionar(Dispositivo* d) {
Dispositivos->push_back(d);
}
vector<Dispositivo*>* ESMapeadaNaMemoria::getDispositivos() {
return this->Dispositivos;
}
int ESMapeadaNaMemoria::getTamanho() {
return Memoria->getTamanho() + Dispositivos->size();
}
Dado* ESMapeadaNaMemoria::ler(int posicao) {
if (posicao < 0 || posicao >= getTamanho() + Dispositivos->size()) {
throw new logic_error("Erro logico - ESMapeadaNaMemoria::ler");
}
if (posicao < Memoria->getTamanho()) {
return Memoria->ler(posicao);
}
else {
posicao -= Memoria->getTamanho();
return Dispositivos->at(posicao)->ler();
}
}
void ESMapeadaNaMemoria::escrever(int posicao, Dado* d) {
if (posicao < 0 || posicao >= getTamanho()) {
throw new logic_error("Erro logico - ESMapeadaNaMemoria::escrever");
}
if (posicao < Memoria->getTamanho()) {
Memoria->escrever(posicao, d);
}
else {
posicao -= Memoria->getTamanho();
Dispositivos->at(posicao)->escrever(d);
}
}
void ESMapeadaNaMemoria::imprimir() {
Memoria->imprimir();
}