117 lines
2.7 KiB
C++
117 lines
2.7 KiB
C++
#include "Utils.h"
|
|
#include <string>
|
|
#include <tlm.h>
|
|
|
|
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);
|
|
}
|
|
}
|
|
|