File GPAgentsRegisters.hpp
File List > Agents > GP > GPAgentsRegisters.hpp
Go to the documentation of this file
#pragma once
// #include <array>
#include <assert.h>
#include <iostream>
#include <vector>
namespace cowboys {
class GPAgentRegisters {
private:
std::vector<size_t> registers;
public:
GPAgentRegisters(int numRegisters = 16) : registers(numRegisters) {}
~GPAgentRegisters() = default;
bool setRegister(size_t index, size_t value) {
if (index >= registers.size()) {
assert(index >= registers.size());
return false;
}
registers[index] = value;
return true;
}
std::optional<size_t> getRegister(size_t index) {
if (index >= registers.size()) {
return std::nullopt; // Indicates that the value is absent
}
return registers[index];
}
size_t getNumRegisters() { return registers.size(); }
size_t size() { return registers.size(); }
class iterator {
private:
size_t index;
GPAgentRegisters ®isters;
public:
iterator(size_t index, GPAgentRegisters ®s)
: index(index), registers(regs) {}
size_t &operator*() { return registers.registers[index]; }
iterator &operator++() {
++index;
return *this;
}
bool operator==(const iterator &other) const {
return index == other.index;
}
bool operator!=(const iterator &other) const {
return index != other.index;
}
};
// Begin iterator
iterator begin() { return iterator(0, *this); }
// End iterator
iterator end() { return iterator(size(), *this); }
};
} // namespace cowboys