#include "Fr_Fcfs.h" #include "../../common/dramExtension.h" #include "../core/configuration/Configuration.h" #include using namespace std; void FR_FCFS::schedule(gp *payload) { buffer[DramExtension::getExtension(payload).getBank()].emplace_back(payload); } std::pair FR_FCFS::getNextRequest(Bank bank) { if(buffer[bank].empty()) { return pair(Command::NOP, NULL); } deque::iterator it = FindRowHit(bank); if(it != buffer[bank].end()) { gp* payload = *it; buffer[bank].erase(it); return pair(getReadWriteCommand(*payload), payload); } return pair(getNextCommand(buffer[bank].front()), buffer[bank].front()); } deque::iterator FR_FCFS::FindRowHit(Bank bank) { deque &queue = buffer[bank]; if(!controllerCore.getRowBufferStates().rowBufferIsOpen(bank)) return queue.end(); for(auto it = queue.begin(); it!=queue.end(); it++) { gp* payload = *it; //Found row-hit if(DramExtension::getRow(payload) == controllerCore.getRowBufferStates().getRowInRowBuffer(bank)) { return it; } } return queue.end(); }