PRUlayer::PRUlayer(xmlpp::TextReader &reader) { if (reader.has_attributes()) { reader.move_to_first_attribute(); do { if (reader.get_name() == "id") name = reader.get_value(); } while (reader.move_to_next_attribute()); reader.move_to_element(); } while(reader.read()) { string name = reader.get_name(); if ((reader.get_node_type() == xmlpp::TextReader::EndElement) && (name == "Layer")) break; if (reader.get_node_type() != xmlpp::TextReader::Element ) continue; if (name == "StateVariable") { if (reader.has_attributes()) { reader.move_to_first_attribute(); do { if (reader.get_name() == "id") stateVariables.push_back(reader.get_value()); } while (reader.move_to_next_attribute()); reader.move_to_element(); } } else if (name == "Action") { modules.push_back(new PRUmodule(reader)); } else std::cerr << "Unexpected tag " << name << "!" << std::endl; } // while reader.read() } // PRUlayer(reader)
PRUmodule::PRUmodule(xmlpp::TextReader &reader) { if (reader.has_attributes()) { reader.move_to_first_attribute(); do { if (reader.get_name() == "id") actionName = reader.get_value(); } while (reader.move_to_next_attribute()); reader.move_to_element(); } while(reader.read()) { string name = reader.get_name(); if ((reader.get_node_type() == xmlpp::TextReader::EndElement) && (name == "Action")) break; if (reader.get_node_type() != xmlpp::TextReader::Element ) continue; if (name == "Parameter") { string pName = ""; string pDom = ""; if (reader.has_attributes()) { reader.move_to_first_attribute(); do { if (reader.get_name() == "id") pName = reader.get_value(); else if (reader.get_name() == "domain") pDom = reader.get_value(); } while (reader.move_to_next_attribute()); reader.move_to_element(); } if (pName == "") throw "Parameter with no name!"; domain_type dom; if (pDom != "") { if (PRUplus::actionsDomain[pDom].empty()) std::cerr << "Empty action domain: " << pDom << std::endl; else for (domain_type::const_iterator it=PRUplus::actionsDomain[pDom].begin(); it!=PRUplus::actionsDomain[pDom].end(); ++it){ dom.insert(*it); } } if (reader.has_value()) dom.insert(reader.get_value()); else readVector(dom,reader); parameters[pName] = dom; domains[pName] = pDom; } else if (name == "Outcome") { outcomes.push_back(new PRUoutcome(reader)); } else std::cerr << "Unexpected tag " << name << "!" << std::endl; } // while reader.read() } // PRUmodule(reader)
void polyline_road::xml_read(xmlpp::TextReader &reader, const vec3f &scale) { assert(is_opening_element(reader, "line_rep")); read_to_open(reader, "points"); std::cout<<"abcd"<<std::endl; do { read_skip_comment(reader); if(reader.get_node_type() == xmlpp::TextReader::Text || reader.get_node_type() == xmlpp::TextReader::SignificantWhitespace) { //std::cout<<"BE CAREFUL, NEED TEST! (hwm_xml_read.cpp)"<<std::endl; std::string res(reader.get_value()); std::stringstream s1(res); std::string line; while(getline(s1, line, '\n')) { std::istringstream s2(line); vec3f pos; s2 >> pos[0]; s2 >> pos[1]; s2 >> pos[2]; if((std::abs(pos[0] - 0) < 1e-6 && std::abs(pos[1] - 0) < 1e-6 && std::abs(pos[2] - 0) < 1e-6)) continue; points_.push_back(vec3f(pos*scale)); } } } while(!is_closing_element(reader, "points")); if(!initialize()) throw xml_error(reader, "Failed to initialize polyine"); read_to_close(reader, "line_rep"); }
PRUoutcome::PRUoutcome(xmlpp::TextReader &reader) { initDefaultValues(); if (reader.has_attributes()) { reader.move_to_first_attribute(); do { if (reader.get_name() == "id") name = reader.get_value(); else if (reader.get_name() == "p") probability = atof(reader.get_value().c_str()); } while (reader.move_to_next_attribute()); reader.move_to_element(); } while(reader.read()) { string name = reader.get_name(); if ((reader.get_node_type() == xmlpp::TextReader::EndElement) && (name == "Outcome")) break; if (reader.get_node_type() != xmlpp::TextReader::Element ) continue; if (name == "Quality") { if (reader.has_attributes()) { reader.move_to_first_attribute(); do { if (reader.get_name() == "kind") quality = reader.get_value(); else if (reader.get_name() == "param") qualityParameter = atof(reader.get_value().c_str()); else if (reader.get_name() == "const") qualityConstant = atof(reader.get_value().c_str()); } while (reader.move_to_next_attribute()); reader.move_to_element(); } } else if (name == "Duration") { if (reader.has_attributes()) { reader.move_to_first_attribute(); do { if (reader.get_name() == "kind") duration = reader.get_value(); else if (reader.get_name() == "param") durationParameter = atof(reader.get_value().c_str()); else if (reader.get_name() == "const") durationConstant = atof(reader.get_value().c_str()); } while (reader.move_to_next_attribute()); reader.move_to_element(); } } else if (name == "Observe") { if (reader.has_value()) observable = reader.get_value(); else observable = reader.read_string(); } else if (name == "SVU") { readVector(stateVariableUpdate,reader); } else if (name == "Final") { isFinal = true; if (reader.has_attributes()) { reader.move_to_first_attribute(); do { if (reader.get_name() == "label") finalLabel = reader.get_value(); } while (reader.move_to_next_attribute()); reader.move_to_element(); } } else if (name == "Next") readVector(nextModules,reader,"\n "); else std::cerr << "Unexpected tag " << name << "!" << std::endl; } // while reader.read() } // PRUoutcome(reader)
void arc_road::xml_read(xmlpp::TextReader &reader, const vec3f &scale) { assert(is_opening_element(reader, "arc_line_rep")); read_to_open(reader, "points"); do { read_skip_comment(reader); if(reader.get_node_type() == xmlpp::TextReader::Text || reader.get_node_type() == xmlpp::TextReader::SignificantWhitespace) { //std::cout<<"BE CAREFUL, NEED TEST! (hwm_xml_read.cpp)"<<std::endl; std::string res(reader.get_value()); std::stringstream s1(res); std::string line; while(getline(s1, line, '\n')) { std::istringstream s2(line); vec3f pos; s2 >> pos[0]; s2 >> pos[1]; s2 >> pos[2]; if((std::abs(pos[0] - 0) < 1e-6 && std::abs(pos[1] - 0) < 1e-6 && std::abs(pos[2] - 0) < 1e-6)) continue; points_.push_back(vec3f(pos*scale)); } } } while(!is_closing_element(reader, "points")); read_to_open(reader, "radii"); while(!is_closing_element(reader, "radii")) { read_skip_comment(reader); if(reader.get_node_type() == xmlpp::TextReader::Text || reader.get_node_type() == xmlpp::TextReader::SignificantWhitespace) { //std::cout<<"BE CAREFUL, NEED TEST! (hwm_xml_read.cpp)"<<std::endl; std::string res(reader.get_value()); std::stringstream s1(res); std::string line; while(getline(s1, line, '\n')) { std::istringstream s2(line); float rad; s2 >> rad; //maybe also need to test this // if((std::abs(pos[0] - 0) < 1e-6 && std::abs(pos[1] - 0) < 1e-6 && std::abs(pos[2] - 0) < 1e-6)) // continue; radii_.push_back(rad*scale[0]); } } }