Files
DRAMSys/dram/src/common/Utils.cpp
Janik Schlemminger 131c5dff41 xml reader
2014-04-08 10:46:38 +02:00

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);
}
}