00001
00002
00003
00004
00005
00006 #include "io/xml_group_reader.h"
00007
00008 namespace Chroma
00009 {
00010
00011
00012 GroupXML_t readXMLGroup(XMLReader& xml_in,
00013 const std::string& path, const std::string& type_name)
00014 {
00015 GroupXML_t group;
00016
00017
00018
00019
00020
00021 try
00022 {
00023 XMLReader xml_tmp(xml_in, path);
00024 std::ostringstream os;
00025 xml_tmp.print(os);
00026 read(xml_tmp, type_name, group.id);
00027 group.xml = os.str();
00028 group.path = "/" + path;
00029 }
00030 catch(const std::string& e)
00031 {
00032 QDPIO::cerr << __func__ << ": caught exception reading XML: " << e << endl;
00033 QDP_abort(1);
00034 }
00035
00036 return group;
00037 }
00038
00039
00040
00041 multi1d<GroupXML_t> readXMLArrayGroup(XMLReader& xml_in,
00042 const std::string& path,
00043 const std::string& type_name)
00044 {
00045 multi1d<GroupXML_t> group;
00046
00047
00048
00049
00050
00051 try
00052 {
00053 XMLReader xml_tmp(xml_in, path);
00054 group.resize(xml_tmp.count("elem"));
00055
00056 for(int i=0; i < group.size(); i++)
00057 {
00058
00059 std::ostringstream element_xpath;
00060 element_xpath << "elem[" << (i+1) << "]";
00061
00062 XMLReader xml_elem(xml_tmp, element_xpath.str());
00063 std::ostringstream os;
00064 xml_elem.print(os);
00065 read(xml_elem, type_name, group[i].id);
00066 group[i].xml = os.str();
00067 group[i].path = "/elem";
00068 }
00069 }
00070 catch(const std::string& e)
00071 {
00072 QDPIO::cerr << __func__ << ": caught exception reading XML: " << e << endl;
00073 QDP_abort(1);
00074 }
00075
00076 return group;
00077 }
00078
00079 }