#include "Utils.h" #include #include using namespace std; using namespace tinyxml2; void reportFatal(std::string sender, std::string message) { SC_REPORT_FATAL(sender.c_str(), message.c_str()); } std::string phaseNameToString(tlm::tlm_phase phase) { std::ostringstream oss; oss << phase; std::string str = oss.str(); return str; } unsigned int queryUIntParameter(XMLElement* node, string name) { int result; XMLElement* element; for (element = node->FirstChildElement("parameter"); element != NULL; element = element->NextSiblingElement("parameter")) { if (element->Attribute("id") == name) { assert(!strcmp(element->Attribute("type"), "uint")); XMLError error = element->QueryIntAttribute("value", &result); assert(!error); return result; } } reportFatal("Query XML","Parameter '" + name +"' does not exist."); return 0; } bool parameterExists(tinyxml2::XMLElement* node, std::string name) { XMLElement* element; for (element = node->FirstChildElement("parameter"); element != NULL; element = element->NextSiblingElement("parameter")) { if (element->Attribute("id") == name) { return true; } } return false; } double queryDoubleParameter(XMLElement* node, string name) { double result; XMLElement* element; for (element = node->FirstChildElement("parameter"); element != NULL; element = element->NextSiblingElement("parameter")) { if (element->Attribute("id") == name) { assert(!strcmp(element->Attribute("type"), "double")); XMLError error = element->QueryDoubleAttribute("value", &result); assert(!error); return result; } } reportFatal("Query XML","Parameter '" + name +"' does not exist."); return 0; } bool queryBoolParameter(XMLElement* node, string name) { bool result; XMLElement* element; for (element = node->FirstChildElement("parameter"); element != NULL; element = element->NextSiblingElement("parameter")) { if (element->Attribute("id") == name) { assert(!strcmp(element->Attribute("type"), "bool")); XMLError error = element->QueryBoolAttribute("value", &result); assert(!error); return result; } } reportFatal("Query XML","Parameter '" + name +"' does not exist."); return 0; } string queryStringParameter(XMLElement* node, string name) { XMLElement* element; for (element = node->FirstChildElement("parameter"); element != NULL; element = element->NextSiblingElement("parameter")) { if (element->Attribute("id") == name) { return element->Attribute("value"); } } reportFatal("Query XML","Parameter '" + name +"' does not exist."); return 0; } void loadXML(string uri, XMLDocument& doc) { XMLError error = doc.LoadFile(uri.c_str()); if (error) { reportFatal("Configuration", "Error loading xml from: " + uri); } }