why was I ever passing direct pointers to cvars to UI?

This commit is contained in:
shiiion 2021-04-13 05:16:46 -04:00
parent f643c7a802
commit 2c5634a7e7
4 changed files with 29 additions and 29 deletions

View File

@ -193,9 +193,9 @@ void ElfModLoader::update_bat_regs() {
}
}
void ElfModLoader::get_cvarlist(std::vector<CVar*>& vars_out) {
void ElfModLoader::get_cvarlist(std::vector<CVar>& vars_out) {
for (auto& entry : cvar_map) {
vars_out.push_back(&entry.second);
vars_out.push_back(entry.second);
}
}

View File

@ -24,7 +24,7 @@ public:
void on_state_change(ModState old_state) override {}
void on_reset() override { clear_active_mod(); }
void get_cvarlist(std::vector<CVar*>& vars_out);
void get_cvarlist(std::vector<CVar>& vars_out);
bool write_cvar(std::string const& name, void* data);
bool get_cvar_val(std::string const& name, void* data_out, size_t out_sz);
CVar* get_cvar(std::string const& name);

View File

@ -30,30 +30,30 @@ void CVarListModel::get_column_widths(QFont const& font, std::array<int, CVarLis
void CVarListModel::update_memread() {
cached_vals.clear();
const auto get_value = [](prime::CVar* var) -> QVariant {
switch (var->type) {
const auto get_value = [](prime::CVar const& var) -> QVariant {
switch (var.type) {
case prime::CVarType::INT8:
return prime::read8(var->addr);
return prime::read8(var.addr);
case prime::CVarType::INT16:
return prime::read16(var->addr);
return prime::read16(var.addr);
case prime::CVarType::INT32:
return prime::read32(var->addr);
return prime::read32(var.addr);
case prime::CVarType::INT64:
return prime::read64(var->addr);
return prime::read64(var.addr);
case prime::CVarType::FLOAT32:
return prime::readf32(var->addr);
return prime::readf32(var.addr);
case prime::CVarType::FLOAT64: {
u64 tmp = prime::read64(var->addr);
u64 tmp = prime::read64(var.addr);
return *reinterpret_cast<double*>(&tmp);
}
case prime::CVarType::BOOLEAN:
return static_cast<bool>(prime::read8(var->addr));
return static_cast<bool>(prime::read8(var.addr));
default:
return 0u;
}
};
for (auto* var : cvar_list) {
for (auto const& var : cvar_list) {
cached_vals.push_back(get_value(var));
}
}
@ -66,8 +66,8 @@ QVariant CVarListModel::data(const QModelIndex& index, int role) const {
return QVariant();
}
const auto get_typename = [](prime::CVar* var) -> QVariant {
switch (var->type) {
const auto get_typename = [](prime::CVar const& var) -> QVariant {
switch (var.type) {
case prime::CVarType::INT8:
return QString::fromStdString("int8");
case prime::CVarType::INT16:
@ -89,7 +89,7 @@ QVariant CVarListModel::data(const QModelIndex& index, int role) const {
switch (index.column()) {
case COL_NAME:
return QString::fromStdString(cvar_list[index.row()]->name);
return QString::fromStdString(cvar_list[index.row()].name);
case COL_VALUE:
if (index.row() < cached_vals.size()) {
return cached_vals[index.row()];
@ -195,30 +195,30 @@ void CVarsWindow::save_presets() {
return;
}
for (auto const* var : list_model.get_var_list()) {
for (auto const& var : list_model.get_var_list()) {
std::ostringstream line;
line << var->name << "=";
switch (var->type) {
line << var.name << "=";
switch (var.type) {
case prime::CVarType::BOOLEAN:
line << (prime::read8(var->addr) ? "true" : "false");
line << (prime::read8(var.addr) ? "true" : "false");
break;
case prime::CVarType::INT8:
line << prime::read8(var->addr);
line << prime::read8(var.addr);
break;
case prime::CVarType::INT16:
line << prime::read16(var->addr);
line << prime::read16(var.addr);
break;
case prime::CVarType::INT32:
line << prime::read32(var->addr);
line << prime::read32(var.addr);
break;
case prime::CVarType::INT64:
line << prime::read64(var->addr);
line << prime::read64(var.addr);
break;
case prime::CVarType::FLOAT32:
line << prime::readf32(var->addr);
line << prime::readf32(var.addr);
break;
case prime::CVarType::FLOAT64: {
u64 tmp = prime::read64(var->addr);
u64 tmp = prime::read64(var.addr);
line << *reinterpret_cast<double*>(&tmp);
}
break;

View File

@ -35,13 +35,13 @@ public:
int cvar_count() { return static_cast<int>(cvar_list.size()); }
void get_column_widths(QFont const& font, std::array<int, NUM_COLS>& width_out);
prime::CVar* get_var(int row) {
return cvar_list[row];
return &cvar_list[row];
}
std::vector<prime::CVar*> const& get_var_list() { return cvar_list; }
std::vector<prime::CVar> const& get_var_list() { return cvar_list; }
void update_memread();
private:
std::vector<prime::CVar*> cvar_list;
std::vector<prime::CVar> cvar_list;
std::vector<QVariant> cached_vals;
};