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