From a7620015acc2401165b4587cbb6c9a118d944493 Mon Sep 17 00:00:00 2001 From: bd Date: Mon, 14 Apr 2025 23:40:25 -0400 Subject: Add preprocess method to storage, removing nearly all duplication --- src/cache.cc | 8 +------- src/dram.cc | 8 +------- src/storage.cc | 13 +++++++++++++ 3 files changed, 15 insertions(+), 14 deletions(-) (limited to 'src') diff --git a/src/cache.cc b/src/cache.cc index ee4b00c..68047ed 100644 --- a/src/cache.cc +++ b/src/cache.cc @@ -58,13 +58,7 @@ Cache::read_word(void *id, int address, signed int &data) int Cache::process(void *id, int address, std::function request_handler) { - if (id == nullptr) - throw std::invalid_argument("Accessor cannot be nullptr."); - - if (this->current_request == nullptr) - this->current_request = id; - - if (this->current_request != id) + if (!preprocess(id)) return 0; if (is_address_missing(address)) diff --git a/src/dram.cc b/src/dram.cc index 5e7e57a..bbd18b7 100644 --- a/src/dram.cc +++ b/src/dram.cc @@ -54,13 +54,7 @@ Dram::load(std::vector program) int Dram::process(void *id, int address, std::function request_handler) { - if (id == nullptr) - throw std::invalid_argument("Accessor cannot be nullptr."); - - if (this->current_request == nullptr) - this->current_request = id; - - if (this->current_request != id) + if (!preprocess(id)) return 0; if (!this->is_data_ready()) diff --git a/src/storage.cc b/src/storage.cc index 17c902d..ee2e7e7 100644 --- a/src/storage.cc +++ b/src/storage.cc @@ -1,6 +1,7 @@ #include "storage.h" #include "definitions.h" #include +#include Storage::Storage(int delay) { @@ -20,6 +21,18 @@ Storage::view(int base, int lines) const return ret; } +int +Storage::preprocess(void *id) +{ + if (id == nullptr) + throw std::invalid_argument("Accessor cannot be nullptr."); + + if (this->current_request == nullptr) + this->current_request = id; + + return this->current_request == id; +} + int Storage::is_data_ready() { -- cgit v1.2.3