feat(const): updated const to be truly immutable

This commit is contained in:
2025-02-12 11:16:40 -05:00
parent fbd3c3ad58
commit 4227eacd5b
2 changed files with 30 additions and 20 deletions

View File

@@ -19,11 +19,7 @@ bool constants::initialize(const std::string& filename) {
return load(filename);
}
constant constants::get(const std::string& name) {
return constants_[name];
}
constant constants::operator[](const std::string& name) const {
constant constants::get(const std::string& name) const {
auto it = constants_.find(name);
if (it != constants_.end()) {
return it->second;
@@ -32,6 +28,10 @@ constant constants::operator[](const std::string& name) const {
}
}
constant constants::operator[](const std::string& name) const {
return this->get(name);
}
bool constants::has(const std::string& name) const {
return constants_.find(name) != constants_.end();
}
@@ -50,9 +50,9 @@ std::string constants::trim(const std::string& str) {
size_t last = str.find_last_not_of(" \t");
return str.substr(first, last - first + 1);
}
bool constants::load(const std::string& filename) {
std::ifstream file(filename);
std::map<std::string, constant> constants_temp;
if (!file.is_open()) {
std::cerr << "Error: Unable to open file " << filename << std::endl;
return false;
@@ -81,12 +81,12 @@ bool constants::load(const std::string& filename) {
// Define exact column widths from Python script
int start = 0;
std::string symbol = trim(line.substr(start, col_widths_[0])); start += col_widths_[0];
std::string name = trim(line.substr(start, col_widths_[1])); start += col_widths_[1];
std::string valueStr = line.substr(start, col_widths_[2]); start += col_widths_[2];
std::string unit = trim(line.substr(start, col_widths_[3])); start += col_widths_[3]; // Only trim the unit
std::string uncertaintyStr = line.substr(start, col_widths_[4]); start += col_widths_[4];
std::string reference = trim(line.substr(start, col_widths_[5])); // Only trim reference
const std::string symbol = trim(line.substr(start, col_widths_[0])); start += col_widths_[0];
const std::string name = trim(line.substr(start, col_widths_[1])); start += col_widths_[1];
const std::string valueStr = line.substr(start, col_widths_[2]); start += col_widths_[2];
const std::string unit = trim(line.substr(start, col_widths_[3])); start += col_widths_[3]; // Only trim the unit
const std::string uncertaintyStr = line.substr(start, col_widths_[4]); start += col_widths_[4];
const std::string reference = trim(line.substr(start, col_widths_[5])); // Only trim reference
// Convert numerical fields safely
double value = 0.0, uncertainty = 0.0;
@@ -102,11 +102,10 @@ bool constants::load(const std::string& filename) {
}
// Store in map
constants_temp[symbol] = {name, value, uncertainty, unit, reference};
constants_.emplace(symbol, constant{name, value, uncertainty, unit, reference});
}
file.close();
constants_ = constants_temp;
loaded_ = true;
return true;
}