blob: 6840b66a2f92e741011593ffb0dbf9fcc96edf36 [file] [log] [blame]
#ifndef READ_XML_UTIL_H
#define READ_XML_UTIL_H
#include "pugixml.hpp"
#include "pugixml_loc.hpp"
#include "pugixml_util.hpp"
pugiutil::ReqOpt BoolToReqOpt(bool b);
void archfpga_throw(const char* filename, int line, const char* fmt, ...);
void bad_tag(const pugi::xml_node node,
const pugiutil::loc_data& loc_data,
const pugi::xml_node parent_node=pugi::xml_node(),
const std::vector<std::string> expected_tags=std::vector<std::string>());
void bad_attribute(const pugi::xml_attribute attr,
const pugi::xml_node node,
const pugiutil::loc_data& loc_data,
const std::vector<std::string> expected_attributes=std::vector<std::string>());
void bad_attribute_value(const pugi::xml_attribute attr,
const pugi::xml_node node,
const pugiutil::loc_data& loc_data,
const std::vector<std::string> expected_attributes=std::vector<std::string>());
class InstPort {
public:
static constexpr int UNSPECIFIED = -1;
InstPort(std::string str);
InstPort(std::string str, pugi::xml_node node, const pugiutil::loc_data& loc_data);
InstPort(pugi::xml_attribute attr, pugi::xml_node node, const pugiutil::loc_data& loc_data);
std::string instance_name() { return instance_.name; }
std::string port_name() { return port_.name; }
int instance_low_index() { return instance_.low_idx; }
int instance_high_index() { return instance_.high_idx; }
int port_low_index() { return port_.low_idx; }
int port_high_index() { return port_.high_idx; }
private:
struct name_index {
std::string name;
int low_idx;
int high_idx;
};
name_index parse_name_index(std::string str);
name_index instance_;
name_index port_;
};
#endif