diff options
Diffstat (limited to 'src/storage/storage.cc')
-rw-r--r-- | src/storage/storage.cc | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/src/storage/storage.cc b/src/storage/storage.cc new file mode 100644 index 0000000..429ac2b --- /dev/null +++ b/src/storage/storage.cc @@ -0,0 +1,32 @@ +#include "storage.h" +#include "definitions.h" +#include <algorithm> + +std::vector<std::array<signed int, LINE_SIZE>> +Storage::view(int base, int lines) +{ + base = (base / LINE_SIZE) * LINE_SIZE; + std::vector<std::array<signed int, LINE_SIZE>> ret(lines + 1); + std::copy( + this->data->begin() + base, this->data->begin() + base + lines, + ret.begin()); + return ret; +} + +void Storage::do_write(signed data, int address) +{ + int line = address / LINE_SIZE; + int word = address % LINE_SIZE; + + this->data->at(line).at(word) = data; +} + +void Storage::resolve() +{ + if (this->wait_time == 0) { + this->deque.pop_front(); + this->wait_time = delay; + } else { + --this->wait_time; + } +} |