DMS/DMS/dms_state.cpp
2020-08-30 23:53:05 -04:00

52 lines
1.7 KiB
C++

#include "dms_state.h"
namespace dms {
dms_state::dms_state() {
// We should define the defaults for the enables
//chunks.insert_or_assign("leaking",false);
//chunks.insert_or_assign("debugging",false);
//chunks.insert_or_assign("warnings",false); //
//chunks.insert_or_assign("statesave",true); // Allows you to save state
//chunks.insert_or_assign("omniscient",true); // Allows you to know who's who when you first meet them
}
bool dms_state::isEnabled(std::string flag) {
if (enables.count(flag)) {
return enables[flag];
}
return false;
}
void dms_state::dump(errors::error err) {
std::cout << std::endl << "STATE DUMP" << std::endl << "Number of chunks: " << chunks.size();
std::ofstream outputFile("dump.bin");
for (const auto& [key, val] : chunks) {
std::cout << "Key: " << key << " Value: " << *val << '\n';
}
//If the error has a chunk then we get the data from it
if (err.current_chunk != nullptr) {
outputFile << err.current_chunk->name << ":" << std::endl << *err.current_chunk << std::endl;
}
outputFile.close();
}
void dms_state::dump() {
std::cout << "Number of chunks: " << chunks.size();
std::ofstream outputFile("dump.bin");
for (const auto& [key, val] : chunks) {
std::cout << "Key: " << key << " Value: " << *val << '\n';
}
outputFile.close();
}
void dms_state::push_chunk(std::string s, chunk* c) {
chunks.insert_or_assign(s, c);
}
void dms_state::push_error(errors::error err) {
std::cout << err.err_msg << " On Line <" << err.linenum << ">" << std::endl;
if (err.crash) {
dump(err);
std::exit(err.code);
}
}
void dms_state::push_warning(errors::error err) {
err.crash = false; // Force code to not crash then push the error
if(enables.count("warnings"))
push_error(err);
}
}