From 20fe698a4074df4abe02f14a1a14481770e90abc Mon Sep 17 00:00:00 2001 From: bd Date: Thu, 6 Mar 2025 00:03:00 -0500 Subject: Storage.view method, some initial tests --- inc/cache.h | 1 - inc/dram.h | 1 - inc/storage.h | 4 ++-- src/storage/cache.cc | 8 ++++---- src/storage/dram.cc | 9 ++++----- src/storage/storage.cc | 12 ++++++++++++ tests/cache.cc | 3 +++ tests/dram.cc | 4 ++++ 8 files changed, 29 insertions(+), 13 deletions(-) create mode 100644 src/storage/storage.cc diff --git a/inc/cache.h b/inc/cache.h index 101cd6e..4d143aa 100644 --- a/inc/cache.h +++ b/inc/cache.h @@ -19,7 +19,6 @@ class Cache : public Storage Response *write(Accessor accessor, signed int data, int address) override; Response *read(Accessor accessor, int address) override; - int **view(int base, int lines) override; }; #endif /* CACHE_H_INCLUDED */ diff --git a/inc/dram.h b/inc/dram.h index 41dd7de..6d33534 100644 --- a/inc/dram.h +++ b/inc/dram.h @@ -17,7 +17,6 @@ class Dram : public Storage Response *write(Accessor accessor, signed int data, int address) override; Response *read(Accessor accessor, int address) override; - int **view(int base, int lines) override; }; #endif /* DRAM_H_INCLUDED */ diff --git a/inc/storage.h b/inc/storage.h index 1e512e2..5ad4f99 100644 --- a/inc/storage.h +++ b/inc/storage.h @@ -37,13 +37,13 @@ class Storage * @return A matrix of data values, where each row is a line and each column * is a word. */ - virtual int **view(int base, int lines) = 0; + std::vector> view(int base, int lines); protected: /** * The data currently stored in this level of storage. */ - std::vector> *data; + std::vector> *data; /** * A pointer to the next lowest level of storage. * Used in case of cache misses. diff --git a/src/storage/cache.cc b/src/storage/cache.cc index 34bdc5f..a4df820 100644 --- a/src/storage/cache.cc +++ b/src/storage/cache.cc @@ -1,8 +1,10 @@ -#include +#include "cache.h" +#include "response.h" +#include Cache::Cache(int lines, Storage *lower, int delay) { - this->data = new std::vector>; + this->data = new std::vector>; this->data->resize(lines); this->lower = lower; this->delay = delay; @@ -17,5 +19,3 @@ Response *Cache::write(Accessor accessor, signed int data, int address) } Response *Cache::read(Accessor accessor, int address) { return nullptr; } - -int **Cache::view(int base, int lines) { return nullptr; } diff --git a/src/storage/dram.cc b/src/storage/dram.cc index 20858cd..89c7316 100644 --- a/src/storage/dram.cc +++ b/src/storage/dram.cc @@ -1,9 +1,10 @@ -#include -#include +#include "dram.h" +#include "response.h" +#include Dram::Dram(int lines, int delay) { - this->data = new std::vector>; + this->data = new std::vector>; this->data->resize(lines); this->delay = delay; this->lower = nullptr; @@ -17,5 +18,3 @@ Response *Dram::write(Accessor accessor, signed int data, int address) } Response *Dram::read(Accessor accessor, int address) { return nullptr; } - -int **Dram::view(int base, int lines) { return nullptr; } diff --git a/src/storage/storage.cc b/src/storage/storage.cc new file mode 100644 index 0000000..49d8e7e --- /dev/null +++ b/src/storage/storage.cc @@ -0,0 +1,12 @@ +#include "storage.h" +#include + +std::vector> Storage::view(int base, int lines) +{ + base = (base / 4) * 4; + std::vector> ret(lines + 1); + std::copy( + this->data->begin() + base, this->data->begin() + base + lines, + ret.begin()); + return ret; +} diff --git a/tests/cache.cc b/tests/cache.cc index 6580563..3b3787d 100644 --- a/tests/cache.cc +++ b/tests/cache.cc @@ -4,5 +4,8 @@ TEST_CASE("Constructor initialize test 1", "[cache]") { Cache *c = new Cache(1, nullptr, 4); + std::array expected = {0, 0, 0, 0}; + std::array actual = c->view(0, 1)[0]; + CHECK(expected == actual); delete c; } diff --git a/tests/dram.cc b/tests/dram.cc index 21182f8..8d5d03b 100644 --- a/tests/dram.cc +++ b/tests/dram.cc @@ -1,8 +1,12 @@ #include "dram.h" #include +#include TEST_CASE("Constructor initialize test 1", "[dram]") { Dram *d = new Dram(1, 4); + std::array expected = {0, 0, 0, 0}; + std::array actual = d->view(0, 1)[0]; + CHECK(expected == actual); delete d; } -- cgit v1.2.3