/* * ALMA - Atacama Large Millimeter Array * (c) European Southern Observatory, 2002 * (c) Associated Universities Inc., 2002 * Copyright by ESO (in the framework of the ALMA collaboration), * Copyright by AUI (in the framework of the ALMA collaboration), * All rights reserved. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY, without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * MA 02111-1307 USA * * Warning! * -------------------------------------------------------------------- * | This is generated code! Do not modify this file. | * | If you do, all changes will be lost when the file is re-generated. | * -------------------------------------------------------------------- * * File Parser.cpp */ #include <iostream> #include <sstream> #include <alma/ASDM/Base64.h> #include <alma/ASDM/Parser.h> #ifndef WITHOUT_BOOST #include <boost/property_tree/detail/xml_parser_utils.hpp> #endif #include <alma/ASDM/OutOfBoundsException.h> #include <alma/ASDM/NumberFormatException.h> #include <alma/ASDM/BooleanWrapper.h> #include <alma/ASDM/ByteWrapper.h> #include <alma/ASDM/CharacterWrapper.h> #include <alma/ASDM/DoubleWrapper.h> #include <alma/ASDM/FloatWrapper.h> #include <alma/ASDM/IntegerWrapper.h> #include <alma/ASDM/LongWrapper.h> #include <alma/ASDM/ShortWrapper.h> using asdm::OutOfBoundsException; using asdm::NumberFormatException; using asdm::Boolean; using asdm::Byte; using asdm::Character; using asdm::Double; using asdm::Float; using asdm::Integer; using asdm::Long; using asdm::Short; using namespace std; namespace asdm { string Parser::substring(const string &s, int a, int b) { return s.substr(a,(b - a)); } string Parser::trim(const string &s) { unsigned int i = 0; //while (s.at(i) == ' ' && i < s.length()) while (i < s.length() && s.at(i) == ' ') ++i; if (i == s.length()) return ""; unsigned int j = s.length() - 1; //while (s.at(j) == ' ' && j > i) while (j > i && s.at(j) == ' ') --j; return substring(s,i,j + 1); } string Parser::encode(const string &s) { #ifndef WITHOUT_BOOST return boost::property_tree::xml_parser::encode_char_entities(s); #else string result; for (string::const_iterator it=s.begin(); it!=s.end();++it) { switch(*it) { case '&': result += "&"; break; case '<': result += ">"; break; case '>': result += "<"; break; case '\"': result += """; break; case '\'': result += "'"; break; default: result += *it; } } return result; #endif } #ifndef WITHOUT_BOOST string Parser::decode(const string &s, const string &/* tableName */) { return boost::property_tree::xml_parser::decode_char_entities(s); } #else string Parser::decode(const string &s, const string &tableName) { string result; for (string::const_iterator it=s.begin(); it!=s.end();++it) { // is this the start of a special set of characters to be decoded if (*it == '&') { // is it correctly terminated string::const_iterator term = find(it+1,s.end(),';'); if (term == s.end()) throw ConversionException("Error: Missing semi-colon after start of special characters in \"" + s + "\" : Invalid XML syntax", tableName); string thing(it+1,term); if (thing == "amp") result += '&'; else if (thing == "gt") result += '>'; else if (thing == "lt") result += '<'; else if (thing == "quot") result += '\"'; else if (thing == "apos") result += '\''; else throw ConversionException("Error: Unrecognized special characters in \"" + s + "\" : Invalid XML syntax", tableName); it = term; } else { result += *it; } } return result; } #endif /** * Get the portion of the string bounded by s1 and s2, inclusive. * @param s1 * @param s2 * @return */ string Parser::getElement(const string &s1, const string &s2) { beg = str.find(s1,pos); if (beg == string::npos) return ""; end = str.find(s2,beg + s1.length()); if (end == string::npos) return ""; pos = end + s2.length(); return substring(str,beg,end + s2.length()); } /** * Get the portion of the string bounded by s1 and s2, exclusive. * @param s1 * @param s2 * @return */ string Parser::getElementContent(const string &s1, const string &s2) { string s = getElement(s1,s2); if (s.length() == 0) return ""; s = substring(str,beg + s1.length(),end); return trim(s); } string Parser::getField(const string &field) { beg = str.find("<" + field + ">"); if (beg == string::npos) return ""; beg += field.length() + 2; end = str.find("</" + field + ">",beg); if (end == string::npos) return ""; string s = substring(str,beg,end); return trim(s); } string Parser::getField(const string &xml, const string &field) { string::size_type b = xml.find("<" + field + ">"); if (b == string::npos) return ""; b += field.length() + 2; string::size_type e = xml.find("</" + field + ">",b); if (e == string::npos) return ""; string s = substring(xml,b,e); return trim(s); } ////////////////////////////////////////////////////// // The follwing is a special case. ////////////////////////////////////////////////////// string Parser::getString(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); /* if (xmlField == "") throw ConversionException("Error: Missing field \"" + name + "\" or invalid syntax",tableName); */ return Parser::decode(xmlField,tableName); } vector<string> Parser::get1DString(const string &name, const string &tableName, const string &xmlDoc) { vector<string> x(2); string xmlField = Parser::getField(xmlDoc,name); if (xmlField == "") { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } StringTokenizer t(xmlField," "); try { int ndim = Integer::parseInt(t.nextToken()); if (ndim != 1) { throw ConversionException("Error: Field \"" + name + "\": Invalid array format", tableName); } int dim0 = Integer::parseInt(t.nextToken()); vector<string> value(dim0); if (dim0 == 0) return value; t.nextToken("\""); // the space value[0] = t.nextToken(); for (int i = 1; i < dim0; ++i) { t.nextToken(); // the space string thisToken = t.nextToken(); value[i] = Parser::decode(thisToken,tableName); } if (t.hasMoreTokens()) { throw ConversionException("Error: Field \"" + name + "\": Syntax error.", tableName); } return value; } catch (const NumberFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } catch (const OutOfBoundsException &e) { throw ConversionException("Error: Field \"" + name + "\": Unexpected end of string", tableName); } } vector <vector<string> > Parser::get2DString(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField == "") { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } StringTokenizer t(xmlField," "); try { int ndim = Integer::parseInt(t.nextToken()); if (ndim != 2) { throw ConversionException("Error: Field \"" + name + "\": Invalid array format", tableName); } int dim0 = Integer::parseInt(t.nextToken()); int dim1 = Integer::parseInt(t.nextToken()); vector <vector<string> > value; if (dim0 == 0 || dim1 == 0) return value; t.nextToken("\""); // the space vector<string>v_aux; for (int i = 0; i < dim0; ++i) { v_aux.clear(); for (int j = 0; j < dim1; ++j) { v_aux.push_back(Parser::decode(t.nextToken(),tableName)); if (i != dim0 - 1 || j != dim1 - 1) t.nextToken(); // the space } value.push_back(v_aux); } if (t.hasMoreTokens()) { throw ConversionException("Error: Field \"" + name + "\": Syntax error.", tableName); } return value; } catch (const NumberFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } catch (const OutOfBoundsException &e) { throw ConversionException("Error: Field \"" + name + "\": Unexpected end of string", tableName); } } vector <vector <vector<string> > > Parser::get3DString(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField == "") { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } StringTokenizer t(xmlField," "); try { int ndim = Integer::parseInt(t.nextToken()); if (ndim != 3) { throw ConversionException("Error: Field \"" + name + "\": Invalid array format", tableName); } int dim0 = Integer::parseInt(t.nextToken()); int dim1 = Integer::parseInt(t.nextToken()); int dim2 = Integer::parseInt(t.nextToken()); vector <vector <vector<string> > > value; if (dim0 == 0 || dim1 == 0 || dim2 == 0) return value; t.nextToken("\""); // the space vector<string> v_aux; vector<vector <string> > vv_aux; for (int i = 0; i < dim0; ++i) { vv_aux.clear(); for (int j = 0; j < dim1; ++j) { v_aux.clear(); for (int k = 0; k < dim2; ++k) { v_aux.push_back( Parser::decode(t.nextToken(),tableName)); if (i != dim0 - 1 || j != dim1 - 1 || k != dim2 - 1) t.nextToken(); // the space } vv_aux.push_back(v_aux); } value.push_back(vv_aux); } if (t.hasMoreTokens()) { throw ConversionException("Error: Field \"" + name + "\": Syntax error.", tableName); } return value; } catch (const NumberFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } catch (const OutOfBoundsException &e) { throw ConversionException("Error: Field \"" + name + "\": Unexpected end of string", tableName); } } // Generated methods for conversion to and from XML // data representations for all types, both primitive // and extended. Also included are 1, 2, and 3 // dimensional arrays of these types. // Field type: int void Parser::toXML(int data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append(Integer::toString(data)); buf.append(" </" + name + "> "); } void Parser::toXML(set< int > data, const string &name, string &buf) { buf.append("<" + name + "> "); set < int >::iterator iter; for (iter=data.begin(); iter!=data.end(); iter++) { buf.append(Integer::toString(*iter)); buf.append(" "); } } void Parser::toXML(vector<int> data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append("1 "); buf.append(Integer::toString(data.size())); buf.append(" "); for (unsigned int i = 0; i < data.size(); ++i) { buf.append(Integer::toString(data[i])); buf.append(" "); } buf.append(" </" + name + "> "); } void Parser::toXML(vector< vector<int> > data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append("2 "); buf.append(Integer::toString(data.size())); buf.append(" "); buf.append(Integer::toString(data[0].size())); buf.append(" "); for (unsigned int i = 0; i < data.size(); ++i) { for (unsigned int j = 0; j < data[i].size(); ++j) { buf.append(Integer::toString(data[i][j])); buf.append(" "); } } buf.append(" </" + name + "> "); } void Parser::toXML(vector< vector< vector<int> > > data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append("3 "); buf.append(Integer::toString(data.size())); buf.append(" "); buf.append(Integer::toString(data[0].size())); buf.append(" "); buf.append(Integer::toString(data[0][0].size())); buf.append(" "); for (unsigned int i = 0; i < data.size(); ++i) { for (unsigned int j = 0; j < data[i].size(); ++j) { for (unsigned int k = 0; k < data[i][j].size(); ++k) { buf.append(Integer::toString(data[i][j][k])); buf.append(" "); } } } buf.append(" </" + name + "> "); } void Parser::toXML(vector<vector< vector< vector<int> > > >data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append("4 "); buf.append(Integer::toString(data.size())); buf.append(" "); buf.append(Integer::toString(data[0].size())); buf.append(" "); buf.append(Integer::toString(data[0][0].size())); buf.append(" "); buf.append(Integer::toString(data[0][0][0].size())); buf.append(" "); for (unsigned int i = 0; i < data.size(); ++i) { for (unsigned int j = 0; j < data[i].size(); ++j) { for (unsigned int k = 0; k < data[i][j].size(); ++k) { for (unsigned int l = 0; l < data[i][j][k].size(); l++) { buf.append(Integer::toString(data[i][j][k][l])); buf.append(" "); } } } } buf.append(" </" + name + "> "); } set< int > Parser::getIntSet(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) throw ConversionException("Error: Missing field \"" + name + "\" or invalid syntax",tableName); StringTokenizer t(xmlField," "); set < int > result; while (t.hasMoreTokens()) { try { int data = Integer::parseInt(xmlField); result.insert(data); } catch (const NumberFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } } return result; } int Parser::getInteger(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) throw ConversionException("Error: Missing field \"" + name + "\" or invalid syntax",tableName); try { int data = Integer::parseInt(xmlField); return data; } catch (const NumberFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } } vector<int> Parser::get1DInteger(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } StringTokenizer t(xmlField," "); try { int ndim = Integer::parseInt(t.nextToken()); if (ndim != 1) { throw ConversionException("Error: Field \"" + name + "\": Invalid array format", tableName); } int dim0 = Integer::parseInt(t.nextToken()); vector<int> value (dim0); if (dim0 == 0) return value; for (int i = 0; i < dim0; ++i) { value[i] = Integer::parseInt(t.nextToken()); } if (t.hasMoreTokens()) { throw ConversionException("Error: Field \"" + name + "\": Syntax error.", tableName); } return value; } catch (const NumberFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } catch (const OutOfBoundsException &e) { throw ConversionException("Error: Field \"" + name + "\": Unexpected end of string", tableName); } catch (const TagFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } } vector< vector<int> > Parser::get2DInteger(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } StringTokenizer t(xmlField," "); try { int ndim = Integer::parseInt(t.nextToken()); if (ndim != 2) { throw ConversionException("Error: Field \"" + name + "\": Invalid array format", tableName); } int dim0 = Integer::parseInt(t.nextToken()); int dim1 = Integer::parseInt(t.nextToken()); vector< vector<int> > value; if (dim0 == 0 || dim1 == 0) return value; vector<int> v_aux; for (int i = 0; i < dim0; ++i) { v_aux.clear(); for (int j = 0; j < dim1; ++j) { v_aux.push_back(Integer::parseInt(t.nextToken())); } value.push_back(v_aux); } if (t.hasMoreTokens()) { throw ConversionException("Error: Field \"" + name + "\": Syntax error.", tableName); } return value; } catch (const NumberFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } catch (const OutOfBoundsException &e) { throw ConversionException("Error: Field \"" + name + "\": Unexpected end of string", tableName); } catch (const TagFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } } vector< vector< vector<int> > > Parser::get3DInteger(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } StringTokenizer t(xmlField," "); try { int ndim = Integer::parseInt(t.nextToken()); if (ndim != 3) { throw ConversionException("Error: Field \"" + name + "\": Invalid array format", tableName); } int dim0 = Integer::parseInt(t.nextToken()); int dim1 = Integer::parseInt(t.nextToken()); int dim2 = Integer::parseInt(t.nextToken()); vector< vector< vector<int> > > value ; if (dim0 == 0 || dim1 == 0 || dim2 == 0) return value; vector<vector<int> > vv_aux; vector<int> v_aux; for (int i = 0; i < dim0; ++i) { vv_aux.clear(); for (int j = 0; j < dim1; ++j) { v_aux.clear(); for (int k = 0; k < dim2; ++k) { v_aux.push_back(Integer::parseInt(t.nextToken())); } vv_aux.push_back(v_aux); } value.push_back(vv_aux); } if (t.hasMoreTokens()) { throw ConversionException("Error: Field \"" + name + "\": Syntax error.", tableName); } return value; } catch (const NumberFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } catch (const OutOfBoundsException &e) { throw ConversionException("Error: Field \"" + name + "\": Unexpected end of string", tableName); } catch (const TagFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } } vector< vector< vector< vector<int> > > >Parser::get4DInteger(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } StringTokenizer t(xmlField," "); try { int ndim = Integer::parseInt(t.nextToken()); if (ndim != 4) { throw ConversionException("Error: Field \"" + name + "\": Invalid array format", tableName); } int dim0 = Integer::parseInt(t.nextToken()); int dim1 = Integer::parseInt(t.nextToken()); int dim2 = Integer::parseInt(t.nextToken()); int dim3 = Integer::parseInt(t.nextToken()); vector<vector< vector< vector<int> > > >value; if (dim0 == 0 || dim1 == 0 || dim2 == 0 || dim3 == 0) return value; vector<vector<vector<int> > >vvv_aux; vector<vector< int> > vv_aux; vector<int> v_aux; for (int i = 0; i < dim0; ++i) { vvv_aux.clear(); for (int j = 0; j < dim1; ++j) { vv_aux.clear(); for (int k = 0; k < dim2; ++k) { v_aux.clear(); for (int l = 0; l < dim3; l++) { v_aux.push_back(Integer::parseInt(t.nextToken())); } vv_aux.push_back(v_aux); } vvv_aux.push_back(vv_aux); } value.push_back(vvv_aux); } if (t.hasMoreTokens()) { throw ConversionException("Error: Field \"" + name + "\": Syntax error.", tableName); } return value; } catch (const NumberFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } catch (const OutOfBoundsException &e) { throw ConversionException("Error: Field \"" + name + "\": Unexpected end of string", tableName); } catch (const TagFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } } // Field type: short void Parser::toXML(short data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append(Short::toString(data)); buf.append(" </" + name + "> "); } void Parser::toXML(vector<short> data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append("1 "); buf.append(Integer::toString(data.size())); buf.append(" "); for (unsigned int i = 0; i < data.size(); ++i) { buf.append(Short::toString(data[i])); buf.append(" "); } buf.append(" </" + name + "> "); } void Parser::toXML(vector< vector<short> > data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append("2 "); buf.append(Integer::toString(data.size())); buf.append(" "); buf.append(Integer::toString(data[0].size())); buf.append(" "); for (unsigned int i = 0; i < data.size(); ++i) { for (unsigned int j = 0; j < data[i].size(); ++j) { buf.append(Short::toString(data[i][j])); buf.append(" "); } } buf.append(" </" + name + "> "); } void Parser::toXML(vector< vector< vector<short> > > data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append("3 "); buf.append(Integer::toString(data.size())); buf.append(" "); buf.append(Integer::toString(data[0].size())); buf.append(" "); buf.append(Integer::toString(data[0][0].size())); buf.append(" "); for (unsigned int i = 0; i < data.size(); ++i) { for (unsigned int j = 0; j < data[i].size(); ++j) { for (unsigned int k = 0; k < data[i][j].size(); ++k) { buf.append(Short::toString(data[i][j][k])); buf.append(" "); } } } buf.append(" </" + name + "> "); } void Parser::toXML(vector<vector< vector< vector<short> > > >data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append("4 "); buf.append(Integer::toString(data.size())); buf.append(" "); buf.append(Integer::toString(data[0].size())); buf.append(" "); buf.append(Integer::toString(data[0][0].size())); buf.append(" "); buf.append(Integer::toString(data[0][0][0].size())); buf.append(" "); for (unsigned int i = 0; i < data.size(); ++i) { for (unsigned int j = 0; j < data[i].size(); ++j) { for (unsigned int k = 0; k < data[i][j].size(); ++k) { for (unsigned int l = 0; l < data[i][j][k].size(); l++) { buf.append(Short::toString(data[i][j][k][l])); buf.append(" "); } } } } buf.append(" </" + name + "> "); } short Parser::getShort(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) throw ConversionException("Error: Missing field \"" + name + "\" or invalid syntax",tableName); try { short data = Short::parseShort(xmlField); return data; } catch (const NumberFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } } vector<short> Parser::get1DShort(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } StringTokenizer t(xmlField," "); try { int ndim = Integer::parseInt(t.nextToken()); if (ndim != 1) { throw ConversionException("Error: Field \"" + name + "\": Invalid array format", tableName); } int dim0 = Integer::parseInt(t.nextToken()); vector<short> value (dim0); if (dim0 == 0) return value; for (int i = 0; i < dim0; ++i) { value[i] = Short::parseShort(t.nextToken()); } if (t.hasMoreTokens()) { throw ConversionException("Error: Field \"" + name + "\": Syntax error.", tableName); } return value; } catch (const NumberFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } catch (const OutOfBoundsException &e) { throw ConversionException("Error: Field \"" + name + "\": Unexpected end of string", tableName); } catch (const TagFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } } vector< vector<short> > Parser::get2DShort(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } StringTokenizer t(xmlField," "); try { int ndim = Integer::parseInt(t.nextToken()); if (ndim != 2) { throw ConversionException("Error: Field \"" + name + "\": Invalid array format", tableName); } int dim0 = Integer::parseInt(t.nextToken()); int dim1 = Integer::parseInt(t.nextToken()); vector< vector<short> > value; if (dim0 == 0 || dim1 == 0) return value; vector<short> v_aux; for (int i = 0; i < dim0; ++i) { v_aux.clear(); for (int j = 0; j < dim1; ++j) { v_aux.push_back(Short::parseShort(t.nextToken())); } value.push_back(v_aux); } if (t.hasMoreTokens()) { throw ConversionException("Error: Field \"" + name + "\": Syntax error.", tableName); } return value; } catch (const NumberFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } catch (const OutOfBoundsException &e) { throw ConversionException("Error: Field \"" + name + "\": Unexpected end of string", tableName); } catch (const TagFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } } vector< vector< vector<short> > > Parser::get3DShort(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } StringTokenizer t(xmlField," "); try { int ndim = Integer::parseInt(t.nextToken()); if (ndim != 3) { throw ConversionException("Error: Field \"" + name + "\": Invalid array format", tableName); } int dim0 = Integer::parseInt(t.nextToken()); int dim1 = Integer::parseInt(t.nextToken()); int dim2 = Integer::parseInt(t.nextToken()); vector< vector< vector<short> > > value ; if (dim0 == 0 || dim1 == 0 || dim2 == 0) return value; vector<vector<short> > vv_aux; vector<short> v_aux; for (int i = 0; i < dim0; ++i) { vv_aux.clear(); for (int j = 0; j < dim1; ++j) { v_aux.clear(); for (int k = 0; k < dim2; ++k) { v_aux.push_back(Short::parseShort(t.nextToken())); } vv_aux.push_back(v_aux); } value.push_back(vv_aux); } if (t.hasMoreTokens()) { throw ConversionException("Error: Field \"" + name + "\": Syntax error.", tableName); } return value; } catch (const NumberFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } catch (const OutOfBoundsException &e) { throw ConversionException("Error: Field \"" + name + "\": Unexpected end of string", tableName); } catch (const TagFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } } vector< vector< vector< vector<short> > > >Parser::get4DShort(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } StringTokenizer t(xmlField," "); try { int ndim = Integer::parseInt(t.nextToken()); if (ndim != 4) { throw ConversionException("Error: Field \"" + name + "\": Invalid array format", tableName); } int dim0 = Integer::parseInt(t.nextToken()); int dim1 = Integer::parseInt(t.nextToken()); int dim2 = Integer::parseInt(t.nextToken()); int dim3 = Integer::parseInt(t.nextToken()); vector<vector< vector< vector<short> > > >value; if (dim0 == 0 || dim1 == 0 || dim2 == 0 || dim3 == 0) return value; vector<vector<vector<short> > >vvv_aux; vector<vector< short> > vv_aux; vector<short> v_aux; for (int i = 0; i < dim0; ++i) { vvv_aux.clear(); for (int j = 0; j < dim1; ++j) { vv_aux.clear(); for (int k = 0; k < dim2; ++k) { v_aux.clear(); for (int l = 0; l < dim3; l++) { v_aux.push_back(Short::parseShort(t.nextToken())); } vv_aux.push_back(v_aux); } vvv_aux.push_back(vv_aux); } value.push_back(vvv_aux); } if (t.hasMoreTokens()) { throw ConversionException("Error: Field \"" + name + "\": Syntax error.", tableName); } return value; } catch (const NumberFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } catch (const OutOfBoundsException &e) { throw ConversionException("Error: Field \"" + name + "\": Unexpected end of string", tableName); } catch (const TagFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } } // Field type: int64_t void Parser::toXML(int64_t data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append(Long::toString(data)); buf.append(" </" + name + "> "); } void Parser::toXML(vector<int64_t> data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append("1 "); buf.append(Integer::toString(data.size())); buf.append(" "); for (unsigned int i = 0; i < data.size(); ++i) { buf.append(Long::toString(data[i])); buf.append(" "); } buf.append(" </" + name + "> "); } void Parser::toXML(vector< vector<int64_t> > data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append("2 "); buf.append(Integer::toString(data.size())); buf.append(" "); buf.append(Integer::toString(data[0].size())); buf.append(" "); for (unsigned int i = 0; i < data.size(); ++i) { for (unsigned int j = 0; j < data[i].size(); ++j) { buf.append(Long::toString(data[i][j])); buf.append(" "); } } buf.append(" </" + name + "> "); } void Parser::toXML(vector< vector< vector<int64_t> > > data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append("3 "); buf.append(Integer::toString(data.size())); buf.append(" "); buf.append(Integer::toString(data[0].size())); buf.append(" "); buf.append(Integer::toString(data[0][0].size())); buf.append(" "); for (unsigned int i = 0; i < data.size(); ++i) { for (unsigned int j = 0; j < data[i].size(); ++j) { for (unsigned int k = 0; k < data[i][j].size(); ++k) { buf.append(Long::toString(data[i][j][k])); buf.append(" "); } } } buf.append(" </" + name + "> "); } void Parser::toXML(vector<vector< vector< vector<int64_t> > > >data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append("4 "); buf.append(Integer::toString(data.size())); buf.append(" "); buf.append(Integer::toString(data[0].size())); buf.append(" "); buf.append(Integer::toString(data[0][0].size())); buf.append(" "); buf.append(Integer::toString(data[0][0][0].size())); buf.append(" "); for (unsigned int i = 0; i < data.size(); ++i) { for (unsigned int j = 0; j < data[i].size(); ++j) { for (unsigned int k = 0; k < data[i][j].size(); ++k) { for (unsigned int l = 0; l < data[i][j][k].size(); l++) { buf.append(Long::toString(data[i][j][k][l])); buf.append(" "); } } } } buf.append(" </" + name + "> "); } int64_t Parser::getLong(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) throw ConversionException("Error: Missing field \"" + name + "\" or invalid syntax",tableName); try { int64_t data = Long::parseLong(xmlField); return data; } catch (const NumberFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } } vector<int64_t> Parser::get1DLong(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } StringTokenizer t(xmlField," "); try { int ndim = Integer::parseInt(t.nextToken()); if (ndim != 1) { throw ConversionException("Error: Field \"" + name + "\": Invalid array format", tableName); } int dim0 = Integer::parseInt(t.nextToken()); vector<int64_t> value (dim0); if (dim0 == 0) return value; for (int i = 0; i < dim0; ++i) { value[i] = Long::parseLong(t.nextToken()); } if (t.hasMoreTokens()) { throw ConversionException("Error: Field \"" + name + "\": Syntax error.", tableName); } return value; } catch (const NumberFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } catch (const OutOfBoundsException &e) { throw ConversionException("Error: Field \"" + name + "\": Unexpected end of string", tableName); } catch (const TagFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } } vector< vector<int64_t> > Parser::get2DLong(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } StringTokenizer t(xmlField," "); try { int ndim = Integer::parseInt(t.nextToken()); if (ndim != 2) { throw ConversionException("Error: Field \"" + name + "\": Invalid array format", tableName); } int dim0 = Integer::parseInt(t.nextToken()); int dim1 = Integer::parseInt(t.nextToken()); vector< vector<int64_t> > value; if (dim0 == 0 || dim1 == 0) return value; vector<int64_t> v_aux; for (int i = 0; i < dim0; ++i) { v_aux.clear(); for (int j = 0; j < dim1; ++j) { v_aux.push_back(Long::parseLong(t.nextToken())); } value.push_back(v_aux); } if (t.hasMoreTokens()) { throw ConversionException("Error: Field \"" + name + "\": Syntax error.", tableName); } return value; } catch (const NumberFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } catch (const OutOfBoundsException &e) { throw ConversionException("Error: Field \"" + name + "\": Unexpected end of string", tableName); } catch (const TagFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } } vector< vector< vector<int64_t> > > Parser::get3DLong(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } StringTokenizer t(xmlField," "); try { int ndim = Integer::parseInt(t.nextToken()); if (ndim != 3) { throw ConversionException("Error: Field \"" + name + "\": Invalid array format", tableName); } int dim0 = Integer::parseInt(t.nextToken()); int dim1 = Integer::parseInt(t.nextToken()); int dim2 = Integer::parseInt(t.nextToken()); vector< vector< vector<int64_t> > > value ; if (dim0 == 0 || dim1 == 0 || dim2 == 0) return value; vector<vector<int64_t> > vv_aux; vector<int64_t> v_aux; for (int i = 0; i < dim0; ++i) { vv_aux.clear(); for (int j = 0; j < dim1; ++j) { v_aux.clear(); for (int k = 0; k < dim2; ++k) { v_aux.push_back(Long::parseLong(t.nextToken())); } vv_aux.push_back(v_aux); } value.push_back(vv_aux); } if (t.hasMoreTokens()) { throw ConversionException("Error: Field \"" + name + "\": Syntax error.", tableName); } return value; } catch (const NumberFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } catch (const OutOfBoundsException &e) { throw ConversionException("Error: Field \"" + name + "\": Unexpected end of string", tableName); } catch (const TagFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } } vector< vector< vector< vector<int64_t> > > >Parser::get4DLong(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } StringTokenizer t(xmlField," "); try { int ndim = Integer::parseInt(t.nextToken()); if (ndim != 4) { throw ConversionException("Error: Field \"" + name + "\": Invalid array format", tableName); } int dim0 = Integer::parseInt(t.nextToken()); int dim1 = Integer::parseInt(t.nextToken()); int dim2 = Integer::parseInt(t.nextToken()); int dim3 = Integer::parseInt(t.nextToken()); vector<vector< vector< vector<int64_t> > > >value; if (dim0 == 0 || dim1 == 0 || dim2 == 0 || dim3 == 0) return value; vector<vector<vector<int64_t> > >vvv_aux; vector<vector< int64_t> > vv_aux; vector<int64_t> v_aux; for (int i = 0; i < dim0; ++i) { vvv_aux.clear(); for (int j = 0; j < dim1; ++j) { vv_aux.clear(); for (int k = 0; k < dim2; ++k) { v_aux.clear(); for (int l = 0; l < dim3; l++) { v_aux.push_back(Long::parseLong(t.nextToken())); } vv_aux.push_back(v_aux); } vvv_aux.push_back(vv_aux); } value.push_back(vvv_aux); } if (t.hasMoreTokens()) { throw ConversionException("Error: Field \"" + name + "\": Syntax error.", tableName); } return value; } catch (const NumberFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } catch (const OutOfBoundsException &e) { throw ConversionException("Error: Field \"" + name + "\": Unexpected end of string", tableName); } catch (const TagFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } } // Field type: char void Parser::toXML(char data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append(Byte::toString(data)); buf.append(" </" + name + "> "); } void Parser::toXML(vector<char> data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append("1 "); buf.append(Integer::toString(data.size())); buf.append(" "); for (unsigned int i = 0; i < data.size(); ++i) { buf.append(Byte::toString(data[i])); buf.append(" "); } buf.append(" </" + name + "> "); } void Parser::toXML(vector< vector<char> > data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append("2 "); buf.append(Integer::toString(data.size())); buf.append(" "); buf.append(Integer::toString(data[0].size())); buf.append(" "); for (unsigned int i = 0; i < data.size(); ++i) { for (unsigned int j = 0; j < data[i].size(); ++j) { buf.append(Byte::toString(data[i][j])); buf.append(" "); } } buf.append(" </" + name + "> "); } void Parser::toXML(vector< vector< vector<char> > > data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append("3 "); buf.append(Integer::toString(data.size())); buf.append(" "); buf.append(Integer::toString(data[0].size())); buf.append(" "); buf.append(Integer::toString(data[0][0].size())); buf.append(" "); for (unsigned int i = 0; i < data.size(); ++i) { for (unsigned int j = 0; j < data[i].size(); ++j) { for (unsigned int k = 0; k < data[i][j].size(); ++k) { buf.append(Byte::toString(data[i][j][k])); buf.append(" "); } } } buf.append(" </" + name + "> "); } void Parser::toXML(vector<vector< vector< vector<char> > > >data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append("4 "); buf.append(Integer::toString(data.size())); buf.append(" "); buf.append(Integer::toString(data[0].size())); buf.append(" "); buf.append(Integer::toString(data[0][0].size())); buf.append(" "); buf.append(Integer::toString(data[0][0][0].size())); buf.append(" "); for (unsigned int i = 0; i < data.size(); ++i) { for (unsigned int j = 0; j < data[i].size(); ++j) { for (unsigned int k = 0; k < data[i][j].size(); ++k) { for (unsigned int l = 0; l < data[i][j][k].size(); l++) { buf.append(Byte::toString(data[i][j][k][l])); buf.append(" "); } } } } buf.append(" </" + name + "> "); } char Parser::getByte(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) throw ConversionException("Error: Missing field \"" + name + "\" or invalid syntax",tableName); try { char data = Byte::parseByte(xmlField); return data; } catch (const NumberFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } } vector<char> Parser::get1DByte(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } StringTokenizer t(xmlField," "); try { int ndim = Integer::parseInt(t.nextToken()); if (ndim != 1) { throw ConversionException("Error: Field \"" + name + "\": Invalid array format", tableName); } int dim0 = Integer::parseInt(t.nextToken()); vector<char> value (dim0); if (dim0 == 0) return value; for (int i = 0; i < dim0; ++i) { value[i] = Byte::parseByte(t.nextToken()); } if (t.hasMoreTokens()) { throw ConversionException("Error: Field \"" + name + "\": Syntax error.", tableName); } return value; } catch (const NumberFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } catch (const OutOfBoundsException &e) { throw ConversionException("Error: Field \"" + name + "\": Unexpected end of string", tableName); } catch (const TagFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } } vector< vector<char> > Parser::get2DByte(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } StringTokenizer t(xmlField," "); try { int ndim = Integer::parseInt(t.nextToken()); if (ndim != 2) { throw ConversionException("Error: Field \"" + name + "\": Invalid array format", tableName); } int dim0 = Integer::parseInt(t.nextToken()); int dim1 = Integer::parseInt(t.nextToken()); vector< vector<char> > value; if (dim0 == 0 || dim1 == 0) return value; vector<char> v_aux; for (int i = 0; i < dim0; ++i) { v_aux.clear(); for (int j = 0; j < dim1; ++j) { v_aux.push_back(Byte::parseByte(t.nextToken())); } value.push_back(v_aux); } if (t.hasMoreTokens()) { throw ConversionException("Error: Field \"" + name + "\": Syntax error.", tableName); } return value; } catch (const NumberFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } catch (const OutOfBoundsException &e) { throw ConversionException("Error: Field \"" + name + "\": Unexpected end of string", tableName); } catch (const TagFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } } vector< vector< vector<char> > > Parser::get3DByte(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } StringTokenizer t(xmlField," "); try { int ndim = Integer::parseInt(t.nextToken()); if (ndim != 3) { throw ConversionException("Error: Field \"" + name + "\": Invalid array format", tableName); } int dim0 = Integer::parseInt(t.nextToken()); int dim1 = Integer::parseInt(t.nextToken()); int dim2 = Integer::parseInt(t.nextToken()); vector< vector< vector<char> > > value ; if (dim0 == 0 || dim1 == 0 || dim2 == 0) return value; vector<vector<char> > vv_aux; vector<char> v_aux; for (int i = 0; i < dim0; ++i) { vv_aux.clear(); for (int j = 0; j < dim1; ++j) { v_aux.clear(); for (int k = 0; k < dim2; ++k) { v_aux.push_back(Byte::parseByte(t.nextToken())); } vv_aux.push_back(v_aux); } value.push_back(vv_aux); } if (t.hasMoreTokens()) { throw ConversionException("Error: Field \"" + name + "\": Syntax error.", tableName); } return value; } catch (const NumberFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } catch (const OutOfBoundsException &e) { throw ConversionException("Error: Field \"" + name + "\": Unexpected end of string", tableName); } catch (const TagFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } } vector< vector< vector< vector<char> > > >Parser::get4DByte(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } StringTokenizer t(xmlField," "); try { int ndim = Integer::parseInt(t.nextToken()); if (ndim != 4) { throw ConversionException("Error: Field \"" + name + "\": Invalid array format", tableName); } int dim0 = Integer::parseInt(t.nextToken()); int dim1 = Integer::parseInt(t.nextToken()); int dim2 = Integer::parseInt(t.nextToken()); int dim3 = Integer::parseInt(t.nextToken()); vector<vector< vector< vector<char> > > >value; if (dim0 == 0 || dim1 == 0 || dim2 == 0 || dim3 == 0) return value; vector<vector<vector<char> > >vvv_aux; vector<vector< char> > vv_aux; vector<char> v_aux; for (int i = 0; i < dim0; ++i) { vvv_aux.clear(); for (int j = 0; j < dim1; ++j) { vv_aux.clear(); for (int k = 0; k < dim2; ++k) { v_aux.clear(); for (int l = 0; l < dim3; l++) { v_aux.push_back(Byte::parseByte(t.nextToken())); } vv_aux.push_back(v_aux); } vvv_aux.push_back(vv_aux); } value.push_back(vvv_aux); } if (t.hasMoreTokens()) { throw ConversionException("Error: Field \"" + name + "\": Syntax error.", tableName); } return value; } catch (const NumberFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } catch (const OutOfBoundsException &e) { throw ConversionException("Error: Field \"" + name + "\": Unexpected end of string", tableName); } catch (const TagFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } } // Field type: float void Parser::toXML(float data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append(Float::toString(data)); buf.append(" </" + name + "> "); } void Parser::toXML(vector<float> data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append("1 "); buf.append(Integer::toString(data.size())); buf.append(" "); for (unsigned int i = 0; i < data.size(); ++i) { buf.append(Float::toString(data[i])); buf.append(" "); } buf.append(" </" + name + "> "); } void Parser::toXML(vector< vector<float> > data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append("2 "); buf.append(Integer::toString(data.size())); buf.append(" "); buf.append(Integer::toString(data[0].size())); buf.append(" "); for (unsigned int i = 0; i < data.size(); ++i) { for (unsigned int j = 0; j < data[i].size(); ++j) { buf.append(Float::toString(data[i][j])); buf.append(" "); } } buf.append(" </" + name + "> "); } void Parser::toXML(vector< vector< vector<float> > > data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append("3 "); buf.append(Integer::toString(data.size())); buf.append(" "); buf.append(Integer::toString(data[0].size())); buf.append(" "); buf.append(Integer::toString(data[0][0].size())); buf.append(" "); for (unsigned int i = 0; i < data.size(); ++i) { for (unsigned int j = 0; j < data[i].size(); ++j) { for (unsigned int k = 0; k < data[i][j].size(); ++k) { buf.append(Float::toString(data[i][j][k])); buf.append(" "); } } } buf.append(" </" + name + "> "); } void Parser::toXML(vector<vector< vector< vector<float> > > >data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append("4 "); buf.append(Integer::toString(data.size())); buf.append(" "); buf.append(Integer::toString(data[0].size())); buf.append(" "); buf.append(Integer::toString(data[0][0].size())); buf.append(" "); buf.append(Integer::toString(data[0][0][0].size())); buf.append(" "); for (unsigned int i = 0; i < data.size(); ++i) { for (unsigned int j = 0; j < data[i].size(); ++j) { for (unsigned int k = 0; k < data[i][j].size(); ++k) { for (unsigned int l = 0; l < data[i][j][k].size(); l++) { buf.append(Float::toString(data[i][j][k][l])); buf.append(" "); } } } } buf.append(" </" + name + "> "); } float Parser::getFloat(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) throw ConversionException("Error: Missing field \"" + name + "\" or invalid syntax",tableName); try { float data = Float::parseFloat(xmlField); return data; } catch (const NumberFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } } vector<float> Parser::get1DFloat(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } StringTokenizer t(xmlField," "); try { int ndim = Integer::parseInt(t.nextToken()); if (ndim != 1) { throw ConversionException("Error: Field \"" + name + "\": Invalid array format", tableName); } int dim0 = Integer::parseInt(t.nextToken()); vector<float> value (dim0); if (dim0 == 0) return value; for (int i = 0; i < dim0; ++i) { value[i] = Float::parseFloat(t.nextToken()); } if (t.hasMoreTokens()) { throw ConversionException("Error: Field \"" + name + "\": Syntax error.", tableName); } return value; } catch (const NumberFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } catch (const OutOfBoundsException &e) { throw ConversionException("Error: Field \"" + name + "\": Unexpected end of string", tableName); } catch (const TagFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } } vector< vector<float> > Parser::get2DFloat(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } StringTokenizer t(xmlField," "); try { int ndim = Integer::parseInt(t.nextToken()); if (ndim != 2) { throw ConversionException("Error: Field \"" + name + "\": Invalid array format", tableName); } int dim0 = Integer::parseInt(t.nextToken()); int dim1 = Integer::parseInt(t.nextToken()); vector< vector<float> > value; if (dim0 == 0 || dim1 == 0) return value; vector<float> v_aux; for (int i = 0; i < dim0; ++i) { v_aux.clear(); for (int j = 0; j < dim1; ++j) { v_aux.push_back(Float::parseFloat(t.nextToken())); } value.push_back(v_aux); } if (t.hasMoreTokens()) { throw ConversionException("Error: Field \"" + name + "\": Syntax error.", tableName); } return value; } catch (const NumberFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } catch (const OutOfBoundsException &e) { throw ConversionException("Error: Field \"" + name + "\": Unexpected end of string", tableName); } catch (const TagFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } } vector< vector< vector<float> > > Parser::get3DFloat(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } StringTokenizer t(xmlField," "); try { int ndim = Integer::parseInt(t.nextToken()); if (ndim != 3) { throw ConversionException("Error: Field \"" + name + "\": Invalid array format", tableName); } int dim0 = Integer::parseInt(t.nextToken()); int dim1 = Integer::parseInt(t.nextToken()); int dim2 = Integer::parseInt(t.nextToken()); vector< vector< vector<float> > > value ; if (dim0 == 0 || dim1 == 0 || dim2 == 0) return value; vector<vector<float> > vv_aux; vector<float> v_aux; for (int i = 0; i < dim0; ++i) { vv_aux.clear(); for (int j = 0; j < dim1; ++j) { v_aux.clear(); for (int k = 0; k < dim2; ++k) { v_aux.push_back(Float::parseFloat(t.nextToken())); } vv_aux.push_back(v_aux); } value.push_back(vv_aux); } if (t.hasMoreTokens()) { throw ConversionException("Error: Field \"" + name + "\": Syntax error.", tableName); } return value; } catch (const NumberFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } catch (const OutOfBoundsException &e) { throw ConversionException("Error: Field \"" + name + "\": Unexpected end of string", tableName); } catch (const TagFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } } vector< vector< vector< vector<float> > > >Parser::get4DFloat(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } StringTokenizer t(xmlField," "); try { int ndim = Integer::parseInt(t.nextToken()); if (ndim != 4) { throw ConversionException("Error: Field \"" + name + "\": Invalid array format", tableName); } int dim0 = Integer::parseInt(t.nextToken()); int dim1 = Integer::parseInt(t.nextToken()); int dim2 = Integer::parseInt(t.nextToken()); int dim3 = Integer::parseInt(t.nextToken()); vector<vector< vector< vector<float> > > >value; if (dim0 == 0 || dim1 == 0 || dim2 == 0 || dim3 == 0) return value; vector<vector<vector<float> > >vvv_aux; vector<vector< float> > vv_aux; vector<float> v_aux; for (int i = 0; i < dim0; ++i) { vvv_aux.clear(); for (int j = 0; j < dim1; ++j) { vv_aux.clear(); for (int k = 0; k < dim2; ++k) { v_aux.clear(); for (int l = 0; l < dim3; l++) { v_aux.push_back(Float::parseFloat(t.nextToken())); } vv_aux.push_back(v_aux); } vvv_aux.push_back(vv_aux); } value.push_back(vvv_aux); } if (t.hasMoreTokens()) { throw ConversionException("Error: Field \"" + name + "\": Syntax error.", tableName); } return value; } catch (const NumberFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } catch (const OutOfBoundsException &e) { throw ConversionException("Error: Field \"" + name + "\": Unexpected end of string", tableName); } catch (const TagFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } } // Field type: double void Parser::toXML(double data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append(Double::toString(data)); buf.append(" </" + name + "> "); } void Parser::toXML(vector<double> data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append("1 "); buf.append(Integer::toString(data.size())); buf.append(" "); for (unsigned int i = 0; i < data.size(); ++i) { buf.append(Double::toString(data[i])); buf.append(" "); } buf.append(" </" + name + "> "); } void Parser::toXML(vector< vector<double> > data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append("2 "); buf.append(Integer::toString(data.size())); buf.append(" "); buf.append(Integer::toString(data[0].size())); buf.append(" "); for (unsigned int i = 0; i < data.size(); ++i) { for (unsigned int j = 0; j < data[i].size(); ++j) { buf.append(Double::toString(data[i][j])); buf.append(" "); } } buf.append(" </" + name + "> "); } void Parser::toXML(vector< vector< vector<double> > > data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append("3 "); buf.append(Integer::toString(data.size())); buf.append(" "); buf.append(Integer::toString(data[0].size())); buf.append(" "); buf.append(Integer::toString(data[0][0].size())); buf.append(" "); for (unsigned int i = 0; i < data.size(); ++i) { for (unsigned int j = 0; j < data[i].size(); ++j) { for (unsigned int k = 0; k < data[i][j].size(); ++k) { buf.append(Double::toString(data[i][j][k])); buf.append(" "); } } } buf.append(" </" + name + "> "); } void Parser::toXML(vector<vector< vector< vector<double> > > >data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append("4 "); buf.append(Integer::toString(data.size())); buf.append(" "); buf.append(Integer::toString(data[0].size())); buf.append(" "); buf.append(Integer::toString(data[0][0].size())); buf.append(" "); buf.append(Integer::toString(data[0][0][0].size())); buf.append(" "); for (unsigned int i = 0; i < data.size(); ++i) { for (unsigned int j = 0; j < data[i].size(); ++j) { for (unsigned int k = 0; k < data[i][j].size(); ++k) { for (unsigned int l = 0; l < data[i][j][k].size(); l++) { buf.append(Double::toString(data[i][j][k][l])); buf.append(" "); } } } } buf.append(" </" + name + "> "); } double Parser::getDouble(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) throw ConversionException("Error: Missing field \"" + name + "\" or invalid syntax",tableName); try { double data = Double::parseDouble(xmlField); return data; } catch (const NumberFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } } vector<double> Parser::get1DDouble(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } StringTokenizer t(xmlField," "); try { int ndim = Integer::parseInt(t.nextToken()); if (ndim != 1) { throw ConversionException("Error: Field \"" + name + "\": Invalid array format", tableName); } int dim0 = Integer::parseInt(t.nextToken()); vector<double> value (dim0); if (dim0 == 0) return value; for (int i = 0; i < dim0; ++i) { value[i] = Double::parseDouble(t.nextToken()); } if (t.hasMoreTokens()) { throw ConversionException("Error: Field \"" + name + "\": Syntax error.", tableName); } return value; } catch (const NumberFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } catch (const OutOfBoundsException &e) { throw ConversionException("Error: Field \"" + name + "\": Unexpected end of string", tableName); } catch (const TagFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } } vector< vector<double> > Parser::get2DDouble(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } StringTokenizer t(xmlField," "); try { int ndim = Integer::parseInt(t.nextToken()); if (ndim != 2) { throw ConversionException("Error: Field \"" + name + "\": Invalid array format", tableName); } int dim0 = Integer::parseInt(t.nextToken()); int dim1 = Integer::parseInt(t.nextToken()); vector< vector<double> > value; if (dim0 == 0 || dim1 == 0) return value; vector<double> v_aux; for (int i = 0; i < dim0; ++i) { v_aux.clear(); for (int j = 0; j < dim1; ++j) { v_aux.push_back(Double::parseDouble(t.nextToken())); } value.push_back(v_aux); } if (t.hasMoreTokens()) { throw ConversionException("Error: Field \"" + name + "\": Syntax error.", tableName); } return value; } catch (const NumberFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } catch (const OutOfBoundsException &e) { throw ConversionException("Error: Field \"" + name + "\": Unexpected end of string", tableName); } catch (const TagFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } } vector< vector< vector<double> > > Parser::get3DDouble(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } StringTokenizer t(xmlField," "); try { int ndim = Integer::parseInt(t.nextToken()); if (ndim != 3) { throw ConversionException("Error: Field \"" + name + "\": Invalid array format", tableName); } int dim0 = Integer::parseInt(t.nextToken()); int dim1 = Integer::parseInt(t.nextToken()); int dim2 = Integer::parseInt(t.nextToken()); vector< vector< vector<double> > > value ; if (dim0 == 0 || dim1 == 0 || dim2 == 0) return value; vector<vector<double> > vv_aux; vector<double> v_aux; for (int i = 0; i < dim0; ++i) { vv_aux.clear(); for (int j = 0; j < dim1; ++j) { v_aux.clear(); for (int k = 0; k < dim2; ++k) { v_aux.push_back(Double::parseDouble(t.nextToken())); } vv_aux.push_back(v_aux); } value.push_back(vv_aux); } if (t.hasMoreTokens()) { throw ConversionException("Error: Field \"" + name + "\": Syntax error.", tableName); } return value; } catch (const NumberFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } catch (const OutOfBoundsException &e) { throw ConversionException("Error: Field \"" + name + "\": Unexpected end of string", tableName); } catch (const TagFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } } vector< vector< vector< vector<double> > > >Parser::get4DDouble(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } StringTokenizer t(xmlField," "); try { int ndim = Integer::parseInt(t.nextToken()); if (ndim != 4) { throw ConversionException("Error: Field \"" + name + "\": Invalid array format", tableName); } int dim0 = Integer::parseInt(t.nextToken()); int dim1 = Integer::parseInt(t.nextToken()); int dim2 = Integer::parseInt(t.nextToken()); int dim3 = Integer::parseInt(t.nextToken()); vector<vector< vector< vector<double> > > >value; if (dim0 == 0 || dim1 == 0 || dim2 == 0 || dim3 == 0) return value; vector<vector<vector<double> > >vvv_aux; vector<vector< double> > vv_aux; vector<double> v_aux; for (int i = 0; i < dim0; ++i) { vvv_aux.clear(); for (int j = 0; j < dim1; ++j) { vv_aux.clear(); for (int k = 0; k < dim2; ++k) { v_aux.clear(); for (int l = 0; l < dim3; l++) { v_aux.push_back(Double::parseDouble(t.nextToken())); } vv_aux.push_back(v_aux); } vvv_aux.push_back(vv_aux); } value.push_back(vvv_aux); } if (t.hasMoreTokens()) { throw ConversionException("Error: Field \"" + name + "\": Syntax error.", tableName); } return value; } catch (const NumberFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } catch (const OutOfBoundsException &e) { throw ConversionException("Error: Field \"" + name + "\": Unexpected end of string", tableName); } catch (const TagFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } } // Field type: unsigned char void Parser::toXML(unsigned char data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append(Character::toString(data)); buf.append(" </" + name + "> "); } void Parser::toXML(vector<unsigned char> data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append("1 "); buf.append(Integer::toString(data.size())); buf.append(" "); for (unsigned int i = 0; i < data.size(); ++i) { buf.append(Character::toString(data[i])); buf.append(" "); } buf.append(" </" + name + "> "); } void Parser::toXML(vector< vector<unsigned char> > data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append("2 "); buf.append(Integer::toString(data.size())); buf.append(" "); buf.append(Integer::toString(data[0].size())); buf.append(" "); for (unsigned int i = 0; i < data.size(); ++i) { for (unsigned int j = 0; j < data[i].size(); ++j) { buf.append(Character::toString(data[i][j])); buf.append(" "); } } buf.append(" </" + name + "> "); } void Parser::toXML(vector< vector< vector<unsigned char> > > data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append("3 "); buf.append(Integer::toString(data.size())); buf.append(" "); buf.append(Integer::toString(data[0].size())); buf.append(" "); buf.append(Integer::toString(data[0][0].size())); buf.append(" "); for (unsigned int i = 0; i < data.size(); ++i) { for (unsigned int j = 0; j < data[i].size(); ++j) { for (unsigned int k = 0; k < data[i][j].size(); ++k) { buf.append(Character::toString(data[i][j][k])); buf.append(" "); } } } buf.append(" </" + name + "> "); } void Parser::toXML(vector<vector< vector< vector<unsigned char> > > >data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append("4 "); buf.append(Integer::toString(data.size())); buf.append(" "); buf.append(Integer::toString(data[0].size())); buf.append(" "); buf.append(Integer::toString(data[0][0].size())); buf.append(" "); buf.append(Integer::toString(data[0][0][0].size())); buf.append(" "); for (unsigned int i = 0; i < data.size(); ++i) { for (unsigned int j = 0; j < data[i].size(); ++j) { for (unsigned int k = 0; k < data[i][j].size(); ++k) { for (unsigned int l = 0; l < data[i][j][k].size(); l++) { buf.append(Character::toString(data[i][j][k][l])); buf.append(" "); } } } } buf.append(" </" + name + "> "); } unsigned char Parser::getCharacter(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) throw ConversionException("Error: Missing field \"" + name + "\" or invalid syntax",tableName); return xmlField.at(0); } vector<unsigned char> Parser::get1DCharacter(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } StringTokenizer t(xmlField," "); try { int ndim = Integer::parseInt(t.nextToken()); if (ndim != 1) { throw ConversionException("Error: Field \"" + name + "\": Invalid array format", tableName); } int dim0 = Integer::parseInt(t.nextToken()); vector<unsigned char> value (dim0); if (dim0 == 0) return value; for (int i = 0; i < dim0; ++i) { value[i] = t.nextToken().at(0); } if (t.hasMoreTokens()) { throw ConversionException("Error: Field \"" + name + "\": Syntax error.", tableName); } return value; } catch (const NumberFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } catch (const OutOfBoundsException &e) { throw ConversionException("Error: Field \"" + name + "\": Unexpected end of string", tableName); } catch (const TagFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } } vector< vector<unsigned char> > Parser::get2DCharacter(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } StringTokenizer t(xmlField," "); try { int ndim = Integer::parseInt(t.nextToken()); if (ndim != 2) { throw ConversionException("Error: Field \"" + name + "\": Invalid array format", tableName); } int dim0 = Integer::parseInt(t.nextToken()); int dim1 = Integer::parseInt(t.nextToken()); vector< vector<unsigned char> > value; if (dim0 == 0 || dim1 == 0) return value; vector<unsigned char> v_aux; for (int i = 0; i < dim0; ++i) { v_aux.clear(); for (int j = 0; j < dim1; ++j) { v_aux.push_back(t.nextToken().at(0)); } value.push_back(v_aux); } if (t.hasMoreTokens()) { throw ConversionException("Error: Field \"" + name + "\": Syntax error.", tableName); } return value; } catch (const NumberFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } catch (const OutOfBoundsException &e) { throw ConversionException("Error: Field \"" + name + "\": Unexpected end of string", tableName); } catch (const TagFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } } vector< vector< vector<unsigned char> > > Parser::get3DCharacter(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } StringTokenizer t(xmlField," "); try { int ndim = Integer::parseInt(t.nextToken()); if (ndim != 3) { throw ConversionException("Error: Field \"" + name + "\": Invalid array format", tableName); } int dim0 = Integer::parseInt(t.nextToken()); int dim1 = Integer::parseInt(t.nextToken()); int dim2 = Integer::parseInt(t.nextToken()); vector< vector< vector<unsigned char> > > value ; if (dim0 == 0 || dim1 == 0 || dim2 == 0) return value; vector<vector<unsigned char> > vv_aux; vector<unsigned char> v_aux; for (int i = 0; i < dim0; ++i) { vv_aux.clear(); for (int j = 0; j < dim1; ++j) { v_aux.clear(); for (int k = 0; k < dim2; ++k) { v_aux.push_back( t.nextToken().at(0)); } vv_aux.push_back(v_aux); } value.push_back(vv_aux); } if (t.hasMoreTokens()) { throw ConversionException("Error: Field \"" + name + "\": Syntax error.", tableName); } return value; } catch (const NumberFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } catch (const OutOfBoundsException &e) { throw ConversionException("Error: Field \"" + name + "\": Unexpected end of string", tableName); } catch (const TagFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } } vector< vector< vector< vector<unsigned char> > > >Parser::get4DCharacter(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } StringTokenizer t(xmlField," "); try { int ndim = Integer::parseInt(t.nextToken()); if (ndim != 4) { throw ConversionException("Error: Field \"" + name + "\": Invalid array format", tableName); } int dim0 = Integer::parseInt(t.nextToken()); int dim1 = Integer::parseInt(t.nextToken()); int dim2 = Integer::parseInt(t.nextToken()); int dim3 = Integer::parseInt(t.nextToken()); vector<vector< vector< vector<unsigned char> > > >value; if (dim0 == 0 || dim1 == 0 || dim2 == 0 || dim3 == 0) return value; vector<vector<vector<unsigned char> > >vvv_aux; vector<vector< unsigned char> > vv_aux; vector<unsigned char> v_aux; for (int i = 0; i < dim0; ++i) { vvv_aux.clear(); for (int j = 0; j < dim1; ++j) { vv_aux.clear(); for (int k = 0; k < dim2; ++k) { v_aux.clear(); for (int l = 0; l < dim3; l++) { v_aux.push_back( t.nextToken().at(0)); } vv_aux.push_back(v_aux); } vvv_aux.push_back(vv_aux); } value.push_back(vvv_aux); } if (t.hasMoreTokens()) { throw ConversionException("Error: Field \"" + name + "\": Syntax error.", tableName); } return value; } catch (const NumberFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } catch (const OutOfBoundsException &e) { throw ConversionException("Error: Field \"" + name + "\": Unexpected end of string", tableName); } catch (const TagFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } } // Field type: bool void Parser::toXML(bool data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append(Boolean::toString(data)); buf.append(" </" + name + "> "); } void Parser::toXML(vector<bool> data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append("1 "); buf.append(Integer::toString(data.size())); buf.append(" "); for (unsigned int i = 0; i < data.size(); ++i) { buf.append(Boolean::toString(data[i])); buf.append(" "); } buf.append(" </" + name + "> "); } void Parser::toXML(vector< vector<bool> > data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append("2 "); buf.append(Integer::toString(data.size())); buf.append(" "); buf.append(Integer::toString(data[0].size())); buf.append(" "); for (unsigned int i = 0; i < data.size(); ++i) { for (unsigned int j = 0; j < data[i].size(); ++j) { buf.append(Boolean::toString(data[i][j])); buf.append(" "); } } buf.append(" </" + name + "> "); } void Parser::toXML(vector< vector< vector<bool> > > data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append("3 "); buf.append(Integer::toString(data.size())); buf.append(" "); buf.append(Integer::toString(data[0].size())); buf.append(" "); buf.append(Integer::toString(data[0][0].size())); buf.append(" "); for (unsigned int i = 0; i < data.size(); ++i) { for (unsigned int j = 0; j < data[i].size(); ++j) { for (unsigned int k = 0; k < data[i][j].size(); ++k) { buf.append(Boolean::toString(data[i][j][k])); buf.append(" "); } } } buf.append(" </" + name + "> "); } void Parser::toXML(vector<vector< vector< vector<bool> > > >data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append("4 "); buf.append(Integer::toString(data.size())); buf.append(" "); buf.append(Integer::toString(data[0].size())); buf.append(" "); buf.append(Integer::toString(data[0][0].size())); buf.append(" "); buf.append(Integer::toString(data[0][0][0].size())); buf.append(" "); for (unsigned int i = 0; i < data.size(); ++i) { for (unsigned int j = 0; j < data[i].size(); ++j) { for (unsigned int k = 0; k < data[i][j].size(); ++k) { for (unsigned int l = 0; l < data[i][j][k].size(); l++) { buf.append(Boolean::toString(data[i][j][k][l])); buf.append(" "); } } } } buf.append(" </" + name + "> "); } bool Parser::getBoolean(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) throw ConversionException("Error: Missing field \"" + name + "\" or invalid syntax",tableName); try { bool data = Boolean::parseBoolean(xmlField); return data; } catch (const NumberFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } } vector<bool> Parser::get1DBoolean(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } StringTokenizer t(xmlField," "); try { int ndim = Integer::parseInt(t.nextToken()); if (ndim != 1) { throw ConversionException("Error: Field \"" + name + "\": Invalid array format", tableName); } int dim0 = Integer::parseInt(t.nextToken()); vector<bool> value (dim0); if (dim0 == 0) return value; for (int i = 0; i < dim0; ++i) { value[i] = Boolean::parseBoolean(t.nextToken()); } if (t.hasMoreTokens()) { throw ConversionException("Error: Field \"" + name + "\": Syntax error.", tableName); } return value; } catch (const NumberFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } catch (const OutOfBoundsException &e) { throw ConversionException("Error: Field \"" + name + "\": Unexpected end of string", tableName); } catch (const TagFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } } vector< vector<bool> > Parser::get2DBoolean(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } StringTokenizer t(xmlField," "); try { int ndim = Integer::parseInt(t.nextToken()); if (ndim != 2) { throw ConversionException("Error: Field \"" + name + "\": Invalid array format", tableName); } int dim0 = Integer::parseInt(t.nextToken()); int dim1 = Integer::parseInt(t.nextToken()); vector< vector<bool> > value; if (dim0 == 0 || dim1 == 0) return value; vector<bool> v_aux; for (int i = 0; i < dim0; ++i) { v_aux.clear(); for (int j = 0; j < dim1; ++j) { v_aux.push_back(Boolean::parseBoolean(t.nextToken())); } value.push_back(v_aux); } if (t.hasMoreTokens()) { throw ConversionException("Error: Field \"" + name + "\": Syntax error.", tableName); } return value; } catch (const NumberFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } catch (const OutOfBoundsException &e) { throw ConversionException("Error: Field \"" + name + "\": Unexpected end of string", tableName); } catch (const TagFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } } vector< vector< vector<bool> > > Parser::get3DBoolean(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } StringTokenizer t(xmlField," "); try { int ndim = Integer::parseInt(t.nextToken()); if (ndim != 3) { throw ConversionException("Error: Field \"" + name + "\": Invalid array format", tableName); } int dim0 = Integer::parseInt(t.nextToken()); int dim1 = Integer::parseInt(t.nextToken()); int dim2 = Integer::parseInt(t.nextToken()); vector< vector< vector<bool> > > value ; if (dim0 == 0 || dim1 == 0 || dim2 == 0) return value; vector<vector<bool> > vv_aux; vector<bool> v_aux; for (int i = 0; i < dim0; ++i) { vv_aux.clear(); for (int j = 0; j < dim1; ++j) { v_aux.clear(); for (int k = 0; k < dim2; ++k) { v_aux.push_back(Boolean::parseBoolean(t.nextToken())); } vv_aux.push_back(v_aux); } value.push_back(vv_aux); } if (t.hasMoreTokens()) { throw ConversionException("Error: Field \"" + name + "\": Syntax error.", tableName); } return value; } catch (const NumberFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } catch (const OutOfBoundsException &e) { throw ConversionException("Error: Field \"" + name + "\": Unexpected end of string", tableName); } catch (const TagFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } } vector< vector< vector< vector<bool> > > >Parser::get4DBoolean(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } StringTokenizer t(xmlField," "); try { int ndim = Integer::parseInt(t.nextToken()); if (ndim != 4) { throw ConversionException("Error: Field \"" + name + "\": Invalid array format", tableName); } int dim0 = Integer::parseInt(t.nextToken()); int dim1 = Integer::parseInt(t.nextToken()); int dim2 = Integer::parseInt(t.nextToken()); int dim3 = Integer::parseInt(t.nextToken()); vector<vector< vector< vector<bool> > > >value; if (dim0 == 0 || dim1 == 0 || dim2 == 0 || dim3 == 0) return value; vector<vector<vector<bool> > >vvv_aux; vector<vector< bool> > vv_aux; vector<bool> v_aux; for (int i = 0; i < dim0; ++i) { vvv_aux.clear(); for (int j = 0; j < dim1; ++j) { vv_aux.clear(); for (int k = 0; k < dim2; ++k) { v_aux.clear(); for (int l = 0; l < dim3; l++) { v_aux.push_back(Boolean::parseBoolean(t.nextToken())); } vv_aux.push_back(v_aux); } vvv_aux.push_back(vv_aux); } value.push_back(vvv_aux); } if (t.hasMoreTokens()) { throw ConversionException("Error: Field \"" + name + "\": Syntax error.", tableName); } return value; } catch (const NumberFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } catch (const OutOfBoundsException &e) { throw ConversionException("Error: Field \"" + name + "\": Unexpected end of string", tableName); } catch (const TagFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } } // Field type: std::string void Parser::toXML(std::string data, const string &name, string &buf) { buf.append("<" + name + "> "); if (data.size()>0) buf.append(Parser::encode(data)); buf.append(" </" + name + "> "); } void Parser::toXML(vector<std::string> data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append("1 "); buf.append(Integer::toString(data.size())); buf.append(" "); for (unsigned int i = 0; i < data.size(); ++i) { buf.append("\""); if (data[i].size()>0) buf.append(Parser::encode(data[i])); buf.append("\""); buf.append(" "); } buf.append(" </" + name + "> "); } void Parser::toXML(vector< vector<std::string> > data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append("2 "); buf.append(Integer::toString(data.size())); buf.append(" "); buf.append(Integer::toString(data[0].size())); buf.append(" "); for (unsigned int i = 0; i < data.size(); ++i) { for (unsigned int j = 0; j < data[i].size(); ++j) { buf.append("\""); if(data[i][j].size()>0) buf.append(Parser::encode(data[i][j])); buf.append("\""); buf.append(" "); } } buf.append(" </" + name + "> "); } void Parser::toXML(vector< vector< vector<std::string> > > data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append("3 "); buf.append(Integer::toString(data.size())); buf.append(" "); buf.append(Integer::toString(data[0].size())); buf.append(" "); buf.append(Integer::toString(data[0][0].size())); buf.append(" "); for (unsigned int i = 0; i < data.size(); ++i) { for (unsigned int j = 0; j < data[i].size(); ++j) { for (unsigned int k = 0; k < data[i][j].size(); ++k) { buf.append("\""); if (data[i][j][k].size() > 0) buf.append(Parser::encode(data[i][j][k])); buf.append("\""); buf.append(" "); } } } buf.append(" </" + name + "> "); } void Parser::toXML(vector<vector< vector< vector<std::string> > > >data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append("4 "); buf.append(Integer::toString(data.size())); buf.append(" "); buf.append(Integer::toString(data[0].size())); buf.append(" "); buf.append(Integer::toString(data[0][0].size())); buf.append(" "); buf.append(Integer::toString(data[0][0][0].size())); buf.append(" "); for (unsigned int i = 0; i < data.size(); ++i) { for (unsigned int j = 0; j < data[i].size(); ++j) { for (unsigned int k = 0; k < data[i][j].size(); ++k) { for (unsigned int l = 0; l < data[i][j][k].size(); l++) { buf.append("\""); if (data[i][j][k][l].size() > 0) Parser::encode(data[i][j][k][l]); buf.append("\""); buf.append(" "); } } } } buf.append(" </" + name + "> "); } // Field type: Angle void Parser::toXML(Angle data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append(data.toString()); buf.append(" </" + name + "> "); } void Parser::toXML(vector<Angle> data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append("1 "); buf.append(Integer::toString(data.size())); buf.append(" "); for (unsigned int i = 0; i < data.size(); ++i) { buf.append(data[i].toString()); buf.append(" "); } buf.append(" </" + name + "> "); } void Parser::toXML(vector< vector<Angle> > data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append("2 "); buf.append(Integer::toString(data.size())); buf.append(" "); buf.append(Integer::toString(data[0].size())); buf.append(" "); for (unsigned int i = 0; i < data.size(); ++i) { for (unsigned int j = 0; j < data[i].size(); ++j) { buf.append(data[i][j].toString()); buf.append(" "); } } buf.append(" </" + name + "> "); } void Parser::toXML(vector< vector< vector<Angle> > > data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append("3 "); buf.append(Integer::toString(data.size())); buf.append(" "); buf.append(Integer::toString(data[0].size())); buf.append(" "); buf.append(Integer::toString(data[0][0].size())); buf.append(" "); for (unsigned int i = 0; i < data.size(); ++i) { for (unsigned int j = 0; j < data[i].size(); ++j) { for (unsigned int k = 0; k < data[i][j].size(); ++k) { buf.append(data[i][j][k].toString()); buf.append(" "); } } } buf.append(" </" + name + "> "); } void Parser::toXML(vector<vector< vector< vector<Angle> > > >data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append("4 "); buf.append(Integer::toString(data.size())); buf.append(" "); buf.append(Integer::toString(data[0].size())); buf.append(" "); buf.append(Integer::toString(data[0][0].size())); buf.append(" "); buf.append(Integer::toString(data[0][0][0].size())); buf.append(" "); for (unsigned int i = 0; i < data.size(); ++i) { for (unsigned int j = 0; j < data[i].size(); ++j) { for (unsigned int k = 0; k < data[i][j].size(); ++k) { for (unsigned int l = 0; l < data[i][j][k].size(); l++) { buf.append(data[i][j][k][l].toString()); buf.append(" "); } } } } buf.append(" </" + name + "> "); } Angle Parser::getAngle(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) throw ConversionException("Error: Missing field \"" + name + "\" or invalid syntax",tableName); try { return Angle (xmlField); } catch (const InvalidArgumentException &e) { throw ConversionException("Error: message was '"+ e.getMessage()+ "'", tableName); } } vector<Angle> Parser::get1DAngle(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } StringTokenizer t(xmlField," "); try { int ndim = Integer::parseInt(t.nextToken()); if (ndim != 1) { throw ConversionException("Error: Field \"" + name + "\": Invalid array format", tableName); } int dim0 = Integer::parseInt(t.nextToken()); vector<Angle> value (dim0); if (dim0 == 0) return value; for (int i = 0; i < dim0; ++i) { value[i] = Angle::getAngle(t); } if (t.hasMoreTokens()) { throw ConversionException("Error: Field \"" + name + "\": Syntax error.", tableName); } return value; } catch (const NumberFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } catch (const OutOfBoundsException &e) { throw ConversionException("Error: Field \"" + name + "\": Unexpected end of string", tableName); } catch (const TagFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } } vector< vector<Angle> > Parser::get2DAngle(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } StringTokenizer t(xmlField," "); try { int ndim = Integer::parseInt(t.nextToken()); if (ndim != 2) { throw ConversionException("Error: Field \"" + name + "\": Invalid array format", tableName); } int dim0 = Integer::parseInt(t.nextToken()); int dim1 = Integer::parseInt(t.nextToken()); vector< vector<Angle> > value; if (dim0 == 0 || dim1 == 0) return value; vector<Angle> v_aux; for (int i = 0; i < dim0; ++i) { v_aux.clear(); for (int j = 0; j < dim1; ++j) { v_aux.push_back(Angle::getAngle(t)); } value.push_back(v_aux); } if (t.hasMoreTokens()) { throw ConversionException("Error: Field \"" + name + "\": Syntax error.", tableName); } return value; } catch (const NumberFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } catch (const OutOfBoundsException &e) { throw ConversionException("Error: Field \"" + name + "\": Unexpected end of string", tableName); } catch (const TagFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } } vector< vector< vector<Angle> > > Parser::get3DAngle(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } StringTokenizer t(xmlField," "); try { int ndim = Integer::parseInt(t.nextToken()); if (ndim != 3) { throw ConversionException("Error: Field \"" + name + "\": Invalid array format", tableName); } int dim0 = Integer::parseInt(t.nextToken()); int dim1 = Integer::parseInt(t.nextToken()); int dim2 = Integer::parseInt(t.nextToken()); vector< vector< vector<Angle> > > value ; if (dim0 == 0 || dim1 == 0 || dim2 == 0) return value; vector<vector<Angle> > vv_aux; vector<Angle> v_aux; for (int i = 0; i < dim0; ++i) { vv_aux.clear(); for (int j = 0; j < dim1; ++j) { v_aux.clear(); for (int k = 0; k < dim2; ++k) { v_aux.push_back(Angle::getAngle(t)); } vv_aux.push_back(v_aux); } value.push_back(vv_aux); } if (t.hasMoreTokens()) { throw ConversionException("Error: Field \"" + name + "\": Syntax error.", tableName); } return value; } catch (const NumberFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } catch (const OutOfBoundsException &e) { throw ConversionException("Error: Field \"" + name + "\": Unexpected end of string", tableName); } catch (const TagFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } } vector< vector< vector< vector<Angle> > > >Parser::get4DAngle(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } StringTokenizer t(xmlField," "); try { int ndim = Integer::parseInt(t.nextToken()); if (ndim != 4) { throw ConversionException("Error: Field \"" + name + "\": Invalid array format", tableName); } int dim0 = Integer::parseInt(t.nextToken()); int dim1 = Integer::parseInt(t.nextToken()); int dim2 = Integer::parseInt(t.nextToken()); int dim3 = Integer::parseInt(t.nextToken()); vector<vector< vector< vector<Angle> > > >value; if (dim0 == 0 || dim1 == 0 || dim2 == 0 || dim3 == 0) return value; vector<vector<vector<Angle> > >vvv_aux; vector<vector< Angle> > vv_aux; vector<Angle> v_aux; for (int i = 0; i < dim0; ++i) { vvv_aux.clear(); for (int j = 0; j < dim1; ++j) { vv_aux.clear(); for (int k = 0; k < dim2; ++k) { v_aux.clear(); for (int l = 0; l < dim3; l++) { v_aux.push_back(Angle::getAngle(t)); } vv_aux.push_back(v_aux); } vvv_aux.push_back(vv_aux); } value.push_back(vvv_aux); } if (t.hasMoreTokens()) { throw ConversionException("Error: Field \"" + name + "\": Syntax error.", tableName); } return value; } catch (const NumberFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } catch (const OutOfBoundsException &e) { throw ConversionException("Error: Field \"" + name + "\": Unexpected end of string", tableName); } catch (const TagFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } } // Field type: AngularRate void Parser::toXML(AngularRate data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append(data.toString()); buf.append(" </" + name + "> "); } void Parser::toXML(vector<AngularRate> data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append("1 "); buf.append(Integer::toString(data.size())); buf.append(" "); for (unsigned int i = 0; i < data.size(); ++i) { buf.append(data[i].toString()); buf.append(" "); } buf.append(" </" + name + "> "); } void Parser::toXML(vector< vector<AngularRate> > data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append("2 "); buf.append(Integer::toString(data.size())); buf.append(" "); buf.append(Integer::toString(data[0].size())); buf.append(" "); for (unsigned int i = 0; i < data.size(); ++i) { for (unsigned int j = 0; j < data[i].size(); ++j) { buf.append(data[i][j].toString()); buf.append(" "); } } buf.append(" </" + name + "> "); } void Parser::toXML(vector< vector< vector<AngularRate> > > data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append("3 "); buf.append(Integer::toString(data.size())); buf.append(" "); buf.append(Integer::toString(data[0].size())); buf.append(" "); buf.append(Integer::toString(data[0][0].size())); buf.append(" "); for (unsigned int i = 0; i < data.size(); ++i) { for (unsigned int j = 0; j < data[i].size(); ++j) { for (unsigned int k = 0; k < data[i][j].size(); ++k) { buf.append(data[i][j][k].toString()); buf.append(" "); } } } buf.append(" </" + name + "> "); } void Parser::toXML(vector<vector< vector< vector<AngularRate> > > >data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append("4 "); buf.append(Integer::toString(data.size())); buf.append(" "); buf.append(Integer::toString(data[0].size())); buf.append(" "); buf.append(Integer::toString(data[0][0].size())); buf.append(" "); buf.append(Integer::toString(data[0][0][0].size())); buf.append(" "); for (unsigned int i = 0; i < data.size(); ++i) { for (unsigned int j = 0; j < data[i].size(); ++j) { for (unsigned int k = 0; k < data[i][j].size(); ++k) { for (unsigned int l = 0; l < data[i][j][k].size(); l++) { buf.append(data[i][j][k][l].toString()); buf.append(" "); } } } } buf.append(" </" + name + "> "); } AngularRate Parser::getAngularRate(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) throw ConversionException("Error: Missing field \"" + name + "\" or invalid syntax",tableName); try { return AngularRate (xmlField); } catch (const InvalidArgumentException &e) { throw ConversionException("Error: message was '"+ e.getMessage()+ "'", tableName); } } vector<AngularRate> Parser::get1DAngularRate(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } StringTokenizer t(xmlField," "); try { int ndim = Integer::parseInt(t.nextToken()); if (ndim != 1) { throw ConversionException("Error: Field \"" + name + "\": Invalid array format", tableName); } int dim0 = Integer::parseInt(t.nextToken()); vector<AngularRate> value (dim0); if (dim0 == 0) return value; for (int i = 0; i < dim0; ++i) { value[i] = AngularRate::getAngularRate(t); } if (t.hasMoreTokens()) { throw ConversionException("Error: Field \"" + name + "\": Syntax error.", tableName); } return value; } catch (const NumberFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } catch (const OutOfBoundsException &e) { throw ConversionException("Error: Field \"" + name + "\": Unexpected end of string", tableName); } catch (const TagFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } } vector< vector<AngularRate> > Parser::get2DAngularRate(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } StringTokenizer t(xmlField," "); try { int ndim = Integer::parseInt(t.nextToken()); if (ndim != 2) { throw ConversionException("Error: Field \"" + name + "\": Invalid array format", tableName); } int dim0 = Integer::parseInt(t.nextToken()); int dim1 = Integer::parseInt(t.nextToken()); vector< vector<AngularRate> > value; if (dim0 == 0 || dim1 == 0) return value; vector<AngularRate> v_aux; for (int i = 0; i < dim0; ++i) { v_aux.clear(); for (int j = 0; j < dim1; ++j) { v_aux.push_back(AngularRate::getAngularRate(t)); } value.push_back(v_aux); } if (t.hasMoreTokens()) { throw ConversionException("Error: Field \"" + name + "\": Syntax error.", tableName); } return value; } catch (const NumberFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } catch (const OutOfBoundsException &e) { throw ConversionException("Error: Field \"" + name + "\": Unexpected end of string", tableName); } catch (const TagFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } } vector< vector< vector<AngularRate> > > Parser::get3DAngularRate(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } StringTokenizer t(xmlField," "); try { int ndim = Integer::parseInt(t.nextToken()); if (ndim != 3) { throw ConversionException("Error: Field \"" + name + "\": Invalid array format", tableName); } int dim0 = Integer::parseInt(t.nextToken()); int dim1 = Integer::parseInt(t.nextToken()); int dim2 = Integer::parseInt(t.nextToken()); vector< vector< vector<AngularRate> > > value ; if (dim0 == 0 || dim1 == 0 || dim2 == 0) return value; vector<vector<AngularRate> > vv_aux; vector<AngularRate> v_aux; for (int i = 0; i < dim0; ++i) { vv_aux.clear(); for (int j = 0; j < dim1; ++j) { v_aux.clear(); for (int k = 0; k < dim2; ++k) { v_aux.push_back(AngularRate::getAngularRate(t)); } vv_aux.push_back(v_aux); } value.push_back(vv_aux); } if (t.hasMoreTokens()) { throw ConversionException("Error: Field \"" + name + "\": Syntax error.", tableName); } return value; } catch (const NumberFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } catch (const OutOfBoundsException &e) { throw ConversionException("Error: Field \"" + name + "\": Unexpected end of string", tableName); } catch (const TagFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } } vector< vector< vector< vector<AngularRate> > > >Parser::get4DAngularRate(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } StringTokenizer t(xmlField," "); try { int ndim = Integer::parseInt(t.nextToken()); if (ndim != 4) { throw ConversionException("Error: Field \"" + name + "\": Invalid array format", tableName); } int dim0 = Integer::parseInt(t.nextToken()); int dim1 = Integer::parseInt(t.nextToken()); int dim2 = Integer::parseInt(t.nextToken()); int dim3 = Integer::parseInt(t.nextToken()); vector<vector< vector< vector<AngularRate> > > >value; if (dim0 == 0 || dim1 == 0 || dim2 == 0 || dim3 == 0) return value; vector<vector<vector<AngularRate> > >vvv_aux; vector<vector< AngularRate> > vv_aux; vector<AngularRate> v_aux; for (int i = 0; i < dim0; ++i) { vvv_aux.clear(); for (int j = 0; j < dim1; ++j) { vv_aux.clear(); for (int k = 0; k < dim2; ++k) { v_aux.clear(); for (int l = 0; l < dim3; l++) { v_aux.push_back(AngularRate::getAngularRate(t)); } vv_aux.push_back(v_aux); } vvv_aux.push_back(vv_aux); } value.push_back(vvv_aux); } if (t.hasMoreTokens()) { throw ConversionException("Error: Field \"" + name + "\": Syntax error.", tableName); } return value; } catch (const NumberFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } catch (const OutOfBoundsException &e) { throw ConversionException("Error: Field \"" + name + "\": Unexpected end of string", tableName); } catch (const TagFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } } // Field type: ArrayTime void Parser::toXML(ArrayTime data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append(data.toString()); buf.append(" </" + name + "> "); } void Parser::toXML(vector<ArrayTime> data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append("1 "); buf.append(Integer::toString(data.size())); buf.append(" "); for (unsigned int i = 0; i < data.size(); ++i) { buf.append(data[i].toString()); buf.append(" "); } buf.append(" </" + name + "> "); } void Parser::toXML(vector< vector<ArrayTime> > data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append("2 "); buf.append(Integer::toString(data.size())); buf.append(" "); buf.append(Integer::toString(data[0].size())); buf.append(" "); for (unsigned int i = 0; i < data.size(); ++i) { for (unsigned int j = 0; j < data[i].size(); ++j) { buf.append(data[i][j].toString()); buf.append(" "); } } buf.append(" </" + name + "> "); } void Parser::toXML(vector< vector< vector<ArrayTime> > > data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append("3 "); buf.append(Integer::toString(data.size())); buf.append(" "); buf.append(Integer::toString(data[0].size())); buf.append(" "); buf.append(Integer::toString(data[0][0].size())); buf.append(" "); for (unsigned int i = 0; i < data.size(); ++i) { for (unsigned int j = 0; j < data[i].size(); ++j) { for (unsigned int k = 0; k < data[i][j].size(); ++k) { buf.append(data[i][j][k].toString()); buf.append(" "); } } } buf.append(" </" + name + "> "); } void Parser::toXML(vector<vector< vector< vector<ArrayTime> > > >data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append("4 "); buf.append(Integer::toString(data.size())); buf.append(" "); buf.append(Integer::toString(data[0].size())); buf.append(" "); buf.append(Integer::toString(data[0][0].size())); buf.append(" "); buf.append(Integer::toString(data[0][0][0].size())); buf.append(" "); for (unsigned int i = 0; i < data.size(); ++i) { for (unsigned int j = 0; j < data[i].size(); ++j) { for (unsigned int k = 0; k < data[i][j].size(); ++k) { for (unsigned int l = 0; l < data[i][j][k].size(); l++) { buf.append(data[i][j][k][l].toString()); buf.append(" "); } } } } buf.append(" </" + name + "> "); } ArrayTime Parser::getArrayTime(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) throw ConversionException("Error: Missing field \"" + name + "\" or invalid syntax",tableName); try { return ArrayTime (xmlField); } catch (const InvalidArgumentException &e) { throw ConversionException("Error: message was '"+ e.getMessage()+ "'", tableName); } } vector<ArrayTime> Parser::get1DArrayTime(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } StringTokenizer t(xmlField," "); try { int ndim = Integer::parseInt(t.nextToken()); if (ndim != 1) { throw ConversionException("Error: Field \"" + name + "\": Invalid array format", tableName); } int dim0 = Integer::parseInt(t.nextToken()); vector<ArrayTime> value (dim0); if (dim0 == 0) return value; for (int i = 0; i < dim0; ++i) { value[i] = ArrayTime::getArrayTime(t); } if (t.hasMoreTokens()) { throw ConversionException("Error: Field \"" + name + "\": Syntax error.", tableName); } return value; } catch (const NumberFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } catch (const OutOfBoundsException &e) { throw ConversionException("Error: Field \"" + name + "\": Unexpected end of string", tableName); } catch (const TagFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } } vector< vector<ArrayTime> > Parser::get2DArrayTime(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } StringTokenizer t(xmlField," "); try { int ndim = Integer::parseInt(t.nextToken()); if (ndim != 2) { throw ConversionException("Error: Field \"" + name + "\": Invalid array format", tableName); } int dim0 = Integer::parseInt(t.nextToken()); int dim1 = Integer::parseInt(t.nextToken()); vector< vector<ArrayTime> > value; if (dim0 == 0 || dim1 == 0) return value; vector<ArrayTime> v_aux; for (int i = 0; i < dim0; ++i) { v_aux.clear(); for (int j = 0; j < dim1; ++j) { v_aux.push_back(ArrayTime::getArrayTime(t)); } value.push_back(v_aux); } if (t.hasMoreTokens()) { throw ConversionException("Error: Field \"" + name + "\": Syntax error.", tableName); } return value; } catch (const NumberFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } catch (const OutOfBoundsException &e) { throw ConversionException("Error: Field \"" + name + "\": Unexpected end of string", tableName); } catch (const TagFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } } vector< vector< vector<ArrayTime> > > Parser::get3DArrayTime(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } StringTokenizer t(xmlField," "); try { int ndim = Integer::parseInt(t.nextToken()); if (ndim != 3) { throw ConversionException("Error: Field \"" + name + "\": Invalid array format", tableName); } int dim0 = Integer::parseInt(t.nextToken()); int dim1 = Integer::parseInt(t.nextToken()); int dim2 = Integer::parseInt(t.nextToken()); vector< vector< vector<ArrayTime> > > value ; if (dim0 == 0 || dim1 == 0 || dim2 == 0) return value; vector<vector<ArrayTime> > vv_aux; vector<ArrayTime> v_aux; for (int i = 0; i < dim0; ++i) { vv_aux.clear(); for (int j = 0; j < dim1; ++j) { v_aux.clear(); for (int k = 0; k < dim2; ++k) { v_aux.push_back(ArrayTime::getArrayTime(t)); } vv_aux.push_back(v_aux); } value.push_back(vv_aux); } if (t.hasMoreTokens()) { throw ConversionException("Error: Field \"" + name + "\": Syntax error.", tableName); } return value; } catch (const NumberFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } catch (const OutOfBoundsException &e) { throw ConversionException("Error: Field \"" + name + "\": Unexpected end of string", tableName); } catch (const TagFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } } vector< vector< vector< vector<ArrayTime> > > >Parser::get4DArrayTime(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } StringTokenizer t(xmlField," "); try { int ndim = Integer::parseInt(t.nextToken()); if (ndim != 4) { throw ConversionException("Error: Field \"" + name + "\": Invalid array format", tableName); } int dim0 = Integer::parseInt(t.nextToken()); int dim1 = Integer::parseInt(t.nextToken()); int dim2 = Integer::parseInt(t.nextToken()); int dim3 = Integer::parseInt(t.nextToken()); vector<vector< vector< vector<ArrayTime> > > >value; if (dim0 == 0 || dim1 == 0 || dim2 == 0 || dim3 == 0) return value; vector<vector<vector<ArrayTime> > >vvv_aux; vector<vector< ArrayTime> > vv_aux; vector<ArrayTime> v_aux; for (int i = 0; i < dim0; ++i) { vvv_aux.clear(); for (int j = 0; j < dim1; ++j) { vv_aux.clear(); for (int k = 0; k < dim2; ++k) { v_aux.clear(); for (int l = 0; l < dim3; l++) { v_aux.push_back(ArrayTime::getArrayTime(t)); } vv_aux.push_back(v_aux); } vvv_aux.push_back(vv_aux); } value.push_back(vvv_aux); } if (t.hasMoreTokens()) { throw ConversionException("Error: Field \"" + name + "\": Syntax error.", tableName); } return value; } catch (const NumberFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } catch (const OutOfBoundsException &e) { throw ConversionException("Error: Field \"" + name + "\": Unexpected end of string", tableName); } catch (const TagFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } } // Field type: ArrayTimeInterval void Parser::toXML(ArrayTimeInterval data, const string &name, string &buf) { buf.append("<" + name + "> "); //buf.append(data.getStart().toString()+" "+data.getDuration().toString()); buf.append(data.getMidPoint().toString()+" "+data.getDuration().toString()); buf.append(" </" + name + "> "); } void Parser::toXML(vector<ArrayTimeInterval> data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append("1 "); buf.append(Integer::toString(data.size())); buf.append(" "); for (unsigned int i = 0; i < data.size(); ++i) { //buf.append(data[i].getStart().toString()+" "+data[i].getDuration().toString()+" "); buf.append(data[i].getMidPoint().toString()+" "+data[i].getDuration().toString()+" "); buf.append(" "); } buf.append(" </" + name + "> "); } void Parser::toXML(vector< vector<ArrayTimeInterval> > data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append("2 "); buf.append(Integer::toString(data.size())); buf.append(" "); buf.append(Integer::toString(data[0].size())); buf.append(" "); for (unsigned int i = 0; i < data.size(); ++i) { for (unsigned int j = 0; j < data[i].size(); ++j) { //buf.append(data[i][j].getStart().toString()+" "+data[i][j].getDuration().toString()+" "); buf.append(data[i][j].getMidPoint().toString()+" "+data[i][j].getDuration().toString()+" "); buf.append(" "); } } buf.append(" </" + name + "> "); } void Parser::toXML(vector< vector< vector<ArrayTimeInterval> > > data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append("3 "); buf.append(Integer::toString(data.size())); buf.append(" "); buf.append(Integer::toString(data[0].size())); buf.append(" "); buf.append(Integer::toString(data[0][0].size())); buf.append(" "); for (unsigned int i = 0; i < data.size(); ++i) { for (unsigned int j = 0; j < data[i].size(); ++j) { for (unsigned int k = 0; k < data[i][j].size(); ++k) { //buf.append(data[i][j][k].getStart().toString()+" "+data[i][j][k].getDuration().toString()+" "); buf.append(data[i][j][k].getMidPoint().toString()+" "+data[i][j][k].getDuration().toString()+" "); buf.append(" "); } } } buf.append(" </" + name + "> "); } void Parser::toXML(vector<vector< vector< vector<ArrayTimeInterval> > > >data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append("4 "); buf.append(Integer::toString(data.size())); buf.append(" "); buf.append(Integer::toString(data[0].size())); buf.append(" "); buf.append(Integer::toString(data[0][0].size())); buf.append(" "); buf.append(Integer::toString(data[0][0][0].size())); buf.append(" "); for (unsigned int i = 0; i < data.size(); ++i) { for (unsigned int j = 0; j < data[i].size(); ++j) { for (unsigned int k = 0; k < data[i][j].size(); ++k) { for (unsigned int l = 0; l < data[i][j][k].size(); l++) { //buf.append(data[i][j][k][l].getStart().toString()+" "+data[i][j][k][l].getDuration().toString()+" "); buf.append(data[i][j][k][l].getMidPoint().toString()+" "+data[i][j][k][l].getDuration().toString()+" "); buf.append(" "); } } } } buf.append(" </" + name + "> "); } ArrayTimeInterval Parser::getArrayTimeInterval(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) throw ConversionException("Error: Missing field \"" + name + "\" or invalid syntax",tableName); StringTokenizer t(xmlField," "); //int64_t start = Long::parseLong(t.nextToken()); int64_t l1 = Long::parseLong(t.nextToken()); int64_t l2 = Long::parseLong(t.nextToken()); if ( ArrayTimeInterval::readStartTimeDurationInXML() ) return ArrayTimeInterval (l1, l2); else return ArrayTimeInterval (l1 - l2 / 2, l2); } vector<ArrayTimeInterval> Parser::get1DArrayTimeInterval(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } StringTokenizer t(xmlField," "); try { int ndim = Integer::parseInt(t.nextToken()); if (ndim != 1) { throw ConversionException("Error: Field \"" + name + "\": Invalid array format", tableName); } int dim0 = Integer::parseInt(t.nextToken()); vector<ArrayTimeInterval> value (dim0); if (dim0 == 0) return value; for (int i = 0; i < dim0; ++i) { int64_t l1 = Long::parseLong(t.nextToken()); int64_t l2 = Long::parseLong(t.nextToken()); if ( ArrayTimeInterval::readStartTimeDurationInXML() ) value[i] = ArrayTimeInterval (l1, l2); else value[i] = ArrayTimeInterval (l1 - l2 / 2, l2); } if (t.hasMoreTokens()) { throw ConversionException("Error: Field \"" + name + "\": Syntax error.", tableName); } return value; } catch (const NumberFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } catch (const OutOfBoundsException &e) { throw ConversionException("Error: Field \"" + name + "\": Unexpected end of string", tableName); } catch (const TagFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } } vector< vector<ArrayTimeInterval> > Parser::get2DArrayTimeInterval(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } StringTokenizer t(xmlField," "); try { int ndim = Integer::parseInt(t.nextToken()); if (ndim != 2) { throw ConversionException("Error: Field \"" + name + "\": Invalid array format", tableName); } int dim0 = Integer::parseInt(t.nextToken()); int dim1 = Integer::parseInt(t.nextToken()); vector< vector<ArrayTimeInterval> > value; if (dim0 == 0 || dim1 == 0) return value; vector<ArrayTimeInterval> v_aux; for (int i = 0; i < dim0; ++i) { v_aux.clear(); for (int j = 0; j < dim1; ++j) { int64_t l1 = Long::parseLong(t.nextToken()); int64_t l2 = Long::parseLong(t.nextToken()); if ( ArrayTimeInterval::readStartTimeDurationInXML() ) v_aux.push_back(ArrayTimeInterval (l1, l2)); else v_aux.push_back(ArrayTimeInterval (l1 - l2 / 2, l2)); } value.push_back(v_aux); } if (t.hasMoreTokens()) { throw ConversionException("Error: Field \"" + name + "\": Syntax error.", tableName); } return value; } catch (const NumberFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } catch (const OutOfBoundsException &e) { throw ConversionException("Error: Field \"" + name + "\": Unexpected end of string", tableName); } catch (const TagFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } } vector< vector< vector<ArrayTimeInterval> > > Parser::get3DArrayTimeInterval(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } StringTokenizer t(xmlField," "); try { int ndim = Integer::parseInt(t.nextToken()); if (ndim != 3) { throw ConversionException("Error: Field \"" + name + "\": Invalid array format", tableName); } int dim0 = Integer::parseInt(t.nextToken()); int dim1 = Integer::parseInt(t.nextToken()); int dim2 = Integer::parseInt(t.nextToken()); vector< vector< vector<ArrayTimeInterval> > > value ; if (dim0 == 0 || dim1 == 0 || dim2 == 0) return value; vector<vector<ArrayTimeInterval> > vv_aux; vector<ArrayTimeInterval> v_aux; for (int i = 0; i < dim0; ++i) { vv_aux.clear(); for (int j = 0; j < dim1; ++j) { v_aux.clear(); for (int k = 0; k < dim2; ++k) { int64_t l1 = Long::parseLong(t.nextToken()); int64_t l2 = Long::parseLong(t.nextToken()); if ( ArrayTimeInterval::readStartTimeDurationInXML() ) v_aux.push_back(ArrayTimeInterval (l1, l2)); else v_aux.push_back(ArrayTimeInterval (l1 - l2 / 2, l2)); } vv_aux.push_back(v_aux); } value.push_back(vv_aux); } if (t.hasMoreTokens()) { throw ConversionException("Error: Field \"" + name + "\": Syntax error.", tableName); } return value; } catch (const NumberFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } catch (const OutOfBoundsException &e) { throw ConversionException("Error: Field \"" + name + "\": Unexpected end of string", tableName); } catch (const TagFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } } vector< vector< vector< vector<ArrayTimeInterval> > > >Parser::get4DArrayTimeInterval(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } StringTokenizer t(xmlField," "); try { int ndim = Integer::parseInt(t.nextToken()); if (ndim != 4) { throw ConversionException("Error: Field \"" + name + "\": Invalid array format", tableName); } int dim0 = Integer::parseInt(t.nextToken()); int dim1 = Integer::parseInt(t.nextToken()); int dim2 = Integer::parseInt(t.nextToken()); int dim3 = Integer::parseInt(t.nextToken()); vector<vector< vector< vector<ArrayTimeInterval> > > >value; if (dim0 == 0 || dim1 == 0 || dim2 == 0 || dim3 == 0) return value; vector<vector<vector<ArrayTimeInterval> > >vvv_aux; vector<vector< ArrayTimeInterval> > vv_aux; vector<ArrayTimeInterval> v_aux; for (int i = 0; i < dim0; ++i) { vvv_aux.clear(); for (int j = 0; j < dim1; ++j) { vv_aux.clear(); for (int k = 0; k < dim2; ++k) { v_aux.clear(); for (int l = 0; l < dim3; l++) { int64_t l1 = Long::parseLong(t.nextToken()); int64_t l2 = Long::parseLong(t.nextToken()); if ( ArrayTimeInterval::readStartTimeDurationInXML() ) v_aux.push_back(ArrayTimeInterval (l1, l2)); else v_aux.push_back(ArrayTimeInterval (l1 - l2 / 2, l2)); } vv_aux.push_back(v_aux); } vvv_aux.push_back(vv_aux); } value.push_back(vvv_aux); } if (t.hasMoreTokens()) { throw ConversionException("Error: Field \"" + name + "\": Syntax error.", tableName); } return value; } catch (const NumberFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } catch (const OutOfBoundsException &e) { throw ConversionException("Error: Field \"" + name + "\": Unexpected end of string", tableName); } catch (const TagFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } } // Field type: Complex void Parser::toXML(Complex data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append(data.toString()); buf.append(" </" + name + "> "); } void Parser::toXML(vector<Complex> data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append("1 "); buf.append(Integer::toString(data.size())); buf.append(" "); for (unsigned int i = 0; i < data.size(); ++i) { buf.append(data[i].toString()); buf.append(" "); } buf.append(" </" + name + "> "); } void Parser::toXML(vector< vector<Complex> > data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append("2 "); buf.append(Integer::toString(data.size())); buf.append(" "); buf.append(Integer::toString(data[0].size())); buf.append(" "); for (unsigned int i = 0; i < data.size(); ++i) { for (unsigned int j = 0; j < data[i].size(); ++j) { buf.append(data[i][j].toString()); buf.append(" "); } } buf.append(" </" + name + "> "); } void Parser::toXML(vector< vector< vector<Complex> > > data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append("3 "); buf.append(Integer::toString(data.size())); buf.append(" "); buf.append(Integer::toString(data[0].size())); buf.append(" "); buf.append(Integer::toString(data[0][0].size())); buf.append(" "); for (unsigned int i = 0; i < data.size(); ++i) { for (unsigned int j = 0; j < data[i].size(); ++j) { for (unsigned int k = 0; k < data[i][j].size(); ++k) { buf.append(data[i][j][k].toString()); buf.append(" "); } } } buf.append(" </" + name + "> "); } void Parser::toXML(vector<vector< vector< vector<Complex> > > >data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append("4 "); buf.append(Integer::toString(data.size())); buf.append(" "); buf.append(Integer::toString(data[0].size())); buf.append(" "); buf.append(Integer::toString(data[0][0].size())); buf.append(" "); buf.append(Integer::toString(data[0][0][0].size())); buf.append(" "); for (unsigned int i = 0; i < data.size(); ++i) { for (unsigned int j = 0; j < data[i].size(); ++j) { for (unsigned int k = 0; k < data[i][j].size(); ++k) { for (unsigned int l = 0; l < data[i][j][k].size(); l++) { buf.append(data[i][j][k][l].toString()); buf.append(" "); } } } } buf.append(" </" + name + "> "); } Complex Parser::getComplex(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) throw ConversionException("Error: Missing field \"" + name + "\" or invalid syntax",tableName); try { return Complex (xmlField); } catch (const InvalidArgumentException &e) { throw ConversionException("Error: message was '"+ e.getMessage()+ "'", tableName); } } vector<Complex> Parser::get1DComplex(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } StringTokenizer t(xmlField," "); try { int ndim = Integer::parseInt(t.nextToken()); if (ndim != 1) { throw ConversionException("Error: Field \"" + name + "\": Invalid array format", tableName); } int dim0 = Integer::parseInt(t.nextToken()); vector<Complex> value (dim0); if (dim0 == 0) return value; for (int i = 0; i < dim0; ++i) { value[i] = Complex::getComplex(t); } if (t.hasMoreTokens()) { throw ConversionException("Error: Field \"" + name + "\": Syntax error.", tableName); } return value; } catch (const NumberFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } catch (const OutOfBoundsException &e) { throw ConversionException("Error: Field \"" + name + "\": Unexpected end of string", tableName); } catch (const TagFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } } vector< vector<Complex> > Parser::get2DComplex(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } StringTokenizer t(xmlField," "); try { int ndim = Integer::parseInt(t.nextToken()); if (ndim != 2) { throw ConversionException("Error: Field \"" + name + "\": Invalid array format", tableName); } int dim0 = Integer::parseInt(t.nextToken()); int dim1 = Integer::parseInt(t.nextToken()); vector< vector<Complex> > value; if (dim0 == 0 || dim1 == 0) return value; vector<Complex> v_aux; for (int i = 0; i < dim0; ++i) { v_aux.clear(); for (int j = 0; j < dim1; ++j) { v_aux.push_back(Complex::getComplex(t)); } value.push_back(v_aux); } if (t.hasMoreTokens()) { throw ConversionException("Error: Field \"" + name + "\": Syntax error.", tableName); } return value; } catch (const NumberFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } catch (const OutOfBoundsException &e) { throw ConversionException("Error: Field \"" + name + "\": Unexpected end of string", tableName); } catch (const TagFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } } vector< vector< vector<Complex> > > Parser::get3DComplex(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } StringTokenizer t(xmlField," "); try { int ndim = Integer::parseInt(t.nextToken()); if (ndim != 3) { throw ConversionException("Error: Field \"" + name + "\": Invalid array format", tableName); } int dim0 = Integer::parseInt(t.nextToken()); int dim1 = Integer::parseInt(t.nextToken()); int dim2 = Integer::parseInt(t.nextToken()); vector< vector< vector<Complex> > > value ; if (dim0 == 0 || dim1 == 0 || dim2 == 0) return value; vector<vector<Complex> > vv_aux; vector<Complex> v_aux; for (int i = 0; i < dim0; ++i) { vv_aux.clear(); for (int j = 0; j < dim1; ++j) { v_aux.clear(); for (int k = 0; k < dim2; ++k) { v_aux.push_back(Complex::getComplex(t)); } vv_aux.push_back(v_aux); } value.push_back(vv_aux); } if (t.hasMoreTokens()) { throw ConversionException("Error: Field \"" + name + "\": Syntax error.", tableName); } return value; } catch (const NumberFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } catch (const OutOfBoundsException &e) { throw ConversionException("Error: Field \"" + name + "\": Unexpected end of string", tableName); } catch (const TagFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } } vector< vector< vector< vector<Complex> > > >Parser::get4DComplex(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } StringTokenizer t(xmlField," "); try { int ndim = Integer::parseInt(t.nextToken()); if (ndim != 4) { throw ConversionException("Error: Field \"" + name + "\": Invalid array format", tableName); } int dim0 = Integer::parseInt(t.nextToken()); int dim1 = Integer::parseInt(t.nextToken()); int dim2 = Integer::parseInt(t.nextToken()); int dim3 = Integer::parseInt(t.nextToken()); vector<vector< vector< vector<Complex> > > >value; if (dim0 == 0 || dim1 == 0 || dim2 == 0 || dim3 == 0) return value; vector<vector<vector<Complex> > >vvv_aux; vector<vector< Complex> > vv_aux; vector<Complex> v_aux; for (int i = 0; i < dim0; ++i) { vvv_aux.clear(); for (int j = 0; j < dim1; ++j) { vv_aux.clear(); for (int k = 0; k < dim2; ++k) { v_aux.clear(); for (int l = 0; l < dim3; l++) { v_aux.push_back(Complex::getComplex(t)); } vv_aux.push_back(v_aux); } vvv_aux.push_back(vv_aux); } value.push_back(vvv_aux); } if (t.hasMoreTokens()) { throw ConversionException("Error: Field \"" + name + "\": Syntax error.", tableName); } return value; } catch (const NumberFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } catch (const OutOfBoundsException &e) { throw ConversionException("Error: Field \"" + name + "\": Unexpected end of string", tableName); } catch (const TagFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } } // Field type: Entity void Parser::toXML(Entity data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append(data.toString()); buf.append(" </" + name + "> "); } void Parser::toXML(vector<Entity> data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append("1 "); buf.append(Integer::toString(data.size())); buf.append(" "); for (unsigned int i = 0; i < data.size(); ++i) { buf.append(data[i].toString()); buf.append(" "); } buf.append(" </" + name + "> "); } void Parser::toXML(vector< vector<Entity> > data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append("2 "); buf.append(Integer::toString(data.size())); buf.append(" "); buf.append(Integer::toString(data[0].size())); buf.append(" "); for (unsigned int i = 0; i < data.size(); ++i) { for (unsigned int j = 0; j < data[i].size(); ++j) { buf.append(data[i][j].toString()); buf.append(" "); } } buf.append(" </" + name + "> "); } void Parser::toXML(vector< vector< vector<Entity> > > data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append("3 "); buf.append(Integer::toString(data.size())); buf.append(" "); buf.append(Integer::toString(data[0].size())); buf.append(" "); buf.append(Integer::toString(data[0][0].size())); buf.append(" "); for (unsigned int i = 0; i < data.size(); ++i) { for (unsigned int j = 0; j < data[i].size(); ++j) { for (unsigned int k = 0; k < data[i][j].size(); ++k) { buf.append(data[i][j][k].toString()); buf.append(" "); } } } buf.append(" </" + name + "> "); } void Parser::toXML(vector<vector< vector< vector<Entity> > > >data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append("4 "); buf.append(Integer::toString(data.size())); buf.append(" "); buf.append(Integer::toString(data[0].size())); buf.append(" "); buf.append(Integer::toString(data[0][0].size())); buf.append(" "); buf.append(Integer::toString(data[0][0][0].size())); buf.append(" "); for (unsigned int i = 0; i < data.size(); ++i) { for (unsigned int j = 0; j < data[i].size(); ++j) { for (unsigned int k = 0; k < data[i][j].size(); ++k) { for (unsigned int l = 0; l < data[i][j][k].size(); l++) { buf.append(data[i][j][k][l].toString()); buf.append(" "); } } } } buf.append(" </" + name + "> "); } Entity Parser::getEntity(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) throw ConversionException("Error: Missing field \"" + name + "\" or invalid syntax",tableName); try { return Entity (xmlField); } catch (const InvalidArgumentException &e) { throw ConversionException("Error: message was '"+ e.getMessage()+ "'", tableName); } } vector<Entity> Parser::get1DEntity(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } StringTokenizer t(xmlField," "); try { int ndim = Integer::parseInt(t.nextToken()); if (ndim != 1) { throw ConversionException("Error: Field \"" + name + "\": Invalid array format", tableName); } int dim0 = Integer::parseInt(t.nextToken()); vector<Entity> value (dim0); if (dim0 == 0) return value; for (int i = 0; i < dim0; ++i) { value[i] = Entity::getEntity(t); } if (t.hasMoreTokens()) { throw ConversionException("Error: Field \"" + name + "\": Syntax error.", tableName); } return value; } catch (const NumberFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } catch (const OutOfBoundsException &e) { throw ConversionException("Error: Field \"" + name + "\": Unexpected end of string", tableName); } catch (const TagFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } } vector< vector<Entity> > Parser::get2DEntity(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } StringTokenizer t(xmlField," "); try { int ndim = Integer::parseInt(t.nextToken()); if (ndim != 2) { throw ConversionException("Error: Field \"" + name + "\": Invalid array format", tableName); } int dim0 = Integer::parseInt(t.nextToken()); int dim1 = Integer::parseInt(t.nextToken()); vector< vector<Entity> > value; if (dim0 == 0 || dim1 == 0) return value; vector<Entity> v_aux; for (int i = 0; i < dim0; ++i) { v_aux.clear(); for (int j = 0; j < dim1; ++j) { v_aux.push_back(Entity::getEntity(t)); } value.push_back(v_aux); } if (t.hasMoreTokens()) { throw ConversionException("Error: Field \"" + name + "\": Syntax error.", tableName); } return value; } catch (const NumberFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } catch (const OutOfBoundsException &e) { throw ConversionException("Error: Field \"" + name + "\": Unexpected end of string", tableName); } catch (const TagFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } } vector< vector< vector<Entity> > > Parser::get3DEntity(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } StringTokenizer t(xmlField," "); try { int ndim = Integer::parseInt(t.nextToken()); if (ndim != 3) { throw ConversionException("Error: Field \"" + name + "\": Invalid array format", tableName); } int dim0 = Integer::parseInt(t.nextToken()); int dim1 = Integer::parseInt(t.nextToken()); int dim2 = Integer::parseInt(t.nextToken()); vector< vector< vector<Entity> > > value ; if (dim0 == 0 || dim1 == 0 || dim2 == 0) return value; vector<vector<Entity> > vv_aux; vector<Entity> v_aux; for (int i = 0; i < dim0; ++i) { vv_aux.clear(); for (int j = 0; j < dim1; ++j) { v_aux.clear(); for (int k = 0; k < dim2; ++k) { v_aux.push_back(Entity::getEntity(t)); } vv_aux.push_back(v_aux); } value.push_back(vv_aux); } if (t.hasMoreTokens()) { throw ConversionException("Error: Field \"" + name + "\": Syntax error.", tableName); } return value; } catch (const NumberFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } catch (const OutOfBoundsException &e) { throw ConversionException("Error: Field \"" + name + "\": Unexpected end of string", tableName); } catch (const TagFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } } vector< vector< vector< vector<Entity> > > >Parser::get4DEntity(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } StringTokenizer t(xmlField," "); try { int ndim = Integer::parseInt(t.nextToken()); if (ndim != 4) { throw ConversionException("Error: Field \"" + name + "\": Invalid array format", tableName); } int dim0 = Integer::parseInt(t.nextToken()); int dim1 = Integer::parseInt(t.nextToken()); int dim2 = Integer::parseInt(t.nextToken()); int dim3 = Integer::parseInt(t.nextToken()); vector<vector< vector< vector<Entity> > > >value; if (dim0 == 0 || dim1 == 0 || dim2 == 0 || dim3 == 0) return value; vector<vector<vector<Entity> > >vvv_aux; vector<vector< Entity> > vv_aux; vector<Entity> v_aux; for (int i = 0; i < dim0; ++i) { vvv_aux.clear(); for (int j = 0; j < dim1; ++j) { vv_aux.clear(); for (int k = 0; k < dim2; ++k) { v_aux.clear(); for (int l = 0; l < dim3; l++) { v_aux.push_back(Entity::getEntity(t)); } vv_aux.push_back(v_aux); } vvv_aux.push_back(vv_aux); } value.push_back(vvv_aux); } if (t.hasMoreTokens()) { throw ConversionException("Error: Field \"" + name + "\": Syntax error.", tableName); } return value; } catch (const NumberFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } catch (const OutOfBoundsException &e) { throw ConversionException("Error: Field \"" + name + "\": Unexpected end of string", tableName); } catch (const TagFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } } // Field type: EntityId void Parser::toXML(EntityId data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append(data.toString()); buf.append(" </" + name + "> "); } void Parser::toXML(vector<EntityId> data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append("1 "); buf.append(Integer::toString(data.size())); buf.append(" "); for (unsigned int i = 0; i < data.size(); ++i) { buf.append(data[i].toString()); buf.append(" "); } buf.append(" </" + name + "> "); } void Parser::toXML(vector< vector<EntityId> > data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append("2 "); buf.append(Integer::toString(data.size())); buf.append(" "); buf.append(Integer::toString(data[0].size())); buf.append(" "); for (unsigned int i = 0; i < data.size(); ++i) { for (unsigned int j = 0; j < data[i].size(); ++j) { buf.append(data[i][j].toString()); buf.append(" "); } } buf.append(" </" + name + "> "); } void Parser::toXML(vector< vector< vector<EntityId> > > data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append("3 "); buf.append(Integer::toString(data.size())); buf.append(" "); buf.append(Integer::toString(data[0].size())); buf.append(" "); buf.append(Integer::toString(data[0][0].size())); buf.append(" "); for (unsigned int i = 0; i < data.size(); ++i) { for (unsigned int j = 0; j < data[i].size(); ++j) { for (unsigned int k = 0; k < data[i][j].size(); ++k) { buf.append(data[i][j][k].toString()); buf.append(" "); } } } buf.append(" </" + name + "> "); } void Parser::toXML(vector<vector< vector< vector<EntityId> > > >data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append("4 "); buf.append(Integer::toString(data.size())); buf.append(" "); buf.append(Integer::toString(data[0].size())); buf.append(" "); buf.append(Integer::toString(data[0][0].size())); buf.append(" "); buf.append(Integer::toString(data[0][0][0].size())); buf.append(" "); for (unsigned int i = 0; i < data.size(); ++i) { for (unsigned int j = 0; j < data[i].size(); ++j) { for (unsigned int k = 0; k < data[i][j].size(); ++k) { for (unsigned int l = 0; l < data[i][j][k].size(); l++) { buf.append(data[i][j][k][l].toString()); buf.append(" "); } } } } buf.append(" </" + name + "> "); } EntityId Parser::getEntityId(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) throw ConversionException("Error: Missing field \"" + name + "\" or invalid syntax",tableName); try { return EntityId (xmlField); } catch (const InvalidArgumentException &e) { throw ConversionException("Error: message was '"+ e.getMessage()+ "'", tableName); } } vector<EntityId> Parser::get1DEntityId(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } StringTokenizer t(xmlField," "); try { int ndim = Integer::parseInt(t.nextToken()); if (ndim != 1) { throw ConversionException("Error: Field \"" + name + "\": Invalid array format", tableName); } int dim0 = Integer::parseInt(t.nextToken()); vector<EntityId> value (dim0); if (dim0 == 0) return value; for (int i = 0; i < dim0; ++i) { value[i] = EntityId::getEntityId(t); } if (t.hasMoreTokens()) { throw ConversionException("Error: Field \"" + name + "\": Syntax error.", tableName); } return value; } catch (const NumberFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } catch (const OutOfBoundsException &e) { throw ConversionException("Error: Field \"" + name + "\": Unexpected end of string", tableName); } catch (const TagFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } } vector< vector<EntityId> > Parser::get2DEntityId(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } StringTokenizer t(xmlField," "); try { int ndim = Integer::parseInt(t.nextToken()); if (ndim != 2) { throw ConversionException("Error: Field \"" + name + "\": Invalid array format", tableName); } int dim0 = Integer::parseInt(t.nextToken()); int dim1 = Integer::parseInt(t.nextToken()); vector< vector<EntityId> > value; if (dim0 == 0 || dim1 == 0) return value; vector<EntityId> v_aux; for (int i = 0; i < dim0; ++i) { v_aux.clear(); for (int j = 0; j < dim1; ++j) { v_aux.push_back(EntityId::getEntityId(t)); } value.push_back(v_aux); } if (t.hasMoreTokens()) { throw ConversionException("Error: Field \"" + name + "\": Syntax error.", tableName); } return value; } catch (const NumberFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } catch (const OutOfBoundsException &e) { throw ConversionException("Error: Field \"" + name + "\": Unexpected end of string", tableName); } catch (const TagFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } } vector< vector< vector<EntityId> > > Parser::get3DEntityId(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } StringTokenizer t(xmlField," "); try { int ndim = Integer::parseInt(t.nextToken()); if (ndim != 3) { throw ConversionException("Error: Field \"" + name + "\": Invalid array format", tableName); } int dim0 = Integer::parseInt(t.nextToken()); int dim1 = Integer::parseInt(t.nextToken()); int dim2 = Integer::parseInt(t.nextToken()); vector< vector< vector<EntityId> > > value ; if (dim0 == 0 || dim1 == 0 || dim2 == 0) return value; vector<vector<EntityId> > vv_aux; vector<EntityId> v_aux; for (int i = 0; i < dim0; ++i) { vv_aux.clear(); for (int j = 0; j < dim1; ++j) { v_aux.clear(); for (int k = 0; k < dim2; ++k) { v_aux.push_back(EntityId::getEntityId(t)); } vv_aux.push_back(v_aux); } value.push_back(vv_aux); } if (t.hasMoreTokens()) { throw ConversionException("Error: Field \"" + name + "\": Syntax error.", tableName); } return value; } catch (const NumberFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } catch (const OutOfBoundsException &e) { throw ConversionException("Error: Field \"" + name + "\": Unexpected end of string", tableName); } catch (const TagFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } } vector< vector< vector< vector<EntityId> > > >Parser::get4DEntityId(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } StringTokenizer t(xmlField," "); try { int ndim = Integer::parseInt(t.nextToken()); if (ndim != 4) { throw ConversionException("Error: Field \"" + name + "\": Invalid array format", tableName); } int dim0 = Integer::parseInt(t.nextToken()); int dim1 = Integer::parseInt(t.nextToken()); int dim2 = Integer::parseInt(t.nextToken()); int dim3 = Integer::parseInt(t.nextToken()); vector<vector< vector< vector<EntityId> > > >value; if (dim0 == 0 || dim1 == 0 || dim2 == 0 || dim3 == 0) return value; vector<vector<vector<EntityId> > >vvv_aux; vector<vector< EntityId> > vv_aux; vector<EntityId> v_aux; for (int i = 0; i < dim0; ++i) { vvv_aux.clear(); for (int j = 0; j < dim1; ++j) { vv_aux.clear(); for (int k = 0; k < dim2; ++k) { v_aux.clear(); for (int l = 0; l < dim3; l++) { v_aux.push_back(EntityId::getEntityId(t)); } vv_aux.push_back(v_aux); } vvv_aux.push_back(vv_aux); } value.push_back(vvv_aux); } if (t.hasMoreTokens()) { throw ConversionException("Error: Field \"" + name + "\": Syntax error.", tableName); } return value; } catch (const NumberFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } catch (const OutOfBoundsException &e) { throw ConversionException("Error: Field \"" + name + "\": Unexpected end of string", tableName); } catch (const TagFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } } // Field type: EntityRef void Parser::toXML(EntityRef data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append(data.toString()); buf.append(" </" + name + "> "); } void Parser::toXML(vector<EntityRef> data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append("1 "); buf.append(Integer::toString(data.size())); buf.append(" "); for (unsigned int i = 0; i < data.size(); ++i) { buf.append(data[i].toString()); buf.append(" "); } buf.append(" </" + name + "> "); } void Parser::toXML(vector< vector<EntityRef> > data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append("2 "); buf.append(Integer::toString(data.size())); buf.append(" "); buf.append(Integer::toString(data[0].size())); buf.append(" "); for (unsigned int i = 0; i < data.size(); ++i) { for (unsigned int j = 0; j < data[i].size(); ++j) { buf.append(data[i][j].toString()); buf.append(" "); } } buf.append(" </" + name + "> "); } void Parser::toXML(vector< vector< vector<EntityRef> > > data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append("3 "); buf.append(Integer::toString(data.size())); buf.append(" "); buf.append(Integer::toString(data[0].size())); buf.append(" "); buf.append(Integer::toString(data[0][0].size())); buf.append(" "); for (unsigned int i = 0; i < data.size(); ++i) { for (unsigned int j = 0; j < data[i].size(); ++j) { for (unsigned int k = 0; k < data[i][j].size(); ++k) { buf.append(data[i][j][k].toString()); buf.append(" "); } } } buf.append(" </" + name + "> "); } void Parser::toXML(vector<vector< vector< vector<EntityRef> > > >data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append("4 "); buf.append(Integer::toString(data.size())); buf.append(" "); buf.append(Integer::toString(data[0].size())); buf.append(" "); buf.append(Integer::toString(data[0][0].size())); buf.append(" "); buf.append(Integer::toString(data[0][0][0].size())); buf.append(" "); for (unsigned int i = 0; i < data.size(); ++i) { for (unsigned int j = 0; j < data[i].size(); ++j) { for (unsigned int k = 0; k < data[i][j].size(); ++k) { for (unsigned int l = 0; l < data[i][j][k].size(); l++) { buf.append(data[i][j][k][l].toString()); buf.append(" "); } } } } buf.append(" </" + name + "> "); } EntityRef Parser::getEntityRef(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) throw ConversionException("Error: Missing field \"" + name + "\" or invalid syntax",tableName); try { return EntityRef (xmlField); } catch (const InvalidArgumentException &e) { throw ConversionException("Error: message was '"+ e.getMessage()+ "'", tableName); } } vector<EntityRef> Parser::get1DEntityRef(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } StringTokenizer t(xmlField," "); try { int ndim = Integer::parseInt(t.nextToken()); if (ndim != 1) { throw ConversionException("Error: Field \"" + name + "\": Invalid array format", tableName); } int dim0 = Integer::parseInt(t.nextToken()); vector<EntityRef> value (dim0); if (dim0 == 0) return value; for (int i = 0; i < dim0; ++i) { value[i] = EntityRef::getEntityRef(t); } if (t.hasMoreTokens()) { throw ConversionException("Error: Field \"" + name + "\": Syntax error.", tableName); } return value; } catch (const NumberFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } catch (const OutOfBoundsException &e) { throw ConversionException("Error: Field \"" + name + "\": Unexpected end of string", tableName); } catch (const TagFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } } vector< vector<EntityRef> > Parser::get2DEntityRef(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } StringTokenizer t(xmlField," "); try { int ndim = Integer::parseInt(t.nextToken()); if (ndim != 2) { throw ConversionException("Error: Field \"" + name + "\": Invalid array format", tableName); } int dim0 = Integer::parseInt(t.nextToken()); int dim1 = Integer::parseInt(t.nextToken()); vector< vector<EntityRef> > value; if (dim0 == 0 || dim1 == 0) return value; vector<EntityRef> v_aux; for (int i = 0; i < dim0; ++i) { v_aux.clear(); for (int j = 0; j < dim1; ++j) { v_aux.push_back(EntityRef::getEntityRef(t)); } value.push_back(v_aux); } if (t.hasMoreTokens()) { throw ConversionException("Error: Field \"" + name + "\": Syntax error.", tableName); } return value; } catch (const NumberFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } catch (const OutOfBoundsException &e) { throw ConversionException("Error: Field \"" + name + "\": Unexpected end of string", tableName); } catch (const TagFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } } vector< vector< vector<EntityRef> > > Parser::get3DEntityRef(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } StringTokenizer t(xmlField," "); try { int ndim = Integer::parseInt(t.nextToken()); if (ndim != 3) { throw ConversionException("Error: Field \"" + name + "\": Invalid array format", tableName); } int dim0 = Integer::parseInt(t.nextToken()); int dim1 = Integer::parseInt(t.nextToken()); int dim2 = Integer::parseInt(t.nextToken()); vector< vector< vector<EntityRef> > > value ; if (dim0 == 0 || dim1 == 0 || dim2 == 0) return value; vector<vector<EntityRef> > vv_aux; vector<EntityRef> v_aux; for (int i = 0; i < dim0; ++i) { vv_aux.clear(); for (int j = 0; j < dim1; ++j) { v_aux.clear(); for (int k = 0; k < dim2; ++k) { v_aux.push_back(EntityRef::getEntityRef(t)); } vv_aux.push_back(v_aux); } value.push_back(vv_aux); } if (t.hasMoreTokens()) { throw ConversionException("Error: Field \"" + name + "\": Syntax error.", tableName); } return value; } catch (const NumberFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } catch (const OutOfBoundsException &e) { throw ConversionException("Error: Field \"" + name + "\": Unexpected end of string", tableName); } catch (const TagFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } } vector< vector< vector< vector<EntityRef> > > >Parser::get4DEntityRef(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } StringTokenizer t(xmlField," "); try { int ndim = Integer::parseInt(t.nextToken()); if (ndim != 4) { throw ConversionException("Error: Field \"" + name + "\": Invalid array format", tableName); } int dim0 = Integer::parseInt(t.nextToken()); int dim1 = Integer::parseInt(t.nextToken()); int dim2 = Integer::parseInt(t.nextToken()); int dim3 = Integer::parseInt(t.nextToken()); vector<vector< vector< vector<EntityRef> > > >value; if (dim0 == 0 || dim1 == 0 || dim2 == 0 || dim3 == 0) return value; vector<vector<vector<EntityRef> > >vvv_aux; vector<vector< EntityRef> > vv_aux; vector<EntityRef> v_aux; for (int i = 0; i < dim0; ++i) { vvv_aux.clear(); for (int j = 0; j < dim1; ++j) { vv_aux.clear(); for (int k = 0; k < dim2; ++k) { v_aux.clear(); for (int l = 0; l < dim3; l++) { v_aux.push_back(EntityRef::getEntityRef(t)); } vv_aux.push_back(v_aux); } vvv_aux.push_back(vv_aux); } value.push_back(vvv_aux); } if (t.hasMoreTokens()) { throw ConversionException("Error: Field \"" + name + "\": Syntax error.", tableName); } return value; } catch (const NumberFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } catch (const OutOfBoundsException &e) { throw ConversionException("Error: Field \"" + name + "\": Unexpected end of string", tableName); } catch (const TagFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } } // Field type: Flux void Parser::toXML(Flux data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append(data.toString()); buf.append(" </" + name + "> "); } void Parser::toXML(vector<Flux> data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append("1 "); buf.append(Integer::toString(data.size())); buf.append(" "); for (unsigned int i = 0; i < data.size(); ++i) { buf.append(data[i].toString()); buf.append(" "); } buf.append(" </" + name + "> "); } void Parser::toXML(vector< vector<Flux> > data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append("2 "); buf.append(Integer::toString(data.size())); buf.append(" "); buf.append(Integer::toString(data[0].size())); buf.append(" "); for (unsigned int i = 0; i < data.size(); ++i) { for (unsigned int j = 0; j < data[i].size(); ++j) { buf.append(data[i][j].toString()); buf.append(" "); } } buf.append(" </" + name + "> "); } void Parser::toXML(vector< vector< vector<Flux> > > data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append("3 "); buf.append(Integer::toString(data.size())); buf.append(" "); buf.append(Integer::toString(data[0].size())); buf.append(" "); buf.append(Integer::toString(data[0][0].size())); buf.append(" "); for (unsigned int i = 0; i < data.size(); ++i) { for (unsigned int j = 0; j < data[i].size(); ++j) { for (unsigned int k = 0; k < data[i][j].size(); ++k) { buf.append(data[i][j][k].toString()); buf.append(" "); } } } buf.append(" </" + name + "> "); } void Parser::toXML(vector<vector< vector< vector<Flux> > > >data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append("4 "); buf.append(Integer::toString(data.size())); buf.append(" "); buf.append(Integer::toString(data[0].size())); buf.append(" "); buf.append(Integer::toString(data[0][0].size())); buf.append(" "); buf.append(Integer::toString(data[0][0][0].size())); buf.append(" "); for (unsigned int i = 0; i < data.size(); ++i) { for (unsigned int j = 0; j < data[i].size(); ++j) { for (unsigned int k = 0; k < data[i][j].size(); ++k) { for (unsigned int l = 0; l < data[i][j][k].size(); l++) { buf.append(data[i][j][k][l].toString()); buf.append(" "); } } } } buf.append(" </" + name + "> "); } Flux Parser::getFlux(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) throw ConversionException("Error: Missing field \"" + name + "\" or invalid syntax",tableName); try { return Flux (xmlField); } catch (const InvalidArgumentException &e) { throw ConversionException("Error: message was '"+ e.getMessage()+ "'", tableName); } } vector<Flux> Parser::get1DFlux(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } StringTokenizer t(xmlField," "); try { int ndim = Integer::parseInt(t.nextToken()); if (ndim != 1) { throw ConversionException("Error: Field \"" + name + "\": Invalid array format", tableName); } int dim0 = Integer::parseInt(t.nextToken()); vector<Flux> value (dim0); if (dim0 == 0) return value; for (int i = 0; i < dim0; ++i) { value[i] = Flux::getFlux(t); } if (t.hasMoreTokens()) { throw ConversionException("Error: Field \"" + name + "\": Syntax error.", tableName); } return value; } catch (const NumberFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } catch (const OutOfBoundsException &e) { throw ConversionException("Error: Field \"" + name + "\": Unexpected end of string", tableName); } catch (const TagFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } } vector< vector<Flux> > Parser::get2DFlux(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } StringTokenizer t(xmlField," "); try { int ndim = Integer::parseInt(t.nextToken()); if (ndim != 2) { throw ConversionException("Error: Field \"" + name + "\": Invalid array format", tableName); } int dim0 = Integer::parseInt(t.nextToken()); int dim1 = Integer::parseInt(t.nextToken()); vector< vector<Flux> > value; if (dim0 == 0 || dim1 == 0) return value; vector<Flux> v_aux; for (int i = 0; i < dim0; ++i) { v_aux.clear(); for (int j = 0; j < dim1; ++j) { v_aux.push_back(Flux::getFlux(t)); } value.push_back(v_aux); } if (t.hasMoreTokens()) { throw ConversionException("Error: Field \"" + name + "\": Syntax error.", tableName); } return value; } catch (const NumberFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } catch (const OutOfBoundsException &e) { throw ConversionException("Error: Field \"" + name + "\": Unexpected end of string", tableName); } catch (const TagFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } } vector< vector< vector<Flux> > > Parser::get3DFlux(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } StringTokenizer t(xmlField," "); try { int ndim = Integer::parseInt(t.nextToken()); if (ndim != 3) { throw ConversionException("Error: Field \"" + name + "\": Invalid array format", tableName); } int dim0 = Integer::parseInt(t.nextToken()); int dim1 = Integer::parseInt(t.nextToken()); int dim2 = Integer::parseInt(t.nextToken()); vector< vector< vector<Flux> > > value ; if (dim0 == 0 || dim1 == 0 || dim2 == 0) return value; vector<vector<Flux> > vv_aux; vector<Flux> v_aux; for (int i = 0; i < dim0; ++i) { vv_aux.clear(); for (int j = 0; j < dim1; ++j) { v_aux.clear(); for (int k = 0; k < dim2; ++k) { v_aux.push_back(Flux::getFlux(t)); } vv_aux.push_back(v_aux); } value.push_back(vv_aux); } if (t.hasMoreTokens()) { throw ConversionException("Error: Field \"" + name + "\": Syntax error.", tableName); } return value; } catch (const NumberFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } catch (const OutOfBoundsException &e) { throw ConversionException("Error: Field \"" + name + "\": Unexpected end of string", tableName); } catch (const TagFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } } vector< vector< vector< vector<Flux> > > >Parser::get4DFlux(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } StringTokenizer t(xmlField," "); try { int ndim = Integer::parseInt(t.nextToken()); if (ndim != 4) { throw ConversionException("Error: Field \"" + name + "\": Invalid array format", tableName); } int dim0 = Integer::parseInt(t.nextToken()); int dim1 = Integer::parseInt(t.nextToken()); int dim2 = Integer::parseInt(t.nextToken()); int dim3 = Integer::parseInt(t.nextToken()); vector<vector< vector< vector<Flux> > > >value; if (dim0 == 0 || dim1 == 0 || dim2 == 0 || dim3 == 0) return value; vector<vector<vector<Flux> > >vvv_aux; vector<vector< Flux> > vv_aux; vector<Flux> v_aux; for (int i = 0; i < dim0; ++i) { vvv_aux.clear(); for (int j = 0; j < dim1; ++j) { vv_aux.clear(); for (int k = 0; k < dim2; ++k) { v_aux.clear(); for (int l = 0; l < dim3; l++) { v_aux.push_back(Flux::getFlux(t)); } vv_aux.push_back(v_aux); } vvv_aux.push_back(vv_aux); } value.push_back(vvv_aux); } if (t.hasMoreTokens()) { throw ConversionException("Error: Field \"" + name + "\": Syntax error.", tableName); } return value; } catch (const NumberFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } catch (const OutOfBoundsException &e) { throw ConversionException("Error: Field \"" + name + "\": Unexpected end of string", tableName); } catch (const TagFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } } // Field type: Frequency void Parser::toXML(Frequency data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append(data.toString()); buf.append(" </" + name + "> "); } void Parser::toXML(vector<Frequency> data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append("1 "); buf.append(Integer::toString(data.size())); buf.append(" "); for (unsigned int i = 0; i < data.size(); ++i) { buf.append(data[i].toString()); buf.append(" "); } buf.append(" </" + name + "> "); } void Parser::toXML(vector< vector<Frequency> > data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append("2 "); buf.append(Integer::toString(data.size())); buf.append(" "); buf.append(Integer::toString(data[0].size())); buf.append(" "); for (unsigned int i = 0; i < data.size(); ++i) { for (unsigned int j = 0; j < data[i].size(); ++j) { buf.append(data[i][j].toString()); buf.append(" "); } } buf.append(" </" + name + "> "); } void Parser::toXML(vector< vector< vector<Frequency> > > data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append("3 "); buf.append(Integer::toString(data.size())); buf.append(" "); buf.append(Integer::toString(data[0].size())); buf.append(" "); buf.append(Integer::toString(data[0][0].size())); buf.append(" "); for (unsigned int i = 0; i < data.size(); ++i) { for (unsigned int j = 0; j < data[i].size(); ++j) { for (unsigned int k = 0; k < data[i][j].size(); ++k) { buf.append(data[i][j][k].toString()); buf.append(" "); } } } buf.append(" </" + name + "> "); } void Parser::toXML(vector<vector< vector< vector<Frequency> > > >data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append("4 "); buf.append(Integer::toString(data.size())); buf.append(" "); buf.append(Integer::toString(data[0].size())); buf.append(" "); buf.append(Integer::toString(data[0][0].size())); buf.append(" "); buf.append(Integer::toString(data[0][0][0].size())); buf.append(" "); for (unsigned int i = 0; i < data.size(); ++i) { for (unsigned int j = 0; j < data[i].size(); ++j) { for (unsigned int k = 0; k < data[i][j].size(); ++k) { for (unsigned int l = 0; l < data[i][j][k].size(); l++) { buf.append(data[i][j][k][l].toString()); buf.append(" "); } } } } buf.append(" </" + name + "> "); } Frequency Parser::getFrequency(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) throw ConversionException("Error: Missing field \"" + name + "\" or invalid syntax",tableName); try { return Frequency (xmlField); } catch (const InvalidArgumentException &e) { throw ConversionException("Error: message was '"+ e.getMessage()+ "'", tableName); } } vector<Frequency> Parser::get1DFrequency(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } StringTokenizer t(xmlField," "); try { int ndim = Integer::parseInt(t.nextToken()); if (ndim != 1) { throw ConversionException("Error: Field \"" + name + "\": Invalid array format", tableName); } int dim0 = Integer::parseInt(t.nextToken()); vector<Frequency> value (dim0); if (dim0 == 0) return value; for (int i = 0; i < dim0; ++i) { value[i] = Frequency::getFrequency(t); } if (t.hasMoreTokens()) { throw ConversionException("Error: Field \"" + name + "\": Syntax error.", tableName); } return value; } catch (const NumberFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } catch (const OutOfBoundsException &e) { throw ConversionException("Error: Field \"" + name + "\": Unexpected end of string", tableName); } catch (const TagFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } } vector< vector<Frequency> > Parser::get2DFrequency(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } StringTokenizer t(xmlField," "); try { int ndim = Integer::parseInt(t.nextToken()); if (ndim != 2) { throw ConversionException("Error: Field \"" + name + "\": Invalid array format", tableName); } int dim0 = Integer::parseInt(t.nextToken()); int dim1 = Integer::parseInt(t.nextToken()); vector< vector<Frequency> > value; if (dim0 == 0 || dim1 == 0) return value; vector<Frequency> v_aux; for (int i = 0; i < dim0; ++i) { v_aux.clear(); for (int j = 0; j < dim1; ++j) { v_aux.push_back(Frequency::getFrequency(t)); } value.push_back(v_aux); } if (t.hasMoreTokens()) { throw ConversionException("Error: Field \"" + name + "\": Syntax error.", tableName); } return value; } catch (const NumberFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } catch (const OutOfBoundsException &e) { throw ConversionException("Error: Field \"" + name + "\": Unexpected end of string", tableName); } catch (const TagFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } } vector< vector< vector<Frequency> > > Parser::get3DFrequency(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } StringTokenizer t(xmlField," "); try { int ndim = Integer::parseInt(t.nextToken()); if (ndim != 3) { throw ConversionException("Error: Field \"" + name + "\": Invalid array format", tableName); } int dim0 = Integer::parseInt(t.nextToken()); int dim1 = Integer::parseInt(t.nextToken()); int dim2 = Integer::parseInt(t.nextToken()); vector< vector< vector<Frequency> > > value ; if (dim0 == 0 || dim1 == 0 || dim2 == 0) return value; vector<vector<Frequency> > vv_aux; vector<Frequency> v_aux; for (int i = 0; i < dim0; ++i) { vv_aux.clear(); for (int j = 0; j < dim1; ++j) { v_aux.clear(); for (int k = 0; k < dim2; ++k) { v_aux.push_back(Frequency::getFrequency(t)); } vv_aux.push_back(v_aux); } value.push_back(vv_aux); } if (t.hasMoreTokens()) { throw ConversionException("Error: Field \"" + name + "\": Syntax error.", tableName); } return value; } catch (const NumberFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } catch (const OutOfBoundsException &e) { throw ConversionException("Error: Field \"" + name + "\": Unexpected end of string", tableName); } catch (const TagFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } } vector< vector< vector< vector<Frequency> > > >Parser::get4DFrequency(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } StringTokenizer t(xmlField," "); try { int ndim = Integer::parseInt(t.nextToken()); if (ndim != 4) { throw ConversionException("Error: Field \"" + name + "\": Invalid array format", tableName); } int dim0 = Integer::parseInt(t.nextToken()); int dim1 = Integer::parseInt(t.nextToken()); int dim2 = Integer::parseInt(t.nextToken()); int dim3 = Integer::parseInt(t.nextToken()); vector<vector< vector< vector<Frequency> > > >value; if (dim0 == 0 || dim1 == 0 || dim2 == 0 || dim3 == 0) return value; vector<vector<vector<Frequency> > >vvv_aux; vector<vector< Frequency> > vv_aux; vector<Frequency> v_aux; for (int i = 0; i < dim0; ++i) { vvv_aux.clear(); for (int j = 0; j < dim1; ++j) { vv_aux.clear(); for (int k = 0; k < dim2; ++k) { v_aux.clear(); for (int l = 0; l < dim3; l++) { v_aux.push_back(Frequency::getFrequency(t)); } vv_aux.push_back(v_aux); } vvv_aux.push_back(vv_aux); } value.push_back(vvv_aux); } if (t.hasMoreTokens()) { throw ConversionException("Error: Field \"" + name + "\": Syntax error.", tableName); } return value; } catch (const NumberFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } catch (const OutOfBoundsException &e) { throw ConversionException("Error: Field \"" + name + "\": Unexpected end of string", tableName); } catch (const TagFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } } // Field type: Humidity void Parser::toXML(Humidity data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append(data.toString()); buf.append(" </" + name + "> "); } void Parser::toXML(vector<Humidity> data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append("1 "); buf.append(Integer::toString(data.size())); buf.append(" "); for (unsigned int i = 0; i < data.size(); ++i) { buf.append(data[i].toString()); buf.append(" "); } buf.append(" </" + name + "> "); } void Parser::toXML(vector< vector<Humidity> > data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append("2 "); buf.append(Integer::toString(data.size())); buf.append(" "); buf.append(Integer::toString(data[0].size())); buf.append(" "); for (unsigned int i = 0; i < data.size(); ++i) { for (unsigned int j = 0; j < data[i].size(); ++j) { buf.append(data[i][j].toString()); buf.append(" "); } } buf.append(" </" + name + "> "); } void Parser::toXML(vector< vector< vector<Humidity> > > data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append("3 "); buf.append(Integer::toString(data.size())); buf.append(" "); buf.append(Integer::toString(data[0].size())); buf.append(" "); buf.append(Integer::toString(data[0][0].size())); buf.append(" "); for (unsigned int i = 0; i < data.size(); ++i) { for (unsigned int j = 0; j < data[i].size(); ++j) { for (unsigned int k = 0; k < data[i][j].size(); ++k) { buf.append(data[i][j][k].toString()); buf.append(" "); } } } buf.append(" </" + name + "> "); } void Parser::toXML(vector<vector< vector< vector<Humidity> > > >data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append("4 "); buf.append(Integer::toString(data.size())); buf.append(" "); buf.append(Integer::toString(data[0].size())); buf.append(" "); buf.append(Integer::toString(data[0][0].size())); buf.append(" "); buf.append(Integer::toString(data[0][0][0].size())); buf.append(" "); for (unsigned int i = 0; i < data.size(); ++i) { for (unsigned int j = 0; j < data[i].size(); ++j) { for (unsigned int k = 0; k < data[i][j].size(); ++k) { for (unsigned int l = 0; l < data[i][j][k].size(); l++) { buf.append(data[i][j][k][l].toString()); buf.append(" "); } } } } buf.append(" </" + name + "> "); } Humidity Parser::getHumidity(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) throw ConversionException("Error: Missing field \"" + name + "\" or invalid syntax",tableName); try { return Humidity (xmlField); } catch (const InvalidArgumentException &e) { throw ConversionException("Error: message was '"+ e.getMessage()+ "'", tableName); } } vector<Humidity> Parser::get1DHumidity(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } StringTokenizer t(xmlField," "); try { int ndim = Integer::parseInt(t.nextToken()); if (ndim != 1) { throw ConversionException("Error: Field \"" + name + "\": Invalid array format", tableName); } int dim0 = Integer::parseInt(t.nextToken()); vector<Humidity> value (dim0); if (dim0 == 0) return value; for (int i = 0; i < dim0; ++i) { value[i] = Humidity::getHumidity(t); } if (t.hasMoreTokens()) { throw ConversionException("Error: Field \"" + name + "\": Syntax error.", tableName); } return value; } catch (const NumberFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } catch (const OutOfBoundsException &e) { throw ConversionException("Error: Field \"" + name + "\": Unexpected end of string", tableName); } catch (const TagFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } } vector< vector<Humidity> > Parser::get2DHumidity(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } StringTokenizer t(xmlField," "); try { int ndim = Integer::parseInt(t.nextToken()); if (ndim != 2) { throw ConversionException("Error: Field \"" + name + "\": Invalid array format", tableName); } int dim0 = Integer::parseInt(t.nextToken()); int dim1 = Integer::parseInt(t.nextToken()); vector< vector<Humidity> > value; if (dim0 == 0 || dim1 == 0) return value; vector<Humidity> v_aux; for (int i = 0; i < dim0; ++i) { v_aux.clear(); for (int j = 0; j < dim1; ++j) { v_aux.push_back(Humidity::getHumidity(t)); } value.push_back(v_aux); } if (t.hasMoreTokens()) { throw ConversionException("Error: Field \"" + name + "\": Syntax error.", tableName); } return value; } catch (const NumberFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } catch (const OutOfBoundsException &e) { throw ConversionException("Error: Field \"" + name + "\": Unexpected end of string", tableName); } catch (const TagFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } } vector< vector< vector<Humidity> > > Parser::get3DHumidity(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } StringTokenizer t(xmlField," "); try { int ndim = Integer::parseInt(t.nextToken()); if (ndim != 3) { throw ConversionException("Error: Field \"" + name + "\": Invalid array format", tableName); } int dim0 = Integer::parseInt(t.nextToken()); int dim1 = Integer::parseInt(t.nextToken()); int dim2 = Integer::parseInt(t.nextToken()); vector< vector< vector<Humidity> > > value ; if (dim0 == 0 || dim1 == 0 || dim2 == 0) return value; vector<vector<Humidity> > vv_aux; vector<Humidity> v_aux; for (int i = 0; i < dim0; ++i) { vv_aux.clear(); for (int j = 0; j < dim1; ++j) { v_aux.clear(); for (int k = 0; k < dim2; ++k) { v_aux.push_back(Humidity::getHumidity(t)); } vv_aux.push_back(v_aux); } value.push_back(vv_aux); } if (t.hasMoreTokens()) { throw ConversionException("Error: Field \"" + name + "\": Syntax error.", tableName); } return value; } catch (const NumberFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } catch (const OutOfBoundsException &e) { throw ConversionException("Error: Field \"" + name + "\": Unexpected end of string", tableName); } catch (const TagFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } } vector< vector< vector< vector<Humidity> > > >Parser::get4DHumidity(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } StringTokenizer t(xmlField," "); try { int ndim = Integer::parseInt(t.nextToken()); if (ndim != 4) { throw ConversionException("Error: Field \"" + name + "\": Invalid array format", tableName); } int dim0 = Integer::parseInt(t.nextToken()); int dim1 = Integer::parseInt(t.nextToken()); int dim2 = Integer::parseInt(t.nextToken()); int dim3 = Integer::parseInt(t.nextToken()); vector<vector< vector< vector<Humidity> > > >value; if (dim0 == 0 || dim1 == 0 || dim2 == 0 || dim3 == 0) return value; vector<vector<vector<Humidity> > >vvv_aux; vector<vector< Humidity> > vv_aux; vector<Humidity> v_aux; for (int i = 0; i < dim0; ++i) { vvv_aux.clear(); for (int j = 0; j < dim1; ++j) { vv_aux.clear(); for (int k = 0; k < dim2; ++k) { v_aux.clear(); for (int l = 0; l < dim3; l++) { v_aux.push_back(Humidity::getHumidity(t)); } vv_aux.push_back(v_aux); } vvv_aux.push_back(vv_aux); } value.push_back(vvv_aux); } if (t.hasMoreTokens()) { throw ConversionException("Error: Field \"" + name + "\": Syntax error.", tableName); } return value; } catch (const NumberFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } catch (const OutOfBoundsException &e) { throw ConversionException("Error: Field \"" + name + "\": Unexpected end of string", tableName); } catch (const TagFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } } // Field type: Interval void Parser::toXML(Interval data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append(data.toString()); buf.append(" </" + name + "> "); } void Parser::toXML(vector<Interval> data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append("1 "); buf.append(Integer::toString(data.size())); buf.append(" "); for (unsigned int i = 0; i < data.size(); ++i) { buf.append(data[i].toString()); buf.append(" "); } buf.append(" </" + name + "> "); } void Parser::toXML(vector< vector<Interval> > data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append("2 "); buf.append(Integer::toString(data.size())); buf.append(" "); buf.append(Integer::toString(data[0].size())); buf.append(" "); for (unsigned int i = 0; i < data.size(); ++i) { for (unsigned int j = 0; j < data[i].size(); ++j) { buf.append(data[i][j].toString()); buf.append(" "); } } buf.append(" </" + name + "> "); } void Parser::toXML(vector< vector< vector<Interval> > > data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append("3 "); buf.append(Integer::toString(data.size())); buf.append(" "); buf.append(Integer::toString(data[0].size())); buf.append(" "); buf.append(Integer::toString(data[0][0].size())); buf.append(" "); for (unsigned int i = 0; i < data.size(); ++i) { for (unsigned int j = 0; j < data[i].size(); ++j) { for (unsigned int k = 0; k < data[i][j].size(); ++k) { buf.append(data[i][j][k].toString()); buf.append(" "); } } } buf.append(" </" + name + "> "); } void Parser::toXML(vector<vector< vector< vector<Interval> > > >data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append("4 "); buf.append(Integer::toString(data.size())); buf.append(" "); buf.append(Integer::toString(data[0].size())); buf.append(" "); buf.append(Integer::toString(data[0][0].size())); buf.append(" "); buf.append(Integer::toString(data[0][0][0].size())); buf.append(" "); for (unsigned int i = 0; i < data.size(); ++i) { for (unsigned int j = 0; j < data[i].size(); ++j) { for (unsigned int k = 0; k < data[i][j].size(); ++k) { for (unsigned int l = 0; l < data[i][j][k].size(); l++) { buf.append(data[i][j][k][l].toString()); buf.append(" "); } } } } buf.append(" </" + name + "> "); } Interval Parser::getInterval(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) throw ConversionException("Error: Missing field \"" + name + "\" or invalid syntax",tableName); try { return Interval (xmlField); } catch (const InvalidArgumentException &e) { throw ConversionException("Error: message was '"+ e.getMessage()+ "'", tableName); } } vector<Interval> Parser::get1DInterval(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } StringTokenizer t(xmlField," "); try { int ndim = Integer::parseInt(t.nextToken()); if (ndim != 1) { throw ConversionException("Error: Field \"" + name + "\": Invalid array format", tableName); } int dim0 = Integer::parseInt(t.nextToken()); vector<Interval> value (dim0); if (dim0 == 0) return value; for (int i = 0; i < dim0; ++i) { value[i] = Interval::getInterval(t); } if (t.hasMoreTokens()) { throw ConversionException("Error: Field \"" + name + "\": Syntax error.", tableName); } return value; } catch (const NumberFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } catch (const OutOfBoundsException &e) { throw ConversionException("Error: Field \"" + name + "\": Unexpected end of string", tableName); } catch (const TagFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } } vector< vector<Interval> > Parser::get2DInterval(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } StringTokenizer t(xmlField," "); try { int ndim = Integer::parseInt(t.nextToken()); if (ndim != 2) { throw ConversionException("Error: Field \"" + name + "\": Invalid array format", tableName); } int dim0 = Integer::parseInt(t.nextToken()); int dim1 = Integer::parseInt(t.nextToken()); vector< vector<Interval> > value; if (dim0 == 0 || dim1 == 0) return value; vector<Interval> v_aux; for (int i = 0; i < dim0; ++i) { v_aux.clear(); for (int j = 0; j < dim1; ++j) { v_aux.push_back(Interval::getInterval(t)); } value.push_back(v_aux); } if (t.hasMoreTokens()) { throw ConversionException("Error: Field \"" + name + "\": Syntax error.", tableName); } return value; } catch (const NumberFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } catch (const OutOfBoundsException &e) { throw ConversionException("Error: Field \"" + name + "\": Unexpected end of string", tableName); } catch (const TagFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } } vector< vector< vector<Interval> > > Parser::get3DInterval(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } StringTokenizer t(xmlField," "); try { int ndim = Integer::parseInt(t.nextToken()); if (ndim != 3) { throw ConversionException("Error: Field \"" + name + "\": Invalid array format", tableName); } int dim0 = Integer::parseInt(t.nextToken()); int dim1 = Integer::parseInt(t.nextToken()); int dim2 = Integer::parseInt(t.nextToken()); vector< vector< vector<Interval> > > value ; if (dim0 == 0 || dim1 == 0 || dim2 == 0) return value; vector<vector<Interval> > vv_aux; vector<Interval> v_aux; for (int i = 0; i < dim0; ++i) { vv_aux.clear(); for (int j = 0; j < dim1; ++j) { v_aux.clear(); for (int k = 0; k < dim2; ++k) { v_aux.push_back(Interval::getInterval(t)); } vv_aux.push_back(v_aux); } value.push_back(vv_aux); } if (t.hasMoreTokens()) { throw ConversionException("Error: Field \"" + name + "\": Syntax error.", tableName); } return value; } catch (const NumberFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } catch (const OutOfBoundsException &e) { throw ConversionException("Error: Field \"" + name + "\": Unexpected end of string", tableName); } catch (const TagFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } } vector< vector< vector< vector<Interval> > > >Parser::get4DInterval(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } StringTokenizer t(xmlField," "); try { int ndim = Integer::parseInt(t.nextToken()); if (ndim != 4) { throw ConversionException("Error: Field \"" + name + "\": Invalid array format", tableName); } int dim0 = Integer::parseInt(t.nextToken()); int dim1 = Integer::parseInt(t.nextToken()); int dim2 = Integer::parseInt(t.nextToken()); int dim3 = Integer::parseInt(t.nextToken()); vector<vector< vector< vector<Interval> > > >value; if (dim0 == 0 || dim1 == 0 || dim2 == 0 || dim3 == 0) return value; vector<vector<vector<Interval> > >vvv_aux; vector<vector< Interval> > vv_aux; vector<Interval> v_aux; for (int i = 0; i < dim0; ++i) { vvv_aux.clear(); for (int j = 0; j < dim1; ++j) { vv_aux.clear(); for (int k = 0; k < dim2; ++k) { v_aux.clear(); for (int l = 0; l < dim3; l++) { v_aux.push_back(Interval::getInterval(t)); } vv_aux.push_back(v_aux); } vvv_aux.push_back(vv_aux); } value.push_back(vvv_aux); } if (t.hasMoreTokens()) { throw ConversionException("Error: Field \"" + name + "\": Syntax error.", tableName); } return value; } catch (const NumberFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } catch (const OutOfBoundsException &e) { throw ConversionException("Error: Field \"" + name + "\": Unexpected end of string", tableName); } catch (const TagFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } } // Field type: Length void Parser::toXML(Length data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append(data.toString()); buf.append(" </" + name + "> "); } void Parser::toXML(vector<Length> data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append("1 "); buf.append(Integer::toString(data.size())); buf.append(" "); for (unsigned int i = 0; i < data.size(); ++i) { buf.append(data[i].toString()); buf.append(" "); } buf.append(" </" + name + "> "); } void Parser::toXML(vector< vector<Length> > data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append("2 "); buf.append(Integer::toString(data.size())); buf.append(" "); buf.append(Integer::toString(data[0].size())); buf.append(" "); for (unsigned int i = 0; i < data.size(); ++i) { for (unsigned int j = 0; j < data[i].size(); ++j) { buf.append(data[i][j].toString()); buf.append(" "); } } buf.append(" </" + name + "> "); } void Parser::toXML(vector< vector< vector<Length> > > data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append("3 "); buf.append(Integer::toString(data.size())); buf.append(" "); buf.append(Integer::toString(data[0].size())); buf.append(" "); buf.append(Integer::toString(data[0][0].size())); buf.append(" "); for (unsigned int i = 0; i < data.size(); ++i) { for (unsigned int j = 0; j < data[i].size(); ++j) { for (unsigned int k = 0; k < data[i][j].size(); ++k) { buf.append(data[i][j][k].toString()); buf.append(" "); } } } buf.append(" </" + name + "> "); } void Parser::toXML(vector<vector< vector< vector<Length> > > >data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append("4 "); buf.append(Integer::toString(data.size())); buf.append(" "); buf.append(Integer::toString(data[0].size())); buf.append(" "); buf.append(Integer::toString(data[0][0].size())); buf.append(" "); buf.append(Integer::toString(data[0][0][0].size())); buf.append(" "); for (unsigned int i = 0; i < data.size(); ++i) { for (unsigned int j = 0; j < data[i].size(); ++j) { for (unsigned int k = 0; k < data[i][j].size(); ++k) { for (unsigned int l = 0; l < data[i][j][k].size(); l++) { buf.append(data[i][j][k][l].toString()); buf.append(" "); } } } } buf.append(" </" + name + "> "); } Length Parser::getLength(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) throw ConversionException("Error: Missing field \"" + name + "\" or invalid syntax",tableName); try { return Length (xmlField); } catch (const InvalidArgumentException &e) { throw ConversionException("Error: message was '"+ e.getMessage()+ "'", tableName); } } vector<Length> Parser::get1DLength(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } StringTokenizer t(xmlField," "); try { int ndim = Integer::parseInt(t.nextToken()); if (ndim != 1) { throw ConversionException("Error: Field \"" + name + "\": Invalid array format", tableName); } int dim0 = Integer::parseInt(t.nextToken()); vector<Length> value (dim0); if (dim0 == 0) return value; for (int i = 0; i < dim0; ++i) { value[i] = Length::getLength(t); } if (t.hasMoreTokens()) { throw ConversionException("Error: Field \"" + name + "\": Syntax error.", tableName); } return value; } catch (const NumberFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } catch (const OutOfBoundsException &e) { throw ConversionException("Error: Field \"" + name + "\": Unexpected end of string", tableName); } catch (const TagFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } } vector< vector<Length> > Parser::get2DLength(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } StringTokenizer t(xmlField," "); try { int ndim = Integer::parseInt(t.nextToken()); if (ndim != 2) { throw ConversionException("Error: Field \"" + name + "\": Invalid array format", tableName); } int dim0 = Integer::parseInt(t.nextToken()); int dim1 = Integer::parseInt(t.nextToken()); vector< vector<Length> > value; if (dim0 == 0 || dim1 == 0) return value; vector<Length> v_aux; for (int i = 0; i < dim0; ++i) { v_aux.clear(); for (int j = 0; j < dim1; ++j) { v_aux.push_back(Length::getLength(t)); } value.push_back(v_aux); } if (t.hasMoreTokens()) { throw ConversionException("Error: Field \"" + name + "\": Syntax error.", tableName); } return value; } catch (const NumberFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } catch (const OutOfBoundsException &e) { throw ConversionException("Error: Field \"" + name + "\": Unexpected end of string", tableName); } catch (const TagFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } } vector< vector< vector<Length> > > Parser::get3DLength(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } StringTokenizer t(xmlField," "); try { int ndim = Integer::parseInt(t.nextToken()); if (ndim != 3) { throw ConversionException("Error: Field \"" + name + "\": Invalid array format", tableName); } int dim0 = Integer::parseInt(t.nextToken()); int dim1 = Integer::parseInt(t.nextToken()); int dim2 = Integer::parseInt(t.nextToken()); vector< vector< vector<Length> > > value ; if (dim0 == 0 || dim1 == 0 || dim2 == 0) return value; vector<vector<Length> > vv_aux; vector<Length> v_aux; for (int i = 0; i < dim0; ++i) { vv_aux.clear(); for (int j = 0; j < dim1; ++j) { v_aux.clear(); for (int k = 0; k < dim2; ++k) { v_aux.push_back(Length::getLength(t)); } vv_aux.push_back(v_aux); } value.push_back(vv_aux); } if (t.hasMoreTokens()) { throw ConversionException("Error: Field \"" + name + "\": Syntax error.", tableName); } return value; } catch (const NumberFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } catch (const OutOfBoundsException &e) { throw ConversionException("Error: Field \"" + name + "\": Unexpected end of string", tableName); } catch (const TagFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } } vector< vector< vector< vector<Length> > > >Parser::get4DLength(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } StringTokenizer t(xmlField," "); try { int ndim = Integer::parseInt(t.nextToken()); if (ndim != 4) { throw ConversionException("Error: Field \"" + name + "\": Invalid array format", tableName); } int dim0 = Integer::parseInt(t.nextToken()); int dim1 = Integer::parseInt(t.nextToken()); int dim2 = Integer::parseInt(t.nextToken()); int dim3 = Integer::parseInt(t.nextToken()); vector<vector< vector< vector<Length> > > >value; if (dim0 == 0 || dim1 == 0 || dim2 == 0 || dim3 == 0) return value; vector<vector<vector<Length> > >vvv_aux; vector<vector< Length> > vv_aux; vector<Length> v_aux; for (int i = 0; i < dim0; ++i) { vvv_aux.clear(); for (int j = 0; j < dim1; ++j) { vv_aux.clear(); for (int k = 0; k < dim2; ++k) { v_aux.clear(); for (int l = 0; l < dim3; l++) { v_aux.push_back(Length::getLength(t)); } vv_aux.push_back(v_aux); } vvv_aux.push_back(vv_aux); } value.push_back(vvv_aux); } if (t.hasMoreTokens()) { throw ConversionException("Error: Field \"" + name + "\": Syntax error.", tableName); } return value; } catch (const NumberFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } catch (const OutOfBoundsException &e) { throw ConversionException("Error: Field \"" + name + "\": Unexpected end of string", tableName); } catch (const TagFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } } // Field type: Pressure void Parser::toXML(Pressure data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append(data.toString()); buf.append(" </" + name + "> "); } void Parser::toXML(vector<Pressure> data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append("1 "); buf.append(Integer::toString(data.size())); buf.append(" "); for (unsigned int i = 0; i < data.size(); ++i) { buf.append(data[i].toString()); buf.append(" "); } buf.append(" </" + name + "> "); } void Parser::toXML(vector< vector<Pressure> > data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append("2 "); buf.append(Integer::toString(data.size())); buf.append(" "); buf.append(Integer::toString(data[0].size())); buf.append(" "); for (unsigned int i = 0; i < data.size(); ++i) { for (unsigned int j = 0; j < data[i].size(); ++j) { buf.append(data[i][j].toString()); buf.append(" "); } } buf.append(" </" + name + "> "); } void Parser::toXML(vector< vector< vector<Pressure> > > data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append("3 "); buf.append(Integer::toString(data.size())); buf.append(" "); buf.append(Integer::toString(data[0].size())); buf.append(" "); buf.append(Integer::toString(data[0][0].size())); buf.append(" "); for (unsigned int i = 0; i < data.size(); ++i) { for (unsigned int j = 0; j < data[i].size(); ++j) { for (unsigned int k = 0; k < data[i][j].size(); ++k) { buf.append(data[i][j][k].toString()); buf.append(" "); } } } buf.append(" </" + name + "> "); } void Parser::toXML(vector<vector< vector< vector<Pressure> > > >data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append("4 "); buf.append(Integer::toString(data.size())); buf.append(" "); buf.append(Integer::toString(data[0].size())); buf.append(" "); buf.append(Integer::toString(data[0][0].size())); buf.append(" "); buf.append(Integer::toString(data[0][0][0].size())); buf.append(" "); for (unsigned int i = 0; i < data.size(); ++i) { for (unsigned int j = 0; j < data[i].size(); ++j) { for (unsigned int k = 0; k < data[i][j].size(); ++k) { for (unsigned int l = 0; l < data[i][j][k].size(); l++) { buf.append(data[i][j][k][l].toString()); buf.append(" "); } } } } buf.append(" </" + name + "> "); } Pressure Parser::getPressure(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) throw ConversionException("Error: Missing field \"" + name + "\" or invalid syntax",tableName); try { return Pressure (xmlField); } catch (const InvalidArgumentException &e) { throw ConversionException("Error: message was '"+ e.getMessage()+ "'", tableName); } } vector<Pressure> Parser::get1DPressure(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } StringTokenizer t(xmlField," "); try { int ndim = Integer::parseInt(t.nextToken()); if (ndim != 1) { throw ConversionException("Error: Field \"" + name + "\": Invalid array format", tableName); } int dim0 = Integer::parseInt(t.nextToken()); vector<Pressure> value (dim0); if (dim0 == 0) return value; for (int i = 0; i < dim0; ++i) { value[i] = Pressure::getPressure(t); } if (t.hasMoreTokens()) { throw ConversionException("Error: Field \"" + name + "\": Syntax error.", tableName); } return value; } catch (const NumberFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } catch (const OutOfBoundsException &e) { throw ConversionException("Error: Field \"" + name + "\": Unexpected end of string", tableName); } catch (const TagFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } } vector< vector<Pressure> > Parser::get2DPressure(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } StringTokenizer t(xmlField," "); try { int ndim = Integer::parseInt(t.nextToken()); if (ndim != 2) { throw ConversionException("Error: Field \"" + name + "\": Invalid array format", tableName); } int dim0 = Integer::parseInt(t.nextToken()); int dim1 = Integer::parseInt(t.nextToken()); vector< vector<Pressure> > value; if (dim0 == 0 || dim1 == 0) return value; vector<Pressure> v_aux; for (int i = 0; i < dim0; ++i) { v_aux.clear(); for (int j = 0; j < dim1; ++j) { v_aux.push_back(Pressure::getPressure(t)); } value.push_back(v_aux); } if (t.hasMoreTokens()) { throw ConversionException("Error: Field \"" + name + "\": Syntax error.", tableName); } return value; } catch (const NumberFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } catch (const OutOfBoundsException &e) { throw ConversionException("Error: Field \"" + name + "\": Unexpected end of string", tableName); } catch (const TagFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } } vector< vector< vector<Pressure> > > Parser::get3DPressure(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } StringTokenizer t(xmlField," "); try { int ndim = Integer::parseInt(t.nextToken()); if (ndim != 3) { throw ConversionException("Error: Field \"" + name + "\": Invalid array format", tableName); } int dim0 = Integer::parseInt(t.nextToken()); int dim1 = Integer::parseInt(t.nextToken()); int dim2 = Integer::parseInt(t.nextToken()); vector< vector< vector<Pressure> > > value ; if (dim0 == 0 || dim1 == 0 || dim2 == 0) return value; vector<vector<Pressure> > vv_aux; vector<Pressure> v_aux; for (int i = 0; i < dim0; ++i) { vv_aux.clear(); for (int j = 0; j < dim1; ++j) { v_aux.clear(); for (int k = 0; k < dim2; ++k) { v_aux.push_back(Pressure::getPressure(t)); } vv_aux.push_back(v_aux); } value.push_back(vv_aux); } if (t.hasMoreTokens()) { throw ConversionException("Error: Field \"" + name + "\": Syntax error.", tableName); } return value; } catch (const NumberFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } catch (const OutOfBoundsException &e) { throw ConversionException("Error: Field \"" + name + "\": Unexpected end of string", tableName); } catch (const TagFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } } vector< vector< vector< vector<Pressure> > > >Parser::get4DPressure(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } StringTokenizer t(xmlField," "); try { int ndim = Integer::parseInt(t.nextToken()); if (ndim != 4) { throw ConversionException("Error: Field \"" + name + "\": Invalid array format", tableName); } int dim0 = Integer::parseInt(t.nextToken()); int dim1 = Integer::parseInt(t.nextToken()); int dim2 = Integer::parseInt(t.nextToken()); int dim3 = Integer::parseInt(t.nextToken()); vector<vector< vector< vector<Pressure> > > >value; if (dim0 == 0 || dim1 == 0 || dim2 == 0 || dim3 == 0) return value; vector<vector<vector<Pressure> > >vvv_aux; vector<vector< Pressure> > vv_aux; vector<Pressure> v_aux; for (int i = 0; i < dim0; ++i) { vvv_aux.clear(); for (int j = 0; j < dim1; ++j) { vv_aux.clear(); for (int k = 0; k < dim2; ++k) { v_aux.clear(); for (int l = 0; l < dim3; l++) { v_aux.push_back(Pressure::getPressure(t)); } vv_aux.push_back(v_aux); } vvv_aux.push_back(vv_aux); } value.push_back(vvv_aux); } if (t.hasMoreTokens()) { throw ConversionException("Error: Field \"" + name + "\": Syntax error.", tableName); } return value; } catch (const NumberFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } catch (const OutOfBoundsException &e) { throw ConversionException("Error: Field \"" + name + "\": Unexpected end of string", tableName); } catch (const TagFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } } // Field type: Speed void Parser::toXML(Speed data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append(data.toString()); buf.append(" </" + name + "> "); } void Parser::toXML(vector<Speed> data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append("1 "); buf.append(Integer::toString(data.size())); buf.append(" "); for (unsigned int i = 0; i < data.size(); ++i) { buf.append(data[i].toString()); buf.append(" "); } buf.append(" </" + name + "> "); } void Parser::toXML(vector< vector<Speed> > data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append("2 "); buf.append(Integer::toString(data.size())); buf.append(" "); buf.append(Integer::toString(data[0].size())); buf.append(" "); for (unsigned int i = 0; i < data.size(); ++i) { for (unsigned int j = 0; j < data[i].size(); ++j) { buf.append(data[i][j].toString()); buf.append(" "); } } buf.append(" </" + name + "> "); } void Parser::toXML(vector< vector< vector<Speed> > > data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append("3 "); buf.append(Integer::toString(data.size())); buf.append(" "); buf.append(Integer::toString(data[0].size())); buf.append(" "); buf.append(Integer::toString(data[0][0].size())); buf.append(" "); for (unsigned int i = 0; i < data.size(); ++i) { for (unsigned int j = 0; j < data[i].size(); ++j) { for (unsigned int k = 0; k < data[i][j].size(); ++k) { buf.append(data[i][j][k].toString()); buf.append(" "); } } } buf.append(" </" + name + "> "); } void Parser::toXML(vector<vector< vector< vector<Speed> > > >data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append("4 "); buf.append(Integer::toString(data.size())); buf.append(" "); buf.append(Integer::toString(data[0].size())); buf.append(" "); buf.append(Integer::toString(data[0][0].size())); buf.append(" "); buf.append(Integer::toString(data[0][0][0].size())); buf.append(" "); for (unsigned int i = 0; i < data.size(); ++i) { for (unsigned int j = 0; j < data[i].size(); ++j) { for (unsigned int k = 0; k < data[i][j].size(); ++k) { for (unsigned int l = 0; l < data[i][j][k].size(); l++) { buf.append(data[i][j][k][l].toString()); buf.append(" "); } } } } buf.append(" </" + name + "> "); } Speed Parser::getSpeed(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) throw ConversionException("Error: Missing field \"" + name + "\" or invalid syntax",tableName); try { return Speed (xmlField); } catch (const InvalidArgumentException &e) { throw ConversionException("Error: message was '"+ e.getMessage()+ "'", tableName); } } vector<Speed> Parser::get1DSpeed(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } StringTokenizer t(xmlField," "); try { int ndim = Integer::parseInt(t.nextToken()); if (ndim != 1) { throw ConversionException("Error: Field \"" + name + "\": Invalid array format", tableName); } int dim0 = Integer::parseInt(t.nextToken()); vector<Speed> value (dim0); if (dim0 == 0) return value; for (int i = 0; i < dim0; ++i) { value[i] = Speed::getSpeed(t); } if (t.hasMoreTokens()) { throw ConversionException("Error: Field \"" + name + "\": Syntax error.", tableName); } return value; } catch (const NumberFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } catch (const OutOfBoundsException &e) { throw ConversionException("Error: Field \"" + name + "\": Unexpected end of string", tableName); } catch (const TagFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } } vector< vector<Speed> > Parser::get2DSpeed(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } StringTokenizer t(xmlField," "); try { int ndim = Integer::parseInt(t.nextToken()); if (ndim != 2) { throw ConversionException("Error: Field \"" + name + "\": Invalid array format", tableName); } int dim0 = Integer::parseInt(t.nextToken()); int dim1 = Integer::parseInt(t.nextToken()); vector< vector<Speed> > value; if (dim0 == 0 || dim1 == 0) return value; vector<Speed> v_aux; for (int i = 0; i < dim0; ++i) { v_aux.clear(); for (int j = 0; j < dim1; ++j) { v_aux.push_back(Speed::getSpeed(t)); } value.push_back(v_aux); } if (t.hasMoreTokens()) { throw ConversionException("Error: Field \"" + name + "\": Syntax error.", tableName); } return value; } catch (const NumberFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } catch (const OutOfBoundsException &e) { throw ConversionException("Error: Field \"" + name + "\": Unexpected end of string", tableName); } catch (const TagFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } } vector< vector< vector<Speed> > > Parser::get3DSpeed(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } StringTokenizer t(xmlField," "); try { int ndim = Integer::parseInt(t.nextToken()); if (ndim != 3) { throw ConversionException("Error: Field \"" + name + "\": Invalid array format", tableName); } int dim0 = Integer::parseInt(t.nextToken()); int dim1 = Integer::parseInt(t.nextToken()); int dim2 = Integer::parseInt(t.nextToken()); vector< vector< vector<Speed> > > value ; if (dim0 == 0 || dim1 == 0 || dim2 == 0) return value; vector<vector<Speed> > vv_aux; vector<Speed> v_aux; for (int i = 0; i < dim0; ++i) { vv_aux.clear(); for (int j = 0; j < dim1; ++j) { v_aux.clear(); for (int k = 0; k < dim2; ++k) { v_aux.push_back(Speed::getSpeed(t)); } vv_aux.push_back(v_aux); } value.push_back(vv_aux); } if (t.hasMoreTokens()) { throw ConversionException("Error: Field \"" + name + "\": Syntax error.", tableName); } return value; } catch (const NumberFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } catch (const OutOfBoundsException &e) { throw ConversionException("Error: Field \"" + name + "\": Unexpected end of string", tableName); } catch (const TagFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } } vector< vector< vector< vector<Speed> > > >Parser::get4DSpeed(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } StringTokenizer t(xmlField," "); try { int ndim = Integer::parseInt(t.nextToken()); if (ndim != 4) { throw ConversionException("Error: Field \"" + name + "\": Invalid array format", tableName); } int dim0 = Integer::parseInt(t.nextToken()); int dim1 = Integer::parseInt(t.nextToken()); int dim2 = Integer::parseInt(t.nextToken()); int dim3 = Integer::parseInt(t.nextToken()); vector<vector< vector< vector<Speed> > > >value; if (dim0 == 0 || dim1 == 0 || dim2 == 0 || dim3 == 0) return value; vector<vector<vector<Speed> > >vvv_aux; vector<vector< Speed> > vv_aux; vector<Speed> v_aux; for (int i = 0; i < dim0; ++i) { vvv_aux.clear(); for (int j = 0; j < dim1; ++j) { vv_aux.clear(); for (int k = 0; k < dim2; ++k) { v_aux.clear(); for (int l = 0; l < dim3; l++) { v_aux.push_back(Speed::getSpeed(t)); } vv_aux.push_back(v_aux); } vvv_aux.push_back(vv_aux); } value.push_back(vvv_aux); } if (t.hasMoreTokens()) { throw ConversionException("Error: Field \"" + name + "\": Syntax error.", tableName); } return value; } catch (const NumberFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } catch (const OutOfBoundsException &e) { throw ConversionException("Error: Field \"" + name + "\": Unexpected end of string", tableName); } catch (const TagFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } } // Field type: Tag void Parser::toXML(Tag data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append(data.toString()); buf.append(" </" + name + "> "); } void Parser::toXML(set< Tag > data, const string &name, string &buf) { buf.append("<" + name + "> "); set < Tag >::iterator iter; for (iter=data.begin(); iter!=data.end(); iter++) { buf.append((*iter).toString()+" "); } } void Parser::toXML(vector<Tag> data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append("1 "); buf.append(Integer::toString(data.size())); buf.append(" "); for (unsigned int i = 0; i < data.size(); ++i) { buf.append(data[i].toString()); buf.append(" "); } buf.append(" </" + name + "> "); } void Parser::toXML(vector< vector<Tag> > data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append("2 "); buf.append(Integer::toString(data.size())); buf.append(" "); buf.append(Integer::toString(data[0].size())); buf.append(" "); for (unsigned int i = 0; i < data.size(); ++i) { for (unsigned int j = 0; j < data[i].size(); ++j) { buf.append(data[i][j].toString()); buf.append(" "); } } buf.append(" </" + name + "> "); } void Parser::toXML(vector< vector< vector<Tag> > > data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append("3 "); buf.append(Integer::toString(data.size())); buf.append(" "); buf.append(Integer::toString(data[0].size())); buf.append(" "); buf.append(Integer::toString(data[0][0].size())); buf.append(" "); for (unsigned int i = 0; i < data.size(); ++i) { for (unsigned int j = 0; j < data[i].size(); ++j) { for (unsigned int k = 0; k < data[i][j].size(); ++k) { buf.append(data[i][j][k].toString()); buf.append(" "); } } } buf.append(" </" + name + "> "); } void Parser::toXML(vector<vector< vector< vector<Tag> > > >data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append("4 "); buf.append(Integer::toString(data.size())); buf.append(" "); buf.append(Integer::toString(data[0].size())); buf.append(" "); buf.append(Integer::toString(data[0][0].size())); buf.append(" "); buf.append(Integer::toString(data[0][0][0].size())); buf.append(" "); for (unsigned int i = 0; i < data.size(); ++i) { for (unsigned int j = 0; j < data[i].size(); ++j) { for (unsigned int k = 0; k < data[i][j].size(); ++k) { for (unsigned int l = 0; l < data[i][j][k].size(); l++) { buf.append(data[i][j][k][l].toString()); buf.append(" "); } } } } buf.append(" </" + name + "> "); } set< Tag > Parser::getTagSet(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) throw ConversionException("Error: Missing field \"" + name + "\" or invalid syntax",tableName); StringTokenizer t(xmlField," "); set < Tag > result; while (t.hasMoreTokens()) { try { result.insert(Tag::parseTag(t.nextToken())); } catch (const TagFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } } return result; } Tag Parser::getTag(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) throw ConversionException("Error: Missing field \"" + name + "\" or invalid syntax",tableName); try { return Tag::parseTag(xmlField); } catch (const TagFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } } vector<Tag> Parser::get1DTag(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } StringTokenizer t(xmlField," "); try { int ndim = Integer::parseInt(t.nextToken()); if (ndim != 1) { throw ConversionException("Error: Field \"" + name + "\": Invalid array format", tableName); } int dim0 = Integer::parseInt(t.nextToken()); vector<Tag> value (dim0); if (dim0 == 0) return value; for (int i = 0; i < dim0; ++i) { value[i] = Tag::parseTag(t.nextToken()); } if (t.hasMoreTokens()) { throw ConversionException("Error: Field \"" + name + "\": Syntax error.", tableName); } return value; } catch (const NumberFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } catch (const OutOfBoundsException &e) { throw ConversionException("Error: Field \"" + name + "\": Unexpected end of string", tableName); } catch (const TagFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } } vector< vector<Tag> > Parser::get2DTag(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } StringTokenizer t(xmlField," "); try { int ndim = Integer::parseInt(t.nextToken()); if (ndim != 2) { throw ConversionException("Error: Field \"" + name + "\": Invalid array format", tableName); } int dim0 = Integer::parseInt(t.nextToken()); int dim1 = Integer::parseInt(t.nextToken()); vector< vector<Tag> > value; if (dim0 == 0 || dim1 == 0) return value; vector<Tag> v_aux; for (int i = 0; i < dim0; ++i) { v_aux.clear(); for (int j = 0; j < dim1; ++j) { v_aux.push_back(Tag::parseTag(t.nextToken())); } value.push_back(v_aux); } if (t.hasMoreTokens()) { throw ConversionException("Error: Field \"" + name + "\": Syntax error.", tableName); } return value; } catch (const NumberFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } catch (const OutOfBoundsException &e) { throw ConversionException("Error: Field \"" + name + "\": Unexpected end of string", tableName); } catch (const TagFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } } vector< vector< vector<Tag> > > Parser::get3DTag(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } StringTokenizer t(xmlField," "); try { int ndim = Integer::parseInt(t.nextToken()); if (ndim != 3) { throw ConversionException("Error: Field \"" + name + "\": Invalid array format", tableName); } int dim0 = Integer::parseInt(t.nextToken()); int dim1 = Integer::parseInt(t.nextToken()); int dim2 = Integer::parseInt(t.nextToken()); vector< vector< vector<Tag> > > value ; if (dim0 == 0 || dim1 == 0 || dim2 == 0) return value; vector<vector<Tag> > vv_aux; vector<Tag> v_aux; for (int i = 0; i < dim0; ++i) { vv_aux.clear(); for (int j = 0; j < dim1; ++j) { v_aux.clear(); for (int k = 0; k < dim2; ++k) { v_aux.push_back(Tag::parseTag(t.nextToken())); } vv_aux.push_back(v_aux); } value.push_back(vv_aux); } if (t.hasMoreTokens()) { throw ConversionException("Error: Field \"" + name + "\": Syntax error.", tableName); } return value; } catch (const NumberFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } catch (const OutOfBoundsException &e) { throw ConversionException("Error: Field \"" + name + "\": Unexpected end of string", tableName); } catch (const TagFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } } vector< vector< vector< vector<Tag> > > >Parser::get4DTag(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } StringTokenizer t(xmlField," "); try { int ndim = Integer::parseInt(t.nextToken()); if (ndim != 4) { throw ConversionException("Error: Field \"" + name + "\": Invalid array format", tableName); } int dim0 = Integer::parseInt(t.nextToken()); int dim1 = Integer::parseInt(t.nextToken()); int dim2 = Integer::parseInt(t.nextToken()); int dim3 = Integer::parseInt(t.nextToken()); vector<vector< vector< vector<Tag> > > >value; if (dim0 == 0 || dim1 == 0 || dim2 == 0 || dim3 == 0) return value; vector<vector<vector<Tag> > >vvv_aux; vector<vector< Tag> > vv_aux; vector<Tag> v_aux; for (int i = 0; i < dim0; ++i) { vvv_aux.clear(); for (int j = 0; j < dim1; ++j) { vv_aux.clear(); for (int k = 0; k < dim2; ++k) { v_aux.clear(); for (int l = 0; l < dim3; l++) { v_aux.push_back(Tag::parseTag(t.nextToken())); } vv_aux.push_back(v_aux); } vvv_aux.push_back(vv_aux); } value.push_back(vvv_aux); } if (t.hasMoreTokens()) { throw ConversionException("Error: Field \"" + name + "\": Syntax error.", tableName); } return value; } catch (const NumberFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } catch (const OutOfBoundsException &e) { throw ConversionException("Error: Field \"" + name + "\": Unexpected end of string", tableName); } catch (const TagFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } } // Field type: Temperature void Parser::toXML(Temperature data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append(data.toString()); buf.append(" </" + name + "> "); } void Parser::toXML(vector<Temperature> data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append("1 "); buf.append(Integer::toString(data.size())); buf.append(" "); for (unsigned int i = 0; i < data.size(); ++i) { buf.append(data[i].toString()); buf.append(" "); } buf.append(" </" + name + "> "); } void Parser::toXML(vector< vector<Temperature> > data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append("2 "); buf.append(Integer::toString(data.size())); buf.append(" "); buf.append(Integer::toString(data[0].size())); buf.append(" "); for (unsigned int i = 0; i < data.size(); ++i) { for (unsigned int j = 0; j < data[i].size(); ++j) { buf.append(data[i][j].toString()); buf.append(" "); } } buf.append(" </" + name + "> "); } void Parser::toXML(vector< vector< vector<Temperature> > > data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append("3 "); buf.append(Integer::toString(data.size())); buf.append(" "); buf.append(Integer::toString(data[0].size())); buf.append(" "); buf.append(Integer::toString(data[0][0].size())); buf.append(" "); for (unsigned int i = 0; i < data.size(); ++i) { for (unsigned int j = 0; j < data[i].size(); ++j) { for (unsigned int k = 0; k < data[i][j].size(); ++k) { buf.append(data[i][j][k].toString()); buf.append(" "); } } } buf.append(" </" + name + "> "); } void Parser::toXML(vector<vector< vector< vector<Temperature> > > >data, const string &name, string &buf) { buf.append("<" + name + "> "); buf.append("4 "); buf.append(Integer::toString(data.size())); buf.append(" "); buf.append(Integer::toString(data[0].size())); buf.append(" "); buf.append(Integer::toString(data[0][0].size())); buf.append(" "); buf.append(Integer::toString(data[0][0][0].size())); buf.append(" "); for (unsigned int i = 0; i < data.size(); ++i) { for (unsigned int j = 0; j < data[i].size(); ++j) { for (unsigned int k = 0; k < data[i][j].size(); ++k) { for (unsigned int l = 0; l < data[i][j][k].size(); l++) { buf.append(data[i][j][k][l].toString()); buf.append(" "); } } } } buf.append(" </" + name + "> "); } Temperature Parser::getTemperature(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) throw ConversionException("Error: Missing field \"" + name + "\" or invalid syntax",tableName); try { return Temperature (xmlField); } catch (const InvalidArgumentException &e) { throw ConversionException("Error: message was '"+ e.getMessage()+ "'", tableName); } } vector<Temperature> Parser::get1DTemperature(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } StringTokenizer t(xmlField," "); try { int ndim = Integer::parseInt(t.nextToken()); if (ndim != 1) { throw ConversionException("Error: Field \"" + name + "\": Invalid array format", tableName); } int dim0 = Integer::parseInt(t.nextToken()); vector<Temperature> value (dim0); if (dim0 == 0) return value; for (int i = 0; i < dim0; ++i) { value[i] = Temperature::getTemperature(t); } if (t.hasMoreTokens()) { throw ConversionException("Error: Field \"" + name + "\": Syntax error.", tableName); } return value; } catch (const NumberFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } catch (const OutOfBoundsException &e) { throw ConversionException("Error: Field \"" + name + "\": Unexpected end of string", tableName); } catch (const TagFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } } vector< vector<Temperature> > Parser::get2DTemperature(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } StringTokenizer t(xmlField," "); try { int ndim = Integer::parseInt(t.nextToken()); if (ndim != 2) { throw ConversionException("Error: Field \"" + name + "\": Invalid array format", tableName); } int dim0 = Integer::parseInt(t.nextToken()); int dim1 = Integer::parseInt(t.nextToken()); vector< vector<Temperature> > value; if (dim0 == 0 || dim1 == 0) return value; vector<Temperature> v_aux; for (int i = 0; i < dim0; ++i) { v_aux.clear(); for (int j = 0; j < dim1; ++j) { v_aux.push_back(Temperature::getTemperature(t)); } value.push_back(v_aux); } if (t.hasMoreTokens()) { throw ConversionException("Error: Field \"" + name + "\": Syntax error.", tableName); } return value; } catch (const NumberFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } catch (const OutOfBoundsException &e) { throw ConversionException("Error: Field \"" + name + "\": Unexpected end of string", tableName); } catch (const TagFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } } vector< vector< vector<Temperature> > > Parser::get3DTemperature(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } StringTokenizer t(xmlField," "); try { int ndim = Integer::parseInt(t.nextToken()); if (ndim != 3) { throw ConversionException("Error: Field \"" + name + "\": Invalid array format", tableName); } int dim0 = Integer::parseInt(t.nextToken()); int dim1 = Integer::parseInt(t.nextToken()); int dim2 = Integer::parseInt(t.nextToken()); vector< vector< vector<Temperature> > > value ; if (dim0 == 0 || dim1 == 0 || dim2 == 0) return value; vector<vector<Temperature> > vv_aux; vector<Temperature> v_aux; for (int i = 0; i < dim0; ++i) { vv_aux.clear(); for (int j = 0; j < dim1; ++j) { v_aux.clear(); for (int k = 0; k < dim2; ++k) { v_aux.push_back(Temperature::getTemperature(t)); } vv_aux.push_back(v_aux); } value.push_back(vv_aux); } if (t.hasMoreTokens()) { throw ConversionException("Error: Field \"" + name + "\": Syntax error.", tableName); } return value; } catch (const NumberFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } catch (const OutOfBoundsException &e) { throw ConversionException("Error: Field \"" + name + "\": Unexpected end of string", tableName); } catch (const TagFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } } vector< vector< vector< vector<Temperature> > > >Parser::get4DTemperature(const string &name, const string &tableName, const string &xmlDoc) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } StringTokenizer t(xmlField," "); try { int ndim = Integer::parseInt(t.nextToken()); if (ndim != 4) { throw ConversionException("Error: Field \"" + name + "\": Invalid array format", tableName); } int dim0 = Integer::parseInt(t.nextToken()); int dim1 = Integer::parseInt(t.nextToken()); int dim2 = Integer::parseInt(t.nextToken()); int dim3 = Integer::parseInt(t.nextToken()); vector<vector< vector< vector<Temperature> > > >value; if (dim0 == 0 || dim1 == 0 || dim2 == 0 || dim3 == 0) return value; vector<vector<vector<Temperature> > >vvv_aux; vector<vector< Temperature> > vv_aux; vector<Temperature> v_aux; for (int i = 0; i < dim0; ++i) { vvv_aux.clear(); for (int j = 0; j < dim1; ++j) { vv_aux.clear(); for (int k = 0; k < dim2; ++k) { v_aux.clear(); for (int l = 0; l < dim3; l++) { v_aux.push_back(Temperature::getTemperature(t)); } vv_aux.push_back(v_aux); } vvv_aux.push_back(vv_aux); } value.push_back(vvv_aux); } if (t.hasMoreTokens()) { throw ConversionException("Error: Field \"" + name + "\": Syntax error.", tableName); } return value; } catch (const NumberFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } catch (const OutOfBoundsException &e) { throw ConversionException("Error: Field \"" + name + "\": Unexpected end of string", tableName); } catch (const TagFormatException &e) { throw ConversionException("Error: Field \"" + name + "\": " + e.getMessage(), tableName); } } // Generated methods for conversion to and from XML // data representations with a Base64 encoded content. // The methods are generated only for 1, 2 and 3 dimensional arrays // of data whose BasicType have a non null BaseWrapperName. // In practice this represents data whose type is one of the basic numeric types // or is built upon a basic numeric type. void Parser::toXMLBase64(vector<int> data, const string &name, string &buf){ stringstream oss(stringstream::out | stringstream::binary); string encoded; buf.append("<" + name + "> "); int ndim = 1; int dim1 = data.size(); oss.write((char *)&ndim, sizeof(int)); oss.write((char *)&dim1, sizeof(dim1)); for (unsigned int i = 0; i < data.size(); i++) { int v = data.at(i); oss.write((char *) &v, sizeof(v)); } Base64 b64; b64.encode(oss.str(), encoded, false); buf.append(encoded); buf.append(" </" + name + "> "); } void Parser::toXMLBase64(vector< vector<int> > data, const string &name, string &buf){ stringstream oss(stringstream::out | stringstream::binary); string encoded; buf.append("<" + name + "> "); int ndim = 2; int dim1 = data.size(); int dim2 = data.at(0).size(); oss.write((char *)&ndim, sizeof(int)); oss.write((char *)&dim1, sizeof(dim1)); oss.write((char *)&dim2, sizeof(dim2)); for (unsigned int i = 0; i < data.size(); i++) for (unsigned int j = 0; j < data.at(0).size(); j++) { int v = data.at(i).at(j); oss.write((char *) &v, sizeof(v)); } Base64 b64; b64.encode(oss.str(), encoded, false); buf.append(encoded); buf.append(" </" + name + "> ") ; } void Parser::toXMLBase64(vector< vector< vector<int> > > data, const string &name, string &buf){ stringstream oss(stringstream::out | stringstream::binary); string encoded; buf.append("<" + name + "> "); int ndim = 3; int dim1 = data.size(); int dim2 = data.at(0).size(); int dim3 = data.at(0).at(0).size(); oss.write((char *)&ndim, sizeof(int)); oss.write((char *)&dim1, sizeof(dim1)); oss.write((char *)&dim2, sizeof(dim2)); oss.write((char *)&dim3, sizeof(dim3)); for (unsigned int i = 0; i < data.size(); i++) for (unsigned int j = 0; j < data.at(0).size(); j++) for (unsigned int k = 0; k < data.at(0).at(0).size(); k++){ int v = data.at(i).at(j).at(k); oss.write((char *) &v, sizeof(v)); } Base64 b64; b64.encode(oss.str(), encoded, false); buf.append(encoded); buf.append(" </" + name + "> ") ; } void Parser::toXMLBase64(vector<vector< vector< vector<int> > > >data, const string &name, string &buf){ stringstream oss(stringstream::out | stringstream::binary); string encoded; buf.append("<" + name + "> "); int ndim = 3; int dim1 = data.size(); int dim2 = data.at(0).size(); int dim3 = data.at(0).at(0).size(); int dim4 = data.at(0).at(0).at(0).size(); oss.write((char *)&ndim, sizeof(int)); oss.write((char *)&dim1, sizeof(dim1)); oss.write((char *)&dim2, sizeof(dim2)); oss.write((char *)&dim3, sizeof(dim3)); oss.write((char *)&dim4, sizeof(dim4)); for (unsigned int i = 0; i < data.size(); i++) for (unsigned int j = 0; j < data.at(0).size(); j++) for (unsigned int k = 0; k < data.at(0).at(0).size(); k++) for (unsigned int l = 0; l < data.at(0).at(0).at(0).size(); l++){ int v = data.at(i).at(j).at(k).at(l); oss.write((char *) &v, sizeof(v)); } Base64 b64; b64.encode(oss.str(), encoded, false); buf.append(encoded); buf.append(" </" + name + "> ") ; } #ifndef Int_CPP #define Int_CPP int #endif #define TRYREAD(_stream_, _value_) _stream_.read((char*) &(_value_), sizeof(_value_)); \ if (_stream_.bad()) throw ConversionException("I/O error during read of " + name, tableName); vector<int>& Parser::get1DIntegerFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector<int>& attribute) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } string decodedString; Base64 b64; b64.decode(xmlField, decodedString); stringstream iss(stringstream::in | stringstream::binary); iss.str(decodedString); attribute.clear(); unsigned int ndim = 0; //iss.read((char *)&ndim, sizeof(ndim)); TRYREAD(iss,ndim); unsigned int dim1 = 0; //iss.read((char *)&dim1, sizeof(dim1)); TRYREAD(iss,dim1); if (ndim != 1) { throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 1.", tableName); } attribute.reserve(dim1); Int_CPP v; for (unsigned int i = 0; i < dim1; i++) { //iss.read((char*) &v, sizeof(v)); TRYREAD(iss,v); attribute.push_back(v); } return attribute; } vector <vector<int> >& Parser::get2DIntegerFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector <vector<int> >& attribute) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } string decodedString; Base64 b64; b64.decode(xmlField, decodedString); stringstream iss(stringstream::in | stringstream::binary); iss.str(decodedString); attribute.clear(); unsigned int ndim = 0; //iss.read((char *)&ndim, sizeof(ndim)); TRYREAD(iss,ndim); if (ndim != 2) { throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 2.", tableName); } unsigned int dim1 = 0; //iss.read((char *)&dim1, sizeof(dim1)); TRYREAD(iss,dim1); unsigned int dim2 = 0; //iss.read((char *)&dim2, sizeof(dim2)); TRYREAD(iss,dim2); attribute.reserve(dim1); Int_CPP v; vector<int> aux2; aux2.reserve(dim2); for (unsigned int i = 0; i < dim1; i++) { aux2.clear(); for (unsigned int j = 0; j < dim2; j++) { //iss.read((char*) &v, sizeof(v)); TRYREAD(iss,v); aux2.push_back(v); } attribute.push_back(aux2); } return attribute; } vector <vector <vector<int> > >& Parser::get3DIntegerFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector <vector <vector<int> > >& attribute) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } string decodedString; Base64 b64; b64.decode(xmlField, decodedString); stringstream iss(stringstream::in | stringstream::binary); iss.str(decodedString); attribute.clear(); unsigned int ndim = 0; //iss.read((char *)&ndim, sizeof(ndim)); TRYREAD(iss, ndim); if (ndim != 3) { throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 3.", tableName); } unsigned int dim1 = 0; //iss.read((char *)&dim1, sizeof(dim1)); TRYREAD(iss,dim1); unsigned int dim2 = 0; //iss.read((char *)&dim2, sizeof(dim2)); TRYREAD(iss,dim2); unsigned int dim3 = 0; //iss.read((char *)&dim2, sizeof(dim3)); TRYREAD(iss,dim3); attribute.reserve(dim1); Int_CPP v; vector <vector<int> > aux2; vector<int> aux3; aux2.reserve(dim2); aux3.reserve(dim3); for (unsigned int i = 0; i < dim1; i++) { aux2.clear(); for (unsigned int j = 0; j < dim2; j++) { aux3.clear(); for (unsigned int k = 0; k < dim3; k++) { //iss.read((char*) &v, sizeof(v)); TRYREAD(iss,v); aux3.push_back(v); } aux2.push_back(aux3); } attribute.push_back(aux2); } return attribute; ; } vector <vector <vector <vector<int> > > >& Parser::get4DIntegerFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector< vector <vector <vector<int> > > >& attribute) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } string decodedString; Base64 b64; b64.decode(xmlField, decodedString); stringstream iss(stringstream::in | stringstream::binary); iss.str(decodedString); attribute.clear(); unsigned int ndim = 0; //iss.read((char *)&ndim, sizeof(ndim)); TRYREAD(iss, ndim); if (ndim != 4) { throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 4.", tableName); } unsigned int dim1 = 0; //iss.read((char *)&dim1, sizeof(dim1)); TRYREAD(iss,dim1); unsigned int dim2 = 0; //iss.read((char *)&dim2, sizeof(dim2)); TRYREAD(iss,dim2); unsigned int dim3 = 0; //iss.read((char *)&dim2, sizeof(dim3)); TRYREAD(iss,dim3); unsigned int dim4 = 0; //iss.read((char *)&dim2, sizeof(dim3)); TRYREAD(iss,dim3); attribute.reserve(dim1); Int_CPP v; vector <vector <vector<int> > > aux2; vector <vector<int> > aux3; vector<int> aux4; aux2.reserve(dim2); aux3.reserve(dim3); aux4.reserve(dim4); for (unsigned int i = 0; i < dim1; i++) { aux2.clear(); for (unsigned int j = 0; j < dim2; j++) { aux3.clear(); for (unsigned int k = 0; k < dim3; k++) { aux4.clear(); for (unsigned int l = 0; l < dim4; l++) { //iss.read((char*) &v, sizeof(v)); TRYREAD(iss,v); aux4.push_back(v); } aux3.push_back(aux4); } aux2.push_back(aux3); } attribute.push_back(aux2); } return attribute; ; } void Parser::toXMLBase64(vector<short> data, const string &name, string &buf){ stringstream oss(stringstream::out | stringstream::binary); string encoded; buf.append("<" + name + "> "); int ndim = 1; int dim1 = data.size(); oss.write((char *)&ndim, sizeof(int)); oss.write((char *)&dim1, sizeof(dim1)); for (unsigned int i = 0; i < data.size(); i++) { short v = data.at(i); oss.write((char *) &v, sizeof(v)); } Base64 b64; b64.encode(oss.str(), encoded, false); buf.append(encoded); buf.append(" </" + name + "> "); } void Parser::toXMLBase64(vector< vector<short> > data, const string &name, string &buf){ stringstream oss(stringstream::out | stringstream::binary); string encoded; buf.append("<" + name + "> "); int ndim = 2; int dim1 = data.size(); int dim2 = data.at(0).size(); oss.write((char *)&ndim, sizeof(int)); oss.write((char *)&dim1, sizeof(dim1)); oss.write((char *)&dim2, sizeof(dim2)); for (unsigned int i = 0; i < data.size(); i++) for (unsigned int j = 0; j < data.at(0).size(); j++) { short v = data.at(i).at(j); oss.write((char *) &v, sizeof(v)); } Base64 b64; b64.encode(oss.str(), encoded, false); buf.append(encoded); buf.append(" </" + name + "> ") ; } void Parser::toXMLBase64(vector< vector< vector<short> > > data, const string &name, string &buf){ stringstream oss(stringstream::out | stringstream::binary); string encoded; buf.append("<" + name + "> "); int ndim = 3; int dim1 = data.size(); int dim2 = data.at(0).size(); int dim3 = data.at(0).at(0).size(); oss.write((char *)&ndim, sizeof(int)); oss.write((char *)&dim1, sizeof(dim1)); oss.write((char *)&dim2, sizeof(dim2)); oss.write((char *)&dim3, sizeof(dim3)); for (unsigned int i = 0; i < data.size(); i++) for (unsigned int j = 0; j < data.at(0).size(); j++) for (unsigned int k = 0; k < data.at(0).at(0).size(); k++){ short v = data.at(i).at(j).at(k); oss.write((char *) &v, sizeof(v)); } Base64 b64; b64.encode(oss.str(), encoded, false); buf.append(encoded); buf.append(" </" + name + "> ") ; } void Parser::toXMLBase64(vector<vector< vector< vector<short> > > >data, const string &name, string &buf){ stringstream oss(stringstream::out | stringstream::binary); string encoded; buf.append("<" + name + "> "); int ndim = 3; int dim1 = data.size(); int dim2 = data.at(0).size(); int dim3 = data.at(0).at(0).size(); int dim4 = data.at(0).at(0).at(0).size(); oss.write((char *)&ndim, sizeof(int)); oss.write((char *)&dim1, sizeof(dim1)); oss.write((char *)&dim2, sizeof(dim2)); oss.write((char *)&dim3, sizeof(dim3)); oss.write((char *)&dim4, sizeof(dim4)); for (unsigned int i = 0; i < data.size(); i++) for (unsigned int j = 0; j < data.at(0).size(); j++) for (unsigned int k = 0; k < data.at(0).at(0).size(); k++) for (unsigned int l = 0; l < data.at(0).at(0).at(0).size(); l++){ short v = data.at(i).at(j).at(k).at(l); oss.write((char *) &v, sizeof(v)); } Base64 b64; b64.encode(oss.str(), encoded, false); buf.append(encoded); buf.append(" </" + name + "> ") ; } #ifndef Short_CPP #define Short_CPP short #endif #define TRYREAD(_stream_, _value_) _stream_.read((char*) &(_value_), sizeof(_value_)); \ if (_stream_.bad()) throw ConversionException("I/O error during read of " + name, tableName); vector<short>& Parser::get1DShortFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector<short>& attribute) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } string decodedString; Base64 b64; b64.decode(xmlField, decodedString); stringstream iss(stringstream::in | stringstream::binary); iss.str(decodedString); attribute.clear(); unsigned int ndim = 0; //iss.read((char *)&ndim, sizeof(ndim)); TRYREAD(iss,ndim); unsigned int dim1 = 0; //iss.read((char *)&dim1, sizeof(dim1)); TRYREAD(iss,dim1); if (ndim != 1) { throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 1.", tableName); } attribute.reserve(dim1); Short_CPP v; for (unsigned int i = 0; i < dim1; i++) { //iss.read((char*) &v, sizeof(v)); TRYREAD(iss,v); attribute.push_back(v); } return attribute; } vector <vector<short> >& Parser::get2DShortFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector <vector<short> >& attribute) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } string decodedString; Base64 b64; b64.decode(xmlField, decodedString); stringstream iss(stringstream::in | stringstream::binary); iss.str(decodedString); attribute.clear(); unsigned int ndim = 0; //iss.read((char *)&ndim, sizeof(ndim)); TRYREAD(iss,ndim); if (ndim != 2) { throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 2.", tableName); } unsigned int dim1 = 0; //iss.read((char *)&dim1, sizeof(dim1)); TRYREAD(iss,dim1); unsigned int dim2 = 0; //iss.read((char *)&dim2, sizeof(dim2)); TRYREAD(iss,dim2); attribute.reserve(dim1); Short_CPP v; vector<short> aux2; aux2.reserve(dim2); for (unsigned int i = 0; i < dim1; i++) { aux2.clear(); for (unsigned int j = 0; j < dim2; j++) { //iss.read((char*) &v, sizeof(v)); TRYREAD(iss,v); aux2.push_back(v); } attribute.push_back(aux2); } return attribute; } vector <vector <vector<short> > >& Parser::get3DShortFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector <vector <vector<short> > >& attribute) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } string decodedString; Base64 b64; b64.decode(xmlField, decodedString); stringstream iss(stringstream::in | stringstream::binary); iss.str(decodedString); attribute.clear(); unsigned int ndim = 0; //iss.read((char *)&ndim, sizeof(ndim)); TRYREAD(iss, ndim); if (ndim != 3) { throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 3.", tableName); } unsigned int dim1 = 0; //iss.read((char *)&dim1, sizeof(dim1)); TRYREAD(iss,dim1); unsigned int dim2 = 0; //iss.read((char *)&dim2, sizeof(dim2)); TRYREAD(iss,dim2); unsigned int dim3 = 0; //iss.read((char *)&dim2, sizeof(dim3)); TRYREAD(iss,dim3); attribute.reserve(dim1); Short_CPP v; vector <vector<short> > aux2; vector<short> aux3; aux2.reserve(dim2); aux3.reserve(dim3); for (unsigned int i = 0; i < dim1; i++) { aux2.clear(); for (unsigned int j = 0; j < dim2; j++) { aux3.clear(); for (unsigned int k = 0; k < dim3; k++) { //iss.read((char*) &v, sizeof(v)); TRYREAD(iss,v); aux3.push_back(v); } aux2.push_back(aux3); } attribute.push_back(aux2); } return attribute; ; } vector <vector <vector <vector<short> > > >& Parser::get4DShortFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector< vector <vector <vector<short> > > >& attribute) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } string decodedString; Base64 b64; b64.decode(xmlField, decodedString); stringstream iss(stringstream::in | stringstream::binary); iss.str(decodedString); attribute.clear(); unsigned int ndim = 0; //iss.read((char *)&ndim, sizeof(ndim)); TRYREAD(iss, ndim); if (ndim != 4) { throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 4.", tableName); } unsigned int dim1 = 0; //iss.read((char *)&dim1, sizeof(dim1)); TRYREAD(iss,dim1); unsigned int dim2 = 0; //iss.read((char *)&dim2, sizeof(dim2)); TRYREAD(iss,dim2); unsigned int dim3 = 0; //iss.read((char *)&dim2, sizeof(dim3)); TRYREAD(iss,dim3); unsigned int dim4 = 0; //iss.read((char *)&dim2, sizeof(dim3)); TRYREAD(iss,dim3); attribute.reserve(dim1); Short_CPP v; vector <vector <vector<short> > > aux2; vector <vector<short> > aux3; vector<short> aux4; aux2.reserve(dim2); aux3.reserve(dim3); aux4.reserve(dim4); for (unsigned int i = 0; i < dim1; i++) { aux2.clear(); for (unsigned int j = 0; j < dim2; j++) { aux3.clear(); for (unsigned int k = 0; k < dim3; k++) { aux4.clear(); for (unsigned int l = 0; l < dim4; l++) { //iss.read((char*) &v, sizeof(v)); TRYREAD(iss,v); aux4.push_back(v); } aux3.push_back(aux4); } aux2.push_back(aux3); } attribute.push_back(aux2); } return attribute; ; } void Parser::toXMLBase64(vector<int64_t> data, const string &name, string &buf){ stringstream oss(stringstream::out | stringstream::binary); string encoded; buf.append("<" + name + "> "); int ndim = 1; int dim1 = data.size(); oss.write((char *)&ndim, sizeof(int)); oss.write((char *)&dim1, sizeof(dim1)); for (unsigned int i = 0; i < data.size(); i++) { int64_t v = data.at(i); oss.write((char *) &v, sizeof(v)); } Base64 b64; b64.encode(oss.str(), encoded, false); buf.append(encoded); buf.append(" </" + name + "> "); } void Parser::toXMLBase64(vector< vector<int64_t> > data, const string &name, string &buf){ stringstream oss(stringstream::out | stringstream::binary); string encoded; buf.append("<" + name + "> "); int ndim = 2; int dim1 = data.size(); int dim2 = data.at(0).size(); oss.write((char *)&ndim, sizeof(int)); oss.write((char *)&dim1, sizeof(dim1)); oss.write((char *)&dim2, sizeof(dim2)); for (unsigned int i = 0; i < data.size(); i++) for (unsigned int j = 0; j < data.at(0).size(); j++) { int64_t v = data.at(i).at(j); oss.write((char *) &v, sizeof(v)); } Base64 b64; b64.encode(oss.str(), encoded, false); buf.append(encoded); buf.append(" </" + name + "> ") ; } void Parser::toXMLBase64(vector< vector< vector<int64_t> > > data, const string &name, string &buf){ stringstream oss(stringstream::out | stringstream::binary); string encoded; buf.append("<" + name + "> "); int ndim = 3; int dim1 = data.size(); int dim2 = data.at(0).size(); int dim3 = data.at(0).at(0).size(); oss.write((char *)&ndim, sizeof(int)); oss.write((char *)&dim1, sizeof(dim1)); oss.write((char *)&dim2, sizeof(dim2)); oss.write((char *)&dim3, sizeof(dim3)); for (unsigned int i = 0; i < data.size(); i++) for (unsigned int j = 0; j < data.at(0).size(); j++) for (unsigned int k = 0; k < data.at(0).at(0).size(); k++){ int64_t v = data.at(i).at(j).at(k); oss.write((char *) &v, sizeof(v)); } Base64 b64; b64.encode(oss.str(), encoded, false); buf.append(encoded); buf.append(" </" + name + "> ") ; } void Parser::toXMLBase64(vector<vector< vector< vector<int64_t> > > >data, const string &name, string &buf){ stringstream oss(stringstream::out | stringstream::binary); string encoded; buf.append("<" + name + "> "); int ndim = 3; int dim1 = data.size(); int dim2 = data.at(0).size(); int dim3 = data.at(0).at(0).size(); int dim4 = data.at(0).at(0).at(0).size(); oss.write((char *)&ndim, sizeof(int)); oss.write((char *)&dim1, sizeof(dim1)); oss.write((char *)&dim2, sizeof(dim2)); oss.write((char *)&dim3, sizeof(dim3)); oss.write((char *)&dim4, sizeof(dim4)); for (unsigned int i = 0; i < data.size(); i++) for (unsigned int j = 0; j < data.at(0).size(); j++) for (unsigned int k = 0; k < data.at(0).at(0).size(); k++) for (unsigned int l = 0; l < data.at(0).at(0).at(0).size(); l++){ int64_t v = data.at(i).at(j).at(k).at(l); oss.write((char *) &v, sizeof(v)); } Base64 b64; b64.encode(oss.str(), encoded, false); buf.append(encoded); buf.append(" </" + name + "> ") ; } #ifndef Long_CPP #define Long_CPP int64_t #endif #define TRYREAD(_stream_, _value_) _stream_.read((char*) &(_value_), sizeof(_value_)); \ if (_stream_.bad()) throw ConversionException("I/O error during read of " + name, tableName); vector<int64_t>& Parser::get1DLongFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector<int64_t>& attribute) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } string decodedString; Base64 b64; b64.decode(xmlField, decodedString); stringstream iss(stringstream::in | stringstream::binary); iss.str(decodedString); attribute.clear(); unsigned int ndim = 0; //iss.read((char *)&ndim, sizeof(ndim)); TRYREAD(iss,ndim); unsigned int dim1 = 0; //iss.read((char *)&dim1, sizeof(dim1)); TRYREAD(iss,dim1); if (ndim != 1) { throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 1.", tableName); } attribute.reserve(dim1); Long_CPP v; for (unsigned int i = 0; i < dim1; i++) { //iss.read((char*) &v, sizeof(v)); TRYREAD(iss,v); attribute.push_back(v); } return attribute; } vector <vector<int64_t> >& Parser::get2DLongFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector <vector<int64_t> >& attribute) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } string decodedString; Base64 b64; b64.decode(xmlField, decodedString); stringstream iss(stringstream::in | stringstream::binary); iss.str(decodedString); attribute.clear(); unsigned int ndim = 0; //iss.read((char *)&ndim, sizeof(ndim)); TRYREAD(iss,ndim); if (ndim != 2) { throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 2.", tableName); } unsigned int dim1 = 0; //iss.read((char *)&dim1, sizeof(dim1)); TRYREAD(iss,dim1); unsigned int dim2 = 0; //iss.read((char *)&dim2, sizeof(dim2)); TRYREAD(iss,dim2); attribute.reserve(dim1); Long_CPP v; vector<int64_t> aux2; aux2.reserve(dim2); for (unsigned int i = 0; i < dim1; i++) { aux2.clear(); for (unsigned int j = 0; j < dim2; j++) { //iss.read((char*) &v, sizeof(v)); TRYREAD(iss,v); aux2.push_back(v); } attribute.push_back(aux2); } return attribute; } vector <vector <vector<int64_t> > >& Parser::get3DLongFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector <vector <vector<int64_t> > >& attribute) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } string decodedString; Base64 b64; b64.decode(xmlField, decodedString); stringstream iss(stringstream::in | stringstream::binary); iss.str(decodedString); attribute.clear(); unsigned int ndim = 0; //iss.read((char *)&ndim, sizeof(ndim)); TRYREAD(iss, ndim); if (ndim != 3) { throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 3.", tableName); } unsigned int dim1 = 0; //iss.read((char *)&dim1, sizeof(dim1)); TRYREAD(iss,dim1); unsigned int dim2 = 0; //iss.read((char *)&dim2, sizeof(dim2)); TRYREAD(iss,dim2); unsigned int dim3 = 0; //iss.read((char *)&dim2, sizeof(dim3)); TRYREAD(iss,dim3); attribute.reserve(dim1); Long_CPP v; vector <vector<int64_t> > aux2; vector<int64_t> aux3; aux2.reserve(dim2); aux3.reserve(dim3); for (unsigned int i = 0; i < dim1; i++) { aux2.clear(); for (unsigned int j = 0; j < dim2; j++) { aux3.clear(); for (unsigned int k = 0; k < dim3; k++) { //iss.read((char*) &v, sizeof(v)); TRYREAD(iss,v); aux3.push_back(v); } aux2.push_back(aux3); } attribute.push_back(aux2); } return attribute; ; } vector <vector <vector <vector<int64_t> > > >& Parser::get4DLongFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector< vector <vector <vector<int64_t> > > >& attribute) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } string decodedString; Base64 b64; b64.decode(xmlField, decodedString); stringstream iss(stringstream::in | stringstream::binary); iss.str(decodedString); attribute.clear(); unsigned int ndim = 0; //iss.read((char *)&ndim, sizeof(ndim)); TRYREAD(iss, ndim); if (ndim != 4) { throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 4.", tableName); } unsigned int dim1 = 0; //iss.read((char *)&dim1, sizeof(dim1)); TRYREAD(iss,dim1); unsigned int dim2 = 0; //iss.read((char *)&dim2, sizeof(dim2)); TRYREAD(iss,dim2); unsigned int dim3 = 0; //iss.read((char *)&dim2, sizeof(dim3)); TRYREAD(iss,dim3); unsigned int dim4 = 0; //iss.read((char *)&dim2, sizeof(dim3)); TRYREAD(iss,dim3); attribute.reserve(dim1); Long_CPP v; vector <vector <vector<int64_t> > > aux2; vector <vector<int64_t> > aux3; vector<int64_t> aux4; aux2.reserve(dim2); aux3.reserve(dim3); aux4.reserve(dim4); for (unsigned int i = 0; i < dim1; i++) { aux2.clear(); for (unsigned int j = 0; j < dim2; j++) { aux3.clear(); for (unsigned int k = 0; k < dim3; k++) { aux4.clear(); for (unsigned int l = 0; l < dim4; l++) { //iss.read((char*) &v, sizeof(v)); TRYREAD(iss,v); aux4.push_back(v); } aux3.push_back(aux4); } aux2.push_back(aux3); } attribute.push_back(aux2); } return attribute; ; } void Parser::toXMLBase64(vector<char> data, const string &name, string &buf){ stringstream oss(stringstream::out | stringstream::binary); string encoded; buf.append("<" + name + "> "); int ndim = 1; int dim1 = data.size(); oss.write((char *)&ndim, sizeof(int)); oss.write((char *)&dim1, sizeof(dim1)); for (unsigned int i = 0; i < data.size(); i++) { char v = data.at(i); oss.write((char *) &v, sizeof(v)); } Base64 b64; b64.encode(oss.str(), encoded, false); buf.append(encoded); buf.append(" </" + name + "> "); } void Parser::toXMLBase64(vector< vector<char> > data, const string &name, string &buf){ stringstream oss(stringstream::out | stringstream::binary); string encoded; buf.append("<" + name + "> "); int ndim = 2; int dim1 = data.size(); int dim2 = data.at(0).size(); oss.write((char *)&ndim, sizeof(int)); oss.write((char *)&dim1, sizeof(dim1)); oss.write((char *)&dim2, sizeof(dim2)); for (unsigned int i = 0; i < data.size(); i++) for (unsigned int j = 0; j < data.at(0).size(); j++) { char v = data.at(i).at(j); oss.write((char *) &v, sizeof(v)); } Base64 b64; b64.encode(oss.str(), encoded, false); buf.append(encoded); buf.append(" </" + name + "> ") ; } void Parser::toXMLBase64(vector< vector< vector<char> > > data, const string &name, string &buf){ stringstream oss(stringstream::out | stringstream::binary); string encoded; buf.append("<" + name + "> "); int ndim = 3; int dim1 = data.size(); int dim2 = data.at(0).size(); int dim3 = data.at(0).at(0).size(); oss.write((char *)&ndim, sizeof(int)); oss.write((char *)&dim1, sizeof(dim1)); oss.write((char *)&dim2, sizeof(dim2)); oss.write((char *)&dim3, sizeof(dim3)); for (unsigned int i = 0; i < data.size(); i++) for (unsigned int j = 0; j < data.at(0).size(); j++) for (unsigned int k = 0; k < data.at(0).at(0).size(); k++){ char v = data.at(i).at(j).at(k); oss.write((char *) &v, sizeof(v)); } Base64 b64; b64.encode(oss.str(), encoded, false); buf.append(encoded); buf.append(" </" + name + "> ") ; } void Parser::toXMLBase64(vector<vector< vector< vector<char> > > >data, const string &name, string &buf){ stringstream oss(stringstream::out | stringstream::binary); string encoded; buf.append("<" + name + "> "); int ndim = 3; int dim1 = data.size(); int dim2 = data.at(0).size(); int dim3 = data.at(0).at(0).size(); int dim4 = data.at(0).at(0).at(0).size(); oss.write((char *)&ndim, sizeof(int)); oss.write((char *)&dim1, sizeof(dim1)); oss.write((char *)&dim2, sizeof(dim2)); oss.write((char *)&dim3, sizeof(dim3)); oss.write((char *)&dim4, sizeof(dim4)); for (unsigned int i = 0; i < data.size(); i++) for (unsigned int j = 0; j < data.at(0).size(); j++) for (unsigned int k = 0; k < data.at(0).at(0).size(); k++) for (unsigned int l = 0; l < data.at(0).at(0).at(0).size(); l++){ char v = data.at(i).at(j).at(k).at(l); oss.write((char *) &v, sizeof(v)); } Base64 b64; b64.encode(oss.str(), encoded, false); buf.append(encoded); buf.append(" </" + name + "> ") ; } #ifndef Byte_CPP #define Byte_CPP char #endif #define TRYREAD(_stream_, _value_) _stream_.read((char*) &(_value_), sizeof(_value_)); \ if (_stream_.bad()) throw ConversionException("I/O error during read of " + name, tableName); vector<char>& Parser::get1DByteFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector<char>& attribute) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } string decodedString; Base64 b64; b64.decode(xmlField, decodedString); stringstream iss(stringstream::in | stringstream::binary); iss.str(decodedString); attribute.clear(); unsigned int ndim = 0; //iss.read((char *)&ndim, sizeof(ndim)); TRYREAD(iss,ndim); unsigned int dim1 = 0; //iss.read((char *)&dim1, sizeof(dim1)); TRYREAD(iss,dim1); if (ndim != 1) { throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 1.", tableName); } attribute.reserve(dim1); Byte_CPP v; for (unsigned int i = 0; i < dim1; i++) { //iss.read((char*) &v, sizeof(v)); TRYREAD(iss,v); attribute.push_back(v); } return attribute; } vector <vector<char> >& Parser::get2DByteFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector <vector<char> >& attribute) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } string decodedString; Base64 b64; b64.decode(xmlField, decodedString); stringstream iss(stringstream::in | stringstream::binary); iss.str(decodedString); attribute.clear(); unsigned int ndim = 0; //iss.read((char *)&ndim, sizeof(ndim)); TRYREAD(iss,ndim); if (ndim != 2) { throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 2.", tableName); } unsigned int dim1 = 0; //iss.read((char *)&dim1, sizeof(dim1)); TRYREAD(iss,dim1); unsigned int dim2 = 0; //iss.read((char *)&dim2, sizeof(dim2)); TRYREAD(iss,dim2); attribute.reserve(dim1); Byte_CPP v; vector<char> aux2; aux2.reserve(dim2); for (unsigned int i = 0; i < dim1; i++) { aux2.clear(); for (unsigned int j = 0; j < dim2; j++) { //iss.read((char*) &v, sizeof(v)); TRYREAD(iss,v); aux2.push_back(v); } attribute.push_back(aux2); } return attribute; } vector <vector <vector<char> > >& Parser::get3DByteFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector <vector <vector<char> > >& attribute) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } string decodedString; Base64 b64; b64.decode(xmlField, decodedString); stringstream iss(stringstream::in | stringstream::binary); iss.str(decodedString); attribute.clear(); unsigned int ndim = 0; //iss.read((char *)&ndim, sizeof(ndim)); TRYREAD(iss, ndim); if (ndim != 3) { throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 3.", tableName); } unsigned int dim1 = 0; //iss.read((char *)&dim1, sizeof(dim1)); TRYREAD(iss,dim1); unsigned int dim2 = 0; //iss.read((char *)&dim2, sizeof(dim2)); TRYREAD(iss,dim2); unsigned int dim3 = 0; //iss.read((char *)&dim2, sizeof(dim3)); TRYREAD(iss,dim3); attribute.reserve(dim1); Byte_CPP v; vector <vector<char> > aux2; vector<char> aux3; aux2.reserve(dim2); aux3.reserve(dim3); for (unsigned int i = 0; i < dim1; i++) { aux2.clear(); for (unsigned int j = 0; j < dim2; j++) { aux3.clear(); for (unsigned int k = 0; k < dim3; k++) { //iss.read((char*) &v, sizeof(v)); TRYREAD(iss,v); aux3.push_back(v); } aux2.push_back(aux3); } attribute.push_back(aux2); } return attribute; ; } vector <vector <vector <vector<char> > > >& Parser::get4DByteFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector< vector <vector <vector<char> > > >& attribute) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } string decodedString; Base64 b64; b64.decode(xmlField, decodedString); stringstream iss(stringstream::in | stringstream::binary); iss.str(decodedString); attribute.clear(); unsigned int ndim = 0; //iss.read((char *)&ndim, sizeof(ndim)); TRYREAD(iss, ndim); if (ndim != 4) { throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 4.", tableName); } unsigned int dim1 = 0; //iss.read((char *)&dim1, sizeof(dim1)); TRYREAD(iss,dim1); unsigned int dim2 = 0; //iss.read((char *)&dim2, sizeof(dim2)); TRYREAD(iss,dim2); unsigned int dim3 = 0; //iss.read((char *)&dim2, sizeof(dim3)); TRYREAD(iss,dim3); unsigned int dim4 = 0; //iss.read((char *)&dim2, sizeof(dim3)); TRYREAD(iss,dim3); attribute.reserve(dim1); Byte_CPP v; vector <vector <vector<char> > > aux2; vector <vector<char> > aux3; vector<char> aux4; aux2.reserve(dim2); aux3.reserve(dim3); aux4.reserve(dim4); for (unsigned int i = 0; i < dim1; i++) { aux2.clear(); for (unsigned int j = 0; j < dim2; j++) { aux3.clear(); for (unsigned int k = 0; k < dim3; k++) { aux4.clear(); for (unsigned int l = 0; l < dim4; l++) { //iss.read((char*) &v, sizeof(v)); TRYREAD(iss,v); aux4.push_back(v); } aux3.push_back(aux4); } aux2.push_back(aux3); } attribute.push_back(aux2); } return attribute; ; } void Parser::toXMLBase64(vector<float> data, const string &name, string &buf){ stringstream oss(stringstream::out | stringstream::binary); string encoded; buf.append("<" + name + "> "); int ndim = 1; int dim1 = data.size(); oss.write((char *)&ndim, sizeof(int)); oss.write((char *)&dim1, sizeof(dim1)); for (unsigned int i = 0; i < data.size(); i++) { float v = data.at(i); oss.write((char *) &v, sizeof(v)); } Base64 b64; b64.encode(oss.str(), encoded, false); buf.append(encoded); buf.append(" </" + name + "> "); } void Parser::toXMLBase64(vector< vector<float> > data, const string &name, string &buf){ stringstream oss(stringstream::out | stringstream::binary); string encoded; buf.append("<" + name + "> "); int ndim = 2; int dim1 = data.size(); int dim2 = data.at(0).size(); oss.write((char *)&ndim, sizeof(int)); oss.write((char *)&dim1, sizeof(dim1)); oss.write((char *)&dim2, sizeof(dim2)); for (unsigned int i = 0; i < data.size(); i++) for (unsigned int j = 0; j < data.at(0).size(); j++) { float v = data.at(i).at(j); oss.write((char *) &v, sizeof(v)); } Base64 b64; b64.encode(oss.str(), encoded, false); buf.append(encoded); buf.append(" </" + name + "> ") ; } void Parser::toXMLBase64(vector< vector< vector<float> > > data, const string &name, string &buf){ stringstream oss(stringstream::out | stringstream::binary); string encoded; buf.append("<" + name + "> "); int ndim = 3; int dim1 = data.size(); int dim2 = data.at(0).size(); int dim3 = data.at(0).at(0).size(); oss.write((char *)&ndim, sizeof(int)); oss.write((char *)&dim1, sizeof(dim1)); oss.write((char *)&dim2, sizeof(dim2)); oss.write((char *)&dim3, sizeof(dim3)); for (unsigned int i = 0; i < data.size(); i++) for (unsigned int j = 0; j < data.at(0).size(); j++) for (unsigned int k = 0; k < data.at(0).at(0).size(); k++){ float v = data.at(i).at(j).at(k); oss.write((char *) &v, sizeof(v)); } Base64 b64; b64.encode(oss.str(), encoded, false); buf.append(encoded); buf.append(" </" + name + "> ") ; } void Parser::toXMLBase64(vector<vector< vector< vector<float> > > >data, const string &name, string &buf){ stringstream oss(stringstream::out | stringstream::binary); string encoded; buf.append("<" + name + "> "); int ndim = 3; int dim1 = data.size(); int dim2 = data.at(0).size(); int dim3 = data.at(0).at(0).size(); int dim4 = data.at(0).at(0).at(0).size(); oss.write((char *)&ndim, sizeof(int)); oss.write((char *)&dim1, sizeof(dim1)); oss.write((char *)&dim2, sizeof(dim2)); oss.write((char *)&dim3, sizeof(dim3)); oss.write((char *)&dim4, sizeof(dim4)); for (unsigned int i = 0; i < data.size(); i++) for (unsigned int j = 0; j < data.at(0).size(); j++) for (unsigned int k = 0; k < data.at(0).at(0).size(); k++) for (unsigned int l = 0; l < data.at(0).at(0).at(0).size(); l++){ float v = data.at(i).at(j).at(k).at(l); oss.write((char *) &v, sizeof(v)); } Base64 b64; b64.encode(oss.str(), encoded, false); buf.append(encoded); buf.append(" </" + name + "> ") ; } #ifndef Float_CPP #define Float_CPP float #endif #define TRYREAD(_stream_, _value_) _stream_.read((char*) &(_value_), sizeof(_value_)); \ if (_stream_.bad()) throw ConversionException("I/O error during read of " + name, tableName); vector<float>& Parser::get1DFloatFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector<float>& attribute) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } string decodedString; Base64 b64; b64.decode(xmlField, decodedString); stringstream iss(stringstream::in | stringstream::binary); iss.str(decodedString); attribute.clear(); unsigned int ndim = 0; //iss.read((char *)&ndim, sizeof(ndim)); TRYREAD(iss,ndim); unsigned int dim1 = 0; //iss.read((char *)&dim1, sizeof(dim1)); TRYREAD(iss,dim1); if (ndim != 1) { throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 1.", tableName); } attribute.reserve(dim1); Float_CPP v; for (unsigned int i = 0; i < dim1; i++) { //iss.read((char*) &v, sizeof(v)); TRYREAD(iss,v); attribute.push_back(v); } return attribute; } vector <vector<float> >& Parser::get2DFloatFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector <vector<float> >& attribute) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } string decodedString; Base64 b64; b64.decode(xmlField, decodedString); stringstream iss(stringstream::in | stringstream::binary); iss.str(decodedString); attribute.clear(); unsigned int ndim = 0; //iss.read((char *)&ndim, sizeof(ndim)); TRYREAD(iss,ndim); if (ndim != 2) { throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 2.", tableName); } unsigned int dim1 = 0; //iss.read((char *)&dim1, sizeof(dim1)); TRYREAD(iss,dim1); unsigned int dim2 = 0; //iss.read((char *)&dim2, sizeof(dim2)); TRYREAD(iss,dim2); attribute.reserve(dim1); Float_CPP v; vector<float> aux2; aux2.reserve(dim2); for (unsigned int i = 0; i < dim1; i++) { aux2.clear(); for (unsigned int j = 0; j < dim2; j++) { //iss.read((char*) &v, sizeof(v)); TRYREAD(iss,v); aux2.push_back(v); } attribute.push_back(aux2); } return attribute; } vector <vector <vector<float> > >& Parser::get3DFloatFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector <vector <vector<float> > >& attribute) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } string decodedString; Base64 b64; b64.decode(xmlField, decodedString); stringstream iss(stringstream::in | stringstream::binary); iss.str(decodedString); attribute.clear(); unsigned int ndim = 0; //iss.read((char *)&ndim, sizeof(ndim)); TRYREAD(iss, ndim); if (ndim != 3) { throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 3.", tableName); } unsigned int dim1 = 0; //iss.read((char *)&dim1, sizeof(dim1)); TRYREAD(iss,dim1); unsigned int dim2 = 0; //iss.read((char *)&dim2, sizeof(dim2)); TRYREAD(iss,dim2); unsigned int dim3 = 0; //iss.read((char *)&dim2, sizeof(dim3)); TRYREAD(iss,dim3); attribute.reserve(dim1); Float_CPP v; vector <vector<float> > aux2; vector<float> aux3; aux2.reserve(dim2); aux3.reserve(dim3); for (unsigned int i = 0; i < dim1; i++) { aux2.clear(); for (unsigned int j = 0; j < dim2; j++) { aux3.clear(); for (unsigned int k = 0; k < dim3; k++) { //iss.read((char*) &v, sizeof(v)); TRYREAD(iss,v); aux3.push_back(v); } aux2.push_back(aux3); } attribute.push_back(aux2); } return attribute; ; } vector <vector <vector <vector<float> > > >& Parser::get4DFloatFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector< vector <vector <vector<float> > > >& attribute) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } string decodedString; Base64 b64; b64.decode(xmlField, decodedString); stringstream iss(stringstream::in | stringstream::binary); iss.str(decodedString); attribute.clear(); unsigned int ndim = 0; //iss.read((char *)&ndim, sizeof(ndim)); TRYREAD(iss, ndim); if (ndim != 4) { throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 4.", tableName); } unsigned int dim1 = 0; //iss.read((char *)&dim1, sizeof(dim1)); TRYREAD(iss,dim1); unsigned int dim2 = 0; //iss.read((char *)&dim2, sizeof(dim2)); TRYREAD(iss,dim2); unsigned int dim3 = 0; //iss.read((char *)&dim2, sizeof(dim3)); TRYREAD(iss,dim3); unsigned int dim4 = 0; //iss.read((char *)&dim2, sizeof(dim3)); TRYREAD(iss,dim3); attribute.reserve(dim1); Float_CPP v; vector <vector <vector<float> > > aux2; vector <vector<float> > aux3; vector<float> aux4; aux2.reserve(dim2); aux3.reserve(dim3); aux4.reserve(dim4); for (unsigned int i = 0; i < dim1; i++) { aux2.clear(); for (unsigned int j = 0; j < dim2; j++) { aux3.clear(); for (unsigned int k = 0; k < dim3; k++) { aux4.clear(); for (unsigned int l = 0; l < dim4; l++) { //iss.read((char*) &v, sizeof(v)); TRYREAD(iss,v); aux4.push_back(v); } aux3.push_back(aux4); } aux2.push_back(aux3); } attribute.push_back(aux2); } return attribute; ; } void Parser::toXMLBase64(vector<double> data, const string &name, string &buf){ stringstream oss(stringstream::out | stringstream::binary); string encoded; buf.append("<" + name + "> "); int ndim = 1; int dim1 = data.size(); oss.write((char *)&ndim, sizeof(int)); oss.write((char *)&dim1, sizeof(dim1)); for (unsigned int i = 0; i < data.size(); i++) { double v = data.at(i); oss.write((char *) &v, sizeof(v)); } Base64 b64; b64.encode(oss.str(), encoded, false); buf.append(encoded); buf.append(" </" + name + "> "); } void Parser::toXMLBase64(vector< vector<double> > data, const string &name, string &buf){ stringstream oss(stringstream::out | stringstream::binary); string encoded; buf.append("<" + name + "> "); int ndim = 2; int dim1 = data.size(); int dim2 = data.at(0).size(); oss.write((char *)&ndim, sizeof(int)); oss.write((char *)&dim1, sizeof(dim1)); oss.write((char *)&dim2, sizeof(dim2)); for (unsigned int i = 0; i < data.size(); i++) for (unsigned int j = 0; j < data.at(0).size(); j++) { double v = data.at(i).at(j); oss.write((char *) &v, sizeof(v)); } Base64 b64; b64.encode(oss.str(), encoded, false); buf.append(encoded); buf.append(" </" + name + "> ") ; } void Parser::toXMLBase64(vector< vector< vector<double> > > data, const string &name, string &buf){ stringstream oss(stringstream::out | stringstream::binary); string encoded; buf.append("<" + name + "> "); int ndim = 3; int dim1 = data.size(); int dim2 = data.at(0).size(); int dim3 = data.at(0).at(0).size(); oss.write((char *)&ndim, sizeof(int)); oss.write((char *)&dim1, sizeof(dim1)); oss.write((char *)&dim2, sizeof(dim2)); oss.write((char *)&dim3, sizeof(dim3)); for (unsigned int i = 0; i < data.size(); i++) for (unsigned int j = 0; j < data.at(0).size(); j++) for (unsigned int k = 0; k < data.at(0).at(0).size(); k++){ double v = data.at(i).at(j).at(k); oss.write((char *) &v, sizeof(v)); } Base64 b64; b64.encode(oss.str(), encoded, false); buf.append(encoded); buf.append(" </" + name + "> ") ; } void Parser::toXMLBase64(vector<vector< vector< vector<double> > > >data, const string &name, string &buf){ stringstream oss(stringstream::out | stringstream::binary); string encoded; buf.append("<" + name + "> "); int ndim = 3; int dim1 = data.size(); int dim2 = data.at(0).size(); int dim3 = data.at(0).at(0).size(); int dim4 = data.at(0).at(0).at(0).size(); oss.write((char *)&ndim, sizeof(int)); oss.write((char *)&dim1, sizeof(dim1)); oss.write((char *)&dim2, sizeof(dim2)); oss.write((char *)&dim3, sizeof(dim3)); oss.write((char *)&dim4, sizeof(dim4)); for (unsigned int i = 0; i < data.size(); i++) for (unsigned int j = 0; j < data.at(0).size(); j++) for (unsigned int k = 0; k < data.at(0).at(0).size(); k++) for (unsigned int l = 0; l < data.at(0).at(0).at(0).size(); l++){ double v = data.at(i).at(j).at(k).at(l); oss.write((char *) &v, sizeof(v)); } Base64 b64; b64.encode(oss.str(), encoded, false); buf.append(encoded); buf.append(" </" + name + "> ") ; } #ifndef Double_CPP #define Double_CPP double #endif #define TRYREAD(_stream_, _value_) _stream_.read((char*) &(_value_), sizeof(_value_)); \ if (_stream_.bad()) throw ConversionException("I/O error during read of " + name, tableName); vector<double>& Parser::get1DDoubleFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector<double>& attribute) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } string decodedString; Base64 b64; b64.decode(xmlField, decodedString); stringstream iss(stringstream::in | stringstream::binary); iss.str(decodedString); attribute.clear(); unsigned int ndim = 0; //iss.read((char *)&ndim, sizeof(ndim)); TRYREAD(iss,ndim); unsigned int dim1 = 0; //iss.read((char *)&dim1, sizeof(dim1)); TRYREAD(iss,dim1); if (ndim != 1) { throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 1.", tableName); } attribute.reserve(dim1); Double_CPP v; for (unsigned int i = 0; i < dim1; i++) { //iss.read((char*) &v, sizeof(v)); TRYREAD(iss,v); attribute.push_back(v); } return attribute; } vector <vector<double> >& Parser::get2DDoubleFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector <vector<double> >& attribute) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } string decodedString; Base64 b64; b64.decode(xmlField, decodedString); stringstream iss(stringstream::in | stringstream::binary); iss.str(decodedString); attribute.clear(); unsigned int ndim = 0; //iss.read((char *)&ndim, sizeof(ndim)); TRYREAD(iss,ndim); if (ndim != 2) { throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 2.", tableName); } unsigned int dim1 = 0; //iss.read((char *)&dim1, sizeof(dim1)); TRYREAD(iss,dim1); unsigned int dim2 = 0; //iss.read((char *)&dim2, sizeof(dim2)); TRYREAD(iss,dim2); attribute.reserve(dim1); Double_CPP v; vector<double> aux2; aux2.reserve(dim2); for (unsigned int i = 0; i < dim1; i++) { aux2.clear(); for (unsigned int j = 0; j < dim2; j++) { //iss.read((char*) &v, sizeof(v)); TRYREAD(iss,v); aux2.push_back(v); } attribute.push_back(aux2); } return attribute; } vector <vector <vector<double> > >& Parser::get3DDoubleFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector <vector <vector<double> > >& attribute) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } string decodedString; Base64 b64; b64.decode(xmlField, decodedString); stringstream iss(stringstream::in | stringstream::binary); iss.str(decodedString); attribute.clear(); unsigned int ndim = 0; //iss.read((char *)&ndim, sizeof(ndim)); TRYREAD(iss, ndim); if (ndim != 3) { throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 3.", tableName); } unsigned int dim1 = 0; //iss.read((char *)&dim1, sizeof(dim1)); TRYREAD(iss,dim1); unsigned int dim2 = 0; //iss.read((char *)&dim2, sizeof(dim2)); TRYREAD(iss,dim2); unsigned int dim3 = 0; //iss.read((char *)&dim2, sizeof(dim3)); TRYREAD(iss,dim3); attribute.reserve(dim1); Double_CPP v; vector <vector<double> > aux2; vector<double> aux3; aux2.reserve(dim2); aux3.reserve(dim3); for (unsigned int i = 0; i < dim1; i++) { aux2.clear(); for (unsigned int j = 0; j < dim2; j++) { aux3.clear(); for (unsigned int k = 0; k < dim3; k++) { //iss.read((char*) &v, sizeof(v)); TRYREAD(iss,v); aux3.push_back(v); } aux2.push_back(aux3); } attribute.push_back(aux2); } return attribute; ; } vector <vector <vector <vector<double> > > >& Parser::get4DDoubleFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector< vector <vector <vector<double> > > >& attribute) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } string decodedString; Base64 b64; b64.decode(xmlField, decodedString); stringstream iss(stringstream::in | stringstream::binary); iss.str(decodedString); attribute.clear(); unsigned int ndim = 0; //iss.read((char *)&ndim, sizeof(ndim)); TRYREAD(iss, ndim); if (ndim != 4) { throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 4.", tableName); } unsigned int dim1 = 0; //iss.read((char *)&dim1, sizeof(dim1)); TRYREAD(iss,dim1); unsigned int dim2 = 0; //iss.read((char *)&dim2, sizeof(dim2)); TRYREAD(iss,dim2); unsigned int dim3 = 0; //iss.read((char *)&dim2, sizeof(dim3)); TRYREAD(iss,dim3); unsigned int dim4 = 0; //iss.read((char *)&dim2, sizeof(dim3)); TRYREAD(iss,dim3); attribute.reserve(dim1); Double_CPP v; vector <vector <vector<double> > > aux2; vector <vector<double> > aux3; vector<double> aux4; aux2.reserve(dim2); aux3.reserve(dim3); aux4.reserve(dim4); for (unsigned int i = 0; i < dim1; i++) { aux2.clear(); for (unsigned int j = 0; j < dim2; j++) { aux3.clear(); for (unsigned int k = 0; k < dim3; k++) { aux4.clear(); for (unsigned int l = 0; l < dim4; l++) { //iss.read((char*) &v, sizeof(v)); TRYREAD(iss,v); aux4.push_back(v); } aux3.push_back(aux4); } aux2.push_back(aux3); } attribute.push_back(aux2); } return attribute; ; } void Parser::toXMLBase64(vector<unsigned char> data, const string &name, string &buf){ stringstream oss(stringstream::out | stringstream::binary); string encoded; buf.append("<" + name + "> "); int ndim = 1; int dim1 = data.size(); oss.write((char *)&ndim, sizeof(int)); oss.write((char *)&dim1, sizeof(dim1)); for (unsigned int i = 0; i < data.size(); i++) { unsigned char v = data.at(i); oss.write((char *) &v, sizeof(v)); } Base64 b64; b64.encode(oss.str(), encoded, false); buf.append(encoded); buf.append(" </" + name + "> "); } void Parser::toXMLBase64(vector< vector<unsigned char> > data, const string &name, string &buf){ stringstream oss(stringstream::out | stringstream::binary); string encoded; buf.append("<" + name + "> "); int ndim = 2; int dim1 = data.size(); int dim2 = data.at(0).size(); oss.write((char *)&ndim, sizeof(int)); oss.write((char *)&dim1, sizeof(dim1)); oss.write((char *)&dim2, sizeof(dim2)); for (unsigned int i = 0; i < data.size(); i++) for (unsigned int j = 0; j < data.at(0).size(); j++) { unsigned char v = data.at(i).at(j); oss.write((char *) &v, sizeof(v)); } Base64 b64; b64.encode(oss.str(), encoded, false); buf.append(encoded); buf.append(" </" + name + "> ") ; } void Parser::toXMLBase64(vector< vector< vector<unsigned char> > > data, const string &name, string &buf){ stringstream oss(stringstream::out | stringstream::binary); string encoded; buf.append("<" + name + "> "); int ndim = 3; int dim1 = data.size(); int dim2 = data.at(0).size(); int dim3 = data.at(0).at(0).size(); oss.write((char *)&ndim, sizeof(int)); oss.write((char *)&dim1, sizeof(dim1)); oss.write((char *)&dim2, sizeof(dim2)); oss.write((char *)&dim3, sizeof(dim3)); for (unsigned int i = 0; i < data.size(); i++) for (unsigned int j = 0; j < data.at(0).size(); j++) for (unsigned int k = 0; k < data.at(0).at(0).size(); k++){ unsigned char v = data.at(i).at(j).at(k); oss.write((char *) &v, sizeof(v)); } Base64 b64; b64.encode(oss.str(), encoded, false); buf.append(encoded); buf.append(" </" + name + "> ") ; } void Parser::toXMLBase64(vector<vector< vector< vector<unsigned char> > > >data, const string &name, string &buf){ stringstream oss(stringstream::out | stringstream::binary); string encoded; buf.append("<" + name + "> "); int ndim = 3; int dim1 = data.size(); int dim2 = data.at(0).size(); int dim3 = data.at(0).at(0).size(); int dim4 = data.at(0).at(0).at(0).size(); oss.write((char *)&ndim, sizeof(int)); oss.write((char *)&dim1, sizeof(dim1)); oss.write((char *)&dim2, sizeof(dim2)); oss.write((char *)&dim3, sizeof(dim3)); oss.write((char *)&dim4, sizeof(dim4)); for (unsigned int i = 0; i < data.size(); i++) for (unsigned int j = 0; j < data.at(0).size(); j++) for (unsigned int k = 0; k < data.at(0).at(0).size(); k++) for (unsigned int l = 0; l < data.at(0).at(0).at(0).size(); l++){ unsigned char v = data.at(i).at(j).at(k).at(l); oss.write((char *) &v, sizeof(v)); } Base64 b64; b64.encode(oss.str(), encoded, false); buf.append(encoded); buf.append(" </" + name + "> ") ; } #ifndef Char_CPP #define Char_CPP char #endif #define TRYREAD(_stream_, _value_) _stream_.read((char*) &(_value_), sizeof(_value_)); \ if (_stream_.bad()) throw ConversionException("I/O error during read of " + name, tableName); vector<unsigned char>& Parser::get1DCharacterFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector<unsigned char>& attribute) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } string decodedString; Base64 b64; b64.decode(xmlField, decodedString); stringstream iss(stringstream::in | stringstream::binary); iss.str(decodedString); attribute.clear(); unsigned int ndim = 0; //iss.read((char *)&ndim, sizeof(ndim)); TRYREAD(iss,ndim); unsigned int dim1 = 0; //iss.read((char *)&dim1, sizeof(dim1)); TRYREAD(iss,dim1); if (ndim != 1) { throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 1.", tableName); } attribute.reserve(dim1); Char_CPP v; for (unsigned int i = 0; i < dim1; i++) { //iss.read((char*) &v, sizeof(v)); TRYREAD(iss,v); attribute.push_back(v); } return attribute; } vector <vector<unsigned char> >& Parser::get2DCharacterFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector <vector<unsigned char> >& attribute) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } string decodedString; Base64 b64; b64.decode(xmlField, decodedString); stringstream iss(stringstream::in | stringstream::binary); iss.str(decodedString); attribute.clear(); unsigned int ndim = 0; //iss.read((char *)&ndim, sizeof(ndim)); TRYREAD(iss,ndim); if (ndim != 2) { throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 2.", tableName); } unsigned int dim1 = 0; //iss.read((char *)&dim1, sizeof(dim1)); TRYREAD(iss,dim1); unsigned int dim2 = 0; //iss.read((char *)&dim2, sizeof(dim2)); TRYREAD(iss,dim2); attribute.reserve(dim1); Char_CPP v; vector<unsigned char> aux2; aux2.reserve(dim2); for (unsigned int i = 0; i < dim1; i++) { aux2.clear(); for (unsigned int j = 0; j < dim2; j++) { //iss.read((char*) &v, sizeof(v)); TRYREAD(iss,v); aux2.push_back(v); } attribute.push_back(aux2); } return attribute; } vector <vector <vector<unsigned char> > >& Parser::get3DCharacterFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector <vector <vector<unsigned char> > >& attribute) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } string decodedString; Base64 b64; b64.decode(xmlField, decodedString); stringstream iss(stringstream::in | stringstream::binary); iss.str(decodedString); attribute.clear(); unsigned int ndim = 0; //iss.read((char *)&ndim, sizeof(ndim)); TRYREAD(iss, ndim); if (ndim != 3) { throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 3.", tableName); } unsigned int dim1 = 0; //iss.read((char *)&dim1, sizeof(dim1)); TRYREAD(iss,dim1); unsigned int dim2 = 0; //iss.read((char *)&dim2, sizeof(dim2)); TRYREAD(iss,dim2); unsigned int dim3 = 0; //iss.read((char *)&dim2, sizeof(dim3)); TRYREAD(iss,dim3); attribute.reserve(dim1); Char_CPP v; vector <vector<unsigned char> > aux2; vector<unsigned char> aux3; aux2.reserve(dim2); aux3.reserve(dim3); for (unsigned int i = 0; i < dim1; i++) { aux2.clear(); for (unsigned int j = 0; j < dim2; j++) { aux3.clear(); for (unsigned int k = 0; k < dim3; k++) { //iss.read((char*) &v, sizeof(v)); TRYREAD(iss,v); aux3.push_back(v); } aux2.push_back(aux3); } attribute.push_back(aux2); } return attribute; ; } vector <vector <vector <vector<unsigned char> > > >& Parser::get4DCharacterFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector< vector <vector <vector<unsigned char> > > >& attribute) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } string decodedString; Base64 b64; b64.decode(xmlField, decodedString); stringstream iss(stringstream::in | stringstream::binary); iss.str(decodedString); attribute.clear(); unsigned int ndim = 0; //iss.read((char *)&ndim, sizeof(ndim)); TRYREAD(iss, ndim); if (ndim != 4) { throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 4.", tableName); } unsigned int dim1 = 0; //iss.read((char *)&dim1, sizeof(dim1)); TRYREAD(iss,dim1); unsigned int dim2 = 0; //iss.read((char *)&dim2, sizeof(dim2)); TRYREAD(iss,dim2); unsigned int dim3 = 0; //iss.read((char *)&dim2, sizeof(dim3)); TRYREAD(iss,dim3); unsigned int dim4 = 0; //iss.read((char *)&dim2, sizeof(dim3)); TRYREAD(iss,dim3); attribute.reserve(dim1); Char_CPP v; vector <vector <vector<unsigned char> > > aux2; vector <vector<unsigned char> > aux3; vector<unsigned char> aux4; aux2.reserve(dim2); aux3.reserve(dim3); aux4.reserve(dim4); for (unsigned int i = 0; i < dim1; i++) { aux2.clear(); for (unsigned int j = 0; j < dim2; j++) { aux3.clear(); for (unsigned int k = 0; k < dim3; k++) { aux4.clear(); for (unsigned int l = 0; l < dim4; l++) { //iss.read((char*) &v, sizeof(v)); TRYREAD(iss,v); aux4.push_back(v); } aux3.push_back(aux4); } aux2.push_back(aux3); } attribute.push_back(aux2); } return attribute; ; } void Parser::toXMLBase64(vector<bool> data, const string &name, string &buf){ stringstream oss(stringstream::out | stringstream::binary); string encoded; buf.append("<" + name + "> "); int ndim = 1; int dim1 = data.size(); oss.write((char *)&ndim, sizeof(int)); oss.write((char *)&dim1, sizeof(dim1)); for (unsigned int i = 0; i < data.size(); i++) { bool v = data.at(i); oss.write((char *) &v, sizeof(v)); } Base64 b64; b64.encode(oss.str(), encoded, false); buf.append(encoded); buf.append(" </" + name + "> "); } void Parser::toXMLBase64(vector< vector<bool> > data, const string &name, string &buf){ stringstream oss(stringstream::out | stringstream::binary); string encoded; buf.append("<" + name + "> "); int ndim = 2; int dim1 = data.size(); int dim2 = data.at(0).size(); oss.write((char *)&ndim, sizeof(int)); oss.write((char *)&dim1, sizeof(dim1)); oss.write((char *)&dim2, sizeof(dim2)); for (unsigned int i = 0; i < data.size(); i++) for (unsigned int j = 0; j < data.at(0).size(); j++) { bool v = data.at(i).at(j); oss.write((char *) &v, sizeof(v)); } Base64 b64; b64.encode(oss.str(), encoded, false); buf.append(encoded); buf.append(" </" + name + "> ") ; } void Parser::toXMLBase64(vector< vector< vector<bool> > > data, const string &name, string &buf){ stringstream oss(stringstream::out | stringstream::binary); string encoded; buf.append("<" + name + "> "); int ndim = 3; int dim1 = data.size(); int dim2 = data.at(0).size(); int dim3 = data.at(0).at(0).size(); oss.write((char *)&ndim, sizeof(int)); oss.write((char *)&dim1, sizeof(dim1)); oss.write((char *)&dim2, sizeof(dim2)); oss.write((char *)&dim3, sizeof(dim3)); for (unsigned int i = 0; i < data.size(); i++) for (unsigned int j = 0; j < data.at(0).size(); j++) for (unsigned int k = 0; k < data.at(0).at(0).size(); k++){ bool v = data.at(i).at(j).at(k); oss.write((char *) &v, sizeof(v)); } Base64 b64; b64.encode(oss.str(), encoded, false); buf.append(encoded); buf.append(" </" + name + "> ") ; } void Parser::toXMLBase64(vector<vector< vector< vector<bool> > > >data, const string &name, string &buf){ stringstream oss(stringstream::out | stringstream::binary); string encoded; buf.append("<" + name + "> "); int ndim = 3; int dim1 = data.size(); int dim2 = data.at(0).size(); int dim3 = data.at(0).at(0).size(); int dim4 = data.at(0).at(0).at(0).size(); oss.write((char *)&ndim, sizeof(int)); oss.write((char *)&dim1, sizeof(dim1)); oss.write((char *)&dim2, sizeof(dim2)); oss.write((char *)&dim3, sizeof(dim3)); oss.write((char *)&dim4, sizeof(dim4)); for (unsigned int i = 0; i < data.size(); i++) for (unsigned int j = 0; j < data.at(0).size(); j++) for (unsigned int k = 0; k < data.at(0).at(0).size(); k++) for (unsigned int l = 0; l < data.at(0).at(0).at(0).size(); l++){ bool v = data.at(i).at(j).at(k).at(l); oss.write((char *) &v, sizeof(v)); } Base64 b64; b64.encode(oss.str(), encoded, false); buf.append(encoded); buf.append(" </" + name + "> ") ; } #ifndef Boolean_CPP #define Boolean_CPP bool #endif #define TRYREAD(_stream_, _value_) _stream_.read((char*) &(_value_), sizeof(_value_)); \ if (_stream_.bad()) throw ConversionException("I/O error during read of " + name, tableName); vector<bool>& Parser::get1DBooleanFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector<bool>& attribute) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } string decodedString; Base64 b64; b64.decode(xmlField, decodedString); stringstream iss(stringstream::in | stringstream::binary); iss.str(decodedString); attribute.clear(); unsigned int ndim = 0; //iss.read((char *)&ndim, sizeof(ndim)); TRYREAD(iss,ndim); unsigned int dim1 = 0; //iss.read((char *)&dim1, sizeof(dim1)); TRYREAD(iss,dim1); if (ndim != 1) { throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 1.", tableName); } attribute.reserve(dim1); Boolean_CPP v; for (unsigned int i = 0; i < dim1; i++) { //iss.read((char*) &v, sizeof(v)); TRYREAD(iss,v); attribute.push_back(v); } return attribute; } vector <vector<bool> >& Parser::get2DBooleanFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector <vector<bool> >& attribute) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } string decodedString; Base64 b64; b64.decode(xmlField, decodedString); stringstream iss(stringstream::in | stringstream::binary); iss.str(decodedString); attribute.clear(); unsigned int ndim = 0; //iss.read((char *)&ndim, sizeof(ndim)); TRYREAD(iss,ndim); if (ndim != 2) { throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 2.", tableName); } unsigned int dim1 = 0; //iss.read((char *)&dim1, sizeof(dim1)); TRYREAD(iss,dim1); unsigned int dim2 = 0; //iss.read((char *)&dim2, sizeof(dim2)); TRYREAD(iss,dim2); attribute.reserve(dim1); Boolean_CPP v; vector<bool> aux2; aux2.reserve(dim2); for (unsigned int i = 0; i < dim1; i++) { aux2.clear(); for (unsigned int j = 0; j < dim2; j++) { //iss.read((char*) &v, sizeof(v)); TRYREAD(iss,v); aux2.push_back(v); } attribute.push_back(aux2); } return attribute; } vector <vector <vector<bool> > >& Parser::get3DBooleanFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector <vector <vector<bool> > >& attribute) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } string decodedString; Base64 b64; b64.decode(xmlField, decodedString); stringstream iss(stringstream::in | stringstream::binary); iss.str(decodedString); attribute.clear(); unsigned int ndim = 0; //iss.read((char *)&ndim, sizeof(ndim)); TRYREAD(iss, ndim); if (ndim != 3) { throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 3.", tableName); } unsigned int dim1 = 0; //iss.read((char *)&dim1, sizeof(dim1)); TRYREAD(iss,dim1); unsigned int dim2 = 0; //iss.read((char *)&dim2, sizeof(dim2)); TRYREAD(iss,dim2); unsigned int dim3 = 0; //iss.read((char *)&dim2, sizeof(dim3)); TRYREAD(iss,dim3); attribute.reserve(dim1); Boolean_CPP v; vector <vector<bool> > aux2; vector<bool> aux3; aux2.reserve(dim2); aux3.reserve(dim3); for (unsigned int i = 0; i < dim1; i++) { aux2.clear(); for (unsigned int j = 0; j < dim2; j++) { aux3.clear(); for (unsigned int k = 0; k < dim3; k++) { //iss.read((char*) &v, sizeof(v)); TRYREAD(iss,v); aux3.push_back(v); } aux2.push_back(aux3); } attribute.push_back(aux2); } return attribute; ; } vector <vector <vector <vector<bool> > > >& Parser::get4DBooleanFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector< vector <vector <vector<bool> > > >& attribute) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } string decodedString; Base64 b64; b64.decode(xmlField, decodedString); stringstream iss(stringstream::in | stringstream::binary); iss.str(decodedString); attribute.clear(); unsigned int ndim = 0; //iss.read((char *)&ndim, sizeof(ndim)); TRYREAD(iss, ndim); if (ndim != 4) { throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 4.", tableName); } unsigned int dim1 = 0; //iss.read((char *)&dim1, sizeof(dim1)); TRYREAD(iss,dim1); unsigned int dim2 = 0; //iss.read((char *)&dim2, sizeof(dim2)); TRYREAD(iss,dim2); unsigned int dim3 = 0; //iss.read((char *)&dim2, sizeof(dim3)); TRYREAD(iss,dim3); unsigned int dim4 = 0; //iss.read((char *)&dim2, sizeof(dim3)); TRYREAD(iss,dim3); attribute.reserve(dim1); Boolean_CPP v; vector <vector <vector<bool> > > aux2; vector <vector<bool> > aux3; vector<bool> aux4; aux2.reserve(dim2); aux3.reserve(dim3); aux4.reserve(dim4); for (unsigned int i = 0; i < dim1; i++) { aux2.clear(); for (unsigned int j = 0; j < dim2; j++) { aux3.clear(); for (unsigned int k = 0; k < dim3; k++) { aux4.clear(); for (unsigned int l = 0; l < dim4; l++) { //iss.read((char*) &v, sizeof(v)); TRYREAD(iss,v); aux4.push_back(v); } aux3.push_back(aux4); } aux2.push_back(aux3); } attribute.push_back(aux2); } return attribute; ; } void Parser::toXMLBase64(vector<Angle> data, const string &name, string &buf){ stringstream oss(stringstream::out | stringstream::binary); string encoded; buf.append("<" + name + "> "); int ndim = 1; int dim1 = data.size(); oss.write((char *)&ndim, sizeof(int)); oss.write((char *)&dim1, sizeof(dim1)); for (unsigned int i = 0; i < data.size(); i++) { double v = data.at(i).get(); oss.write((char *) &v, sizeof(v)); } Base64 b64; b64.encode(oss.str(), encoded, false); buf.append(encoded); buf.append(" </" + name + "> "); } void Parser::toXMLBase64(vector< vector<Angle> > data, const string &name, string &buf){ stringstream oss(stringstream::out | stringstream::binary); string encoded; buf.append("<" + name + "> "); int ndim = 2; int dim1 = data.size(); int dim2 = data.at(0).size(); oss.write((char *)&ndim, sizeof(int)); oss.write((char *)&dim1, sizeof(dim1)); oss.write((char *)&dim2, sizeof(dim2)); for (unsigned int i = 0; i < data.size(); i++) for (unsigned int j = 0; j < data.at(0).size(); j++) { double v = data.at(i).at(j).get(); oss.write((char *) &v, sizeof(v)); } Base64 b64; b64.encode(oss.str(), encoded, false); buf.append(encoded); buf.append(" </" + name + "> ") ; } void Parser::toXMLBase64(vector< vector< vector<Angle> > > data, const string &name, string &buf){ stringstream oss(stringstream::out | stringstream::binary); string encoded; buf.append("<" + name + "> "); int ndim = 3; int dim1 = data.size(); int dim2 = data.at(0).size(); int dim3 = data.at(0).at(0).size(); oss.write((char *)&ndim, sizeof(int)); oss.write((char *)&dim1, sizeof(dim1)); oss.write((char *)&dim2, sizeof(dim2)); oss.write((char *)&dim3, sizeof(dim3)); for (unsigned int i = 0; i < data.size(); i++) for (unsigned int j = 0; j < data.at(0).size(); j++) for (unsigned int k = 0; k < data.at(0).at(0).size(); k++){ double v = data.at(i).at(j).at(k).get(); oss.write((char *) &v, sizeof(v)); } Base64 b64; b64.encode(oss.str(), encoded, false); buf.append(encoded); buf.append(" </" + name + "> ") ; } void Parser::toXMLBase64(vector<vector< vector< vector<Angle> > > >data, const string &name, string &buf){ stringstream oss(stringstream::out | stringstream::binary); string encoded; buf.append("<" + name + "> "); int ndim = 3; int dim1 = data.size(); int dim2 = data.at(0).size(); int dim3 = data.at(0).at(0).size(); int dim4 = data.at(0).at(0).at(0).size(); oss.write((char *)&ndim, sizeof(int)); oss.write((char *)&dim1, sizeof(dim1)); oss.write((char *)&dim2, sizeof(dim2)); oss.write((char *)&dim3, sizeof(dim3)); oss.write((char *)&dim4, sizeof(dim4)); for (unsigned int i = 0; i < data.size(); i++) for (unsigned int j = 0; j < data.at(0).size(); j++) for (unsigned int k = 0; k < data.at(0).at(0).size(); k++) for (unsigned int l = 0; l < data.at(0).at(0).at(0).size(); l++){ double v = data.at(i).at(j).at(k).at(l).get(); oss.write((char *) &v, sizeof(v)); } Base64 b64; b64.encode(oss.str(), encoded, false); buf.append(encoded); buf.append(" </" + name + "> ") ; } #ifndef Double_CPP #define Double_CPP double #endif #define TRYREAD(_stream_, _value_) _stream_.read((char*) &(_value_), sizeof(_value_)); \ if (_stream_.bad()) throw ConversionException("I/O error during read of " + name, tableName); vector<Angle>& Parser::get1DAngleFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector<Angle>& attribute) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } string decodedString; Base64 b64; b64.decode(xmlField, decodedString); stringstream iss(stringstream::in | stringstream::binary); iss.str(decodedString); attribute.clear(); unsigned int ndim = 0; //iss.read((char *)&ndim, sizeof(ndim)); TRYREAD(iss,ndim); unsigned int dim1 = 0; //iss.read((char *)&dim1, sizeof(dim1)); TRYREAD(iss,dim1); if (ndim != 1) { throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 1.", tableName); } attribute.reserve(dim1); Double_CPP v; for (unsigned int i = 0; i < dim1; i++) { //iss.read((char*) &v, sizeof(v)); TRYREAD(iss,v); attribute.push_back(Angle(v)); } return attribute; } vector <vector<Angle> >& Parser::get2DAngleFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector <vector<Angle> >& attribute) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } string decodedString; Base64 b64; b64.decode(xmlField, decodedString); stringstream iss(stringstream::in | stringstream::binary); iss.str(decodedString); attribute.clear(); unsigned int ndim = 0; //iss.read((char *)&ndim, sizeof(ndim)); TRYREAD(iss,ndim); if (ndim != 2) { throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 2.", tableName); } unsigned int dim1 = 0; //iss.read((char *)&dim1, sizeof(dim1)); TRYREAD(iss,dim1); unsigned int dim2 = 0; //iss.read((char *)&dim2, sizeof(dim2)); TRYREAD(iss,dim2); attribute.reserve(dim1); Double_CPP v; vector<Angle> aux2; aux2.reserve(dim2); for (unsigned int i = 0; i < dim1; i++) { aux2.clear(); for (unsigned int j = 0; j < dim2; j++) { //iss.read((char*) &v, sizeof(v)); TRYREAD(iss,v); aux2.push_back(Angle(v)); } attribute.push_back(aux2); } return attribute; } vector <vector <vector<Angle> > >& Parser::get3DAngleFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector <vector <vector<Angle> > >& attribute) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } string decodedString; Base64 b64; b64.decode(xmlField, decodedString); stringstream iss(stringstream::in | stringstream::binary); iss.str(decodedString); attribute.clear(); unsigned int ndim = 0; //iss.read((char *)&ndim, sizeof(ndim)); TRYREAD(iss, ndim); if (ndim != 3) { throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 3.", tableName); } unsigned int dim1 = 0; //iss.read((char *)&dim1, sizeof(dim1)); TRYREAD(iss,dim1); unsigned int dim2 = 0; //iss.read((char *)&dim2, sizeof(dim2)); TRYREAD(iss,dim2); unsigned int dim3 = 0; //iss.read((char *)&dim2, sizeof(dim3)); TRYREAD(iss,dim3); attribute.reserve(dim1); Double_CPP v; vector <vector<Angle> > aux2; vector<Angle> aux3; aux2.reserve(dim2); aux3.reserve(dim3); for (unsigned int i = 0; i < dim1; i++) { aux2.clear(); for (unsigned int j = 0; j < dim2; j++) { aux3.clear(); for (unsigned int k = 0; k < dim3; k++) { //iss.read((char*) &v, sizeof(v)); TRYREAD(iss,v); aux3.push_back(Angle(v)); } aux2.push_back(aux3); } attribute.push_back(aux2); } return attribute; ; } vector <vector <vector <vector<Angle> > > >& Parser::get4DAngleFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector< vector <vector <vector<Angle> > > >& attribute) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } string decodedString; Base64 b64; b64.decode(xmlField, decodedString); stringstream iss(stringstream::in | stringstream::binary); iss.str(decodedString); attribute.clear(); unsigned int ndim = 0; //iss.read((char *)&ndim, sizeof(ndim)); TRYREAD(iss, ndim); if (ndim != 4) { throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 4.", tableName); } unsigned int dim1 = 0; //iss.read((char *)&dim1, sizeof(dim1)); TRYREAD(iss,dim1); unsigned int dim2 = 0; //iss.read((char *)&dim2, sizeof(dim2)); TRYREAD(iss,dim2); unsigned int dim3 = 0; //iss.read((char *)&dim2, sizeof(dim3)); TRYREAD(iss,dim3); unsigned int dim4 = 0; //iss.read((char *)&dim2, sizeof(dim3)); TRYREAD(iss,dim3); attribute.reserve(dim1); Double_CPP v; vector <vector <vector<Angle> > > aux2; vector <vector<Angle> > aux3; vector<Angle> aux4; aux2.reserve(dim2); aux3.reserve(dim3); aux4.reserve(dim4); for (unsigned int i = 0; i < dim1; i++) { aux2.clear(); for (unsigned int j = 0; j < dim2; j++) { aux3.clear(); for (unsigned int k = 0; k < dim3; k++) { aux4.clear(); for (unsigned int l = 0; l < dim4; l++) { //iss.read((char*) &v, sizeof(v)); TRYREAD(iss,v); aux4.push_back(Angle(v)); } aux3.push_back(aux4); } aux2.push_back(aux3); } attribute.push_back(aux2); } return attribute; ; } void Parser::toXMLBase64(vector<AngularRate> data, const string &name, string &buf){ stringstream oss(stringstream::out | stringstream::binary); string encoded; buf.append("<" + name + "> "); int ndim = 1; int dim1 = data.size(); oss.write((char *)&ndim, sizeof(int)); oss.write((char *)&dim1, sizeof(dim1)); for (unsigned int i = 0; i < data.size(); i++) { double v = data.at(i).get(); oss.write((char *) &v, sizeof(v)); } Base64 b64; b64.encode(oss.str(), encoded, false); buf.append(encoded); buf.append(" </" + name + "> "); } void Parser::toXMLBase64(vector< vector<AngularRate> > data, const string &name, string &buf){ stringstream oss(stringstream::out | stringstream::binary); string encoded; buf.append("<" + name + "> "); int ndim = 2; int dim1 = data.size(); int dim2 = data.at(0).size(); oss.write((char *)&ndim, sizeof(int)); oss.write((char *)&dim1, sizeof(dim1)); oss.write((char *)&dim2, sizeof(dim2)); for (unsigned int i = 0; i < data.size(); i++) for (unsigned int j = 0; j < data.at(0).size(); j++) { double v = data.at(i).at(j).get(); oss.write((char *) &v, sizeof(v)); } Base64 b64; b64.encode(oss.str(), encoded, false); buf.append(encoded); buf.append(" </" + name + "> ") ; } void Parser::toXMLBase64(vector< vector< vector<AngularRate> > > data, const string &name, string &buf){ stringstream oss(stringstream::out | stringstream::binary); string encoded; buf.append("<" + name + "> "); int ndim = 3; int dim1 = data.size(); int dim2 = data.at(0).size(); int dim3 = data.at(0).at(0).size(); oss.write((char *)&ndim, sizeof(int)); oss.write((char *)&dim1, sizeof(dim1)); oss.write((char *)&dim2, sizeof(dim2)); oss.write((char *)&dim3, sizeof(dim3)); for (unsigned int i = 0; i < data.size(); i++) for (unsigned int j = 0; j < data.at(0).size(); j++) for (unsigned int k = 0; k < data.at(0).at(0).size(); k++){ double v = data.at(i).at(j).at(k).get(); oss.write((char *) &v, sizeof(v)); } Base64 b64; b64.encode(oss.str(), encoded, false); buf.append(encoded); buf.append(" </" + name + "> ") ; } void Parser::toXMLBase64(vector<vector< vector< vector<AngularRate> > > >data, const string &name, string &buf){ stringstream oss(stringstream::out | stringstream::binary); string encoded; buf.append("<" + name + "> "); int ndim = 3; int dim1 = data.size(); int dim2 = data.at(0).size(); int dim3 = data.at(0).at(0).size(); int dim4 = data.at(0).at(0).at(0).size(); oss.write((char *)&ndim, sizeof(int)); oss.write((char *)&dim1, sizeof(dim1)); oss.write((char *)&dim2, sizeof(dim2)); oss.write((char *)&dim3, sizeof(dim3)); oss.write((char *)&dim4, sizeof(dim4)); for (unsigned int i = 0; i < data.size(); i++) for (unsigned int j = 0; j < data.at(0).size(); j++) for (unsigned int k = 0; k < data.at(0).at(0).size(); k++) for (unsigned int l = 0; l < data.at(0).at(0).at(0).size(); l++){ double v = data.at(i).at(j).at(k).at(l).get(); oss.write((char *) &v, sizeof(v)); } Base64 b64; b64.encode(oss.str(), encoded, false); buf.append(encoded); buf.append(" </" + name + "> ") ; } #ifndef Double_CPP #define Double_CPP double #endif #define TRYREAD(_stream_, _value_) _stream_.read((char*) &(_value_), sizeof(_value_)); \ if (_stream_.bad()) throw ConversionException("I/O error during read of " + name, tableName); vector<AngularRate>& Parser::get1DAngularRateFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector<AngularRate>& attribute) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } string decodedString; Base64 b64; b64.decode(xmlField, decodedString); stringstream iss(stringstream::in | stringstream::binary); iss.str(decodedString); attribute.clear(); unsigned int ndim = 0; //iss.read((char *)&ndim, sizeof(ndim)); TRYREAD(iss,ndim); unsigned int dim1 = 0; //iss.read((char *)&dim1, sizeof(dim1)); TRYREAD(iss,dim1); if (ndim != 1) { throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 1.", tableName); } attribute.reserve(dim1); Double_CPP v; for (unsigned int i = 0; i < dim1; i++) { //iss.read((char*) &v, sizeof(v)); TRYREAD(iss,v); attribute.push_back(AngularRate(v)); } return attribute; } vector <vector<AngularRate> >& Parser::get2DAngularRateFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector <vector<AngularRate> >& attribute) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } string decodedString; Base64 b64; b64.decode(xmlField, decodedString); stringstream iss(stringstream::in | stringstream::binary); iss.str(decodedString); attribute.clear(); unsigned int ndim = 0; //iss.read((char *)&ndim, sizeof(ndim)); TRYREAD(iss,ndim); if (ndim != 2) { throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 2.", tableName); } unsigned int dim1 = 0; //iss.read((char *)&dim1, sizeof(dim1)); TRYREAD(iss,dim1); unsigned int dim2 = 0; //iss.read((char *)&dim2, sizeof(dim2)); TRYREAD(iss,dim2); attribute.reserve(dim1); Double_CPP v; vector<AngularRate> aux2; aux2.reserve(dim2); for (unsigned int i = 0; i < dim1; i++) { aux2.clear(); for (unsigned int j = 0; j < dim2; j++) { //iss.read((char*) &v, sizeof(v)); TRYREAD(iss,v); aux2.push_back(AngularRate(v)); } attribute.push_back(aux2); } return attribute; } vector <vector <vector<AngularRate> > >& Parser::get3DAngularRateFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector <vector <vector<AngularRate> > >& attribute) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } string decodedString; Base64 b64; b64.decode(xmlField, decodedString); stringstream iss(stringstream::in | stringstream::binary); iss.str(decodedString); attribute.clear(); unsigned int ndim = 0; //iss.read((char *)&ndim, sizeof(ndim)); TRYREAD(iss, ndim); if (ndim != 3) { throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 3.", tableName); } unsigned int dim1 = 0; //iss.read((char *)&dim1, sizeof(dim1)); TRYREAD(iss,dim1); unsigned int dim2 = 0; //iss.read((char *)&dim2, sizeof(dim2)); TRYREAD(iss,dim2); unsigned int dim3 = 0; //iss.read((char *)&dim2, sizeof(dim3)); TRYREAD(iss,dim3); attribute.reserve(dim1); Double_CPP v; vector <vector<AngularRate> > aux2; vector<AngularRate> aux3; aux2.reserve(dim2); aux3.reserve(dim3); for (unsigned int i = 0; i < dim1; i++) { aux2.clear(); for (unsigned int j = 0; j < dim2; j++) { aux3.clear(); for (unsigned int k = 0; k < dim3; k++) { //iss.read((char*) &v, sizeof(v)); TRYREAD(iss,v); aux3.push_back(AngularRate(v)); } aux2.push_back(aux3); } attribute.push_back(aux2); } return attribute; ; } vector <vector <vector <vector<AngularRate> > > >& Parser::get4DAngularRateFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector< vector <vector <vector<AngularRate> > > >& attribute) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } string decodedString; Base64 b64; b64.decode(xmlField, decodedString); stringstream iss(stringstream::in | stringstream::binary); iss.str(decodedString); attribute.clear(); unsigned int ndim = 0; //iss.read((char *)&ndim, sizeof(ndim)); TRYREAD(iss, ndim); if (ndim != 4) { throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 4.", tableName); } unsigned int dim1 = 0; //iss.read((char *)&dim1, sizeof(dim1)); TRYREAD(iss,dim1); unsigned int dim2 = 0; //iss.read((char *)&dim2, sizeof(dim2)); TRYREAD(iss,dim2); unsigned int dim3 = 0; //iss.read((char *)&dim2, sizeof(dim3)); TRYREAD(iss,dim3); unsigned int dim4 = 0; //iss.read((char *)&dim2, sizeof(dim3)); TRYREAD(iss,dim3); attribute.reserve(dim1); Double_CPP v; vector <vector <vector<AngularRate> > > aux2; vector <vector<AngularRate> > aux3; vector<AngularRate> aux4; aux2.reserve(dim2); aux3.reserve(dim3); aux4.reserve(dim4); for (unsigned int i = 0; i < dim1; i++) { aux2.clear(); for (unsigned int j = 0; j < dim2; j++) { aux3.clear(); for (unsigned int k = 0; k < dim3; k++) { aux4.clear(); for (unsigned int l = 0; l < dim4; l++) { //iss.read((char*) &v, sizeof(v)); TRYREAD(iss,v); aux4.push_back(AngularRate(v)); } aux3.push_back(aux4); } aux2.push_back(aux3); } attribute.push_back(aux2); } return attribute; ; } void Parser::toXMLBase64(vector<ArrayTime> data, const string &name, string &buf){ stringstream oss(stringstream::out | stringstream::binary); string encoded; buf.append("<" + name + "> "); int ndim = 1; int dim1 = data.size(); oss.write((char *)&ndim, sizeof(int)); oss.write((char *)&dim1, sizeof(dim1)); for (unsigned int i = 0; i < data.size(); i++) { long v = data.at(i).get(); oss.write((char *) &v, sizeof(v)); } Base64 b64; b64.encode(oss.str(), encoded, false); buf.append(encoded); buf.append(" </" + name + "> "); } void Parser::toXMLBase64(vector< vector<ArrayTime> > data, const string &name, string &buf){ stringstream oss(stringstream::out | stringstream::binary); string encoded; buf.append("<" + name + "> "); int ndim = 2; int dim1 = data.size(); int dim2 = data.at(0).size(); oss.write((char *)&ndim, sizeof(int)); oss.write((char *)&dim1, sizeof(dim1)); oss.write((char *)&dim2, sizeof(dim2)); for (unsigned int i = 0; i < data.size(); i++) for (unsigned int j = 0; j < data.at(0).size(); j++) { long v = data.at(i).at(j).get(); oss.write((char *) &v, sizeof(v)); } Base64 b64; b64.encode(oss.str(), encoded, false); buf.append(encoded); buf.append(" </" + name + "> ") ; } void Parser::toXMLBase64(vector< vector< vector<ArrayTime> > > data, const string &name, string &buf){ stringstream oss(stringstream::out | stringstream::binary); string encoded; buf.append("<" + name + "> "); int ndim = 3; int dim1 = data.size(); int dim2 = data.at(0).size(); int dim3 = data.at(0).at(0).size(); oss.write((char *)&ndim, sizeof(int)); oss.write((char *)&dim1, sizeof(dim1)); oss.write((char *)&dim2, sizeof(dim2)); oss.write((char *)&dim3, sizeof(dim3)); for (unsigned int i = 0; i < data.size(); i++) for (unsigned int j = 0; j < data.at(0).size(); j++) for (unsigned int k = 0; k < data.at(0).at(0).size(); k++){ long v = data.at(i).at(j).at(k).get(); oss.write((char *) &v, sizeof(v)); } Base64 b64; b64.encode(oss.str(), encoded, false); buf.append(encoded); buf.append(" </" + name + "> ") ; } void Parser::toXMLBase64(vector<vector< vector< vector<ArrayTime> > > >data, const string &name, string &buf){ stringstream oss(stringstream::out | stringstream::binary); string encoded; buf.append("<" + name + "> "); int ndim = 3; int dim1 = data.size(); int dim2 = data.at(0).size(); int dim3 = data.at(0).at(0).size(); int dim4 = data.at(0).at(0).at(0).size(); oss.write((char *)&ndim, sizeof(int)); oss.write((char *)&dim1, sizeof(dim1)); oss.write((char *)&dim2, sizeof(dim2)); oss.write((char *)&dim3, sizeof(dim3)); oss.write((char *)&dim4, sizeof(dim4)); for (unsigned int i = 0; i < data.size(); i++) for (unsigned int j = 0; j < data.at(0).size(); j++) for (unsigned int k = 0; k < data.at(0).at(0).size(); k++) for (unsigned int l = 0; l < data.at(0).at(0).at(0).size(); l++){ long v = data.at(i).at(j).at(k).at(l).get(); oss.write((char *) &v, sizeof(v)); } Base64 b64; b64.encode(oss.str(), encoded, false); buf.append(encoded); buf.append(" </" + name + "> ") ; } #ifndef Long_CPP #define Long_CPP int64_t #endif #define TRYREAD(_stream_, _value_) _stream_.read((char*) &(_value_), sizeof(_value_)); \ if (_stream_.bad()) throw ConversionException("I/O error during read of " + name, tableName); vector<ArrayTime>& Parser::get1DArrayTimeFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector<ArrayTime>& attribute) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } string decodedString; Base64 b64; b64.decode(xmlField, decodedString); stringstream iss(stringstream::in | stringstream::binary); iss.str(decodedString); attribute.clear(); unsigned int ndim = 0; //iss.read((char *)&ndim, sizeof(ndim)); TRYREAD(iss,ndim); unsigned int dim1 = 0; //iss.read((char *)&dim1, sizeof(dim1)); TRYREAD(iss,dim1); if (ndim != 1) { throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 1.", tableName); } attribute.reserve(dim1); Long_CPP v; for (unsigned int i = 0; i < dim1; i++) { //iss.read((char*) &v, sizeof(v)); TRYREAD(iss,v); attribute.push_back(ArrayTime(v)); } return attribute; } vector <vector<ArrayTime> >& Parser::get2DArrayTimeFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector <vector<ArrayTime> >& attribute) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } string decodedString; Base64 b64; b64.decode(xmlField, decodedString); stringstream iss(stringstream::in | stringstream::binary); iss.str(decodedString); attribute.clear(); unsigned int ndim = 0; //iss.read((char *)&ndim, sizeof(ndim)); TRYREAD(iss,ndim); if (ndim != 2) { throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 2.", tableName); } unsigned int dim1 = 0; //iss.read((char *)&dim1, sizeof(dim1)); TRYREAD(iss,dim1); unsigned int dim2 = 0; //iss.read((char *)&dim2, sizeof(dim2)); TRYREAD(iss,dim2); attribute.reserve(dim1); Long_CPP v; vector<ArrayTime> aux2; aux2.reserve(dim2); for (unsigned int i = 0; i < dim1; i++) { aux2.clear(); for (unsigned int j = 0; j < dim2; j++) { //iss.read((char*) &v, sizeof(v)); TRYREAD(iss,v); aux2.push_back(ArrayTime(v)); } attribute.push_back(aux2); } return attribute; } vector <vector <vector<ArrayTime> > >& Parser::get3DArrayTimeFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector <vector <vector<ArrayTime> > >& attribute) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } string decodedString; Base64 b64; b64.decode(xmlField, decodedString); stringstream iss(stringstream::in | stringstream::binary); iss.str(decodedString); attribute.clear(); unsigned int ndim = 0; //iss.read((char *)&ndim, sizeof(ndim)); TRYREAD(iss, ndim); if (ndim != 3) { throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 3.", tableName); } unsigned int dim1 = 0; //iss.read((char *)&dim1, sizeof(dim1)); TRYREAD(iss,dim1); unsigned int dim2 = 0; //iss.read((char *)&dim2, sizeof(dim2)); TRYREAD(iss,dim2); unsigned int dim3 = 0; //iss.read((char *)&dim2, sizeof(dim3)); TRYREAD(iss,dim3); attribute.reserve(dim1); Long_CPP v; vector <vector<ArrayTime> > aux2; vector<ArrayTime> aux3; aux2.reserve(dim2); aux3.reserve(dim3); for (unsigned int i = 0; i < dim1; i++) { aux2.clear(); for (unsigned int j = 0; j < dim2; j++) { aux3.clear(); for (unsigned int k = 0; k < dim3; k++) { //iss.read((char*) &v, sizeof(v)); TRYREAD(iss,v); aux3.push_back(ArrayTime(v)); } aux2.push_back(aux3); } attribute.push_back(aux2); } return attribute; ; } vector <vector <vector <vector<ArrayTime> > > >& Parser::get4DArrayTimeFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector< vector <vector <vector<ArrayTime> > > >& attribute) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } string decodedString; Base64 b64; b64.decode(xmlField, decodedString); stringstream iss(stringstream::in | stringstream::binary); iss.str(decodedString); attribute.clear(); unsigned int ndim = 0; //iss.read((char *)&ndim, sizeof(ndim)); TRYREAD(iss, ndim); if (ndim != 4) { throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 4.", tableName); } unsigned int dim1 = 0; //iss.read((char *)&dim1, sizeof(dim1)); TRYREAD(iss,dim1); unsigned int dim2 = 0; //iss.read((char *)&dim2, sizeof(dim2)); TRYREAD(iss,dim2); unsigned int dim3 = 0; //iss.read((char *)&dim2, sizeof(dim3)); TRYREAD(iss,dim3); unsigned int dim4 = 0; //iss.read((char *)&dim2, sizeof(dim3)); TRYREAD(iss,dim3); attribute.reserve(dim1); Long_CPP v; vector <vector <vector<ArrayTime> > > aux2; vector <vector<ArrayTime> > aux3; vector<ArrayTime> aux4; aux2.reserve(dim2); aux3.reserve(dim3); aux4.reserve(dim4); for (unsigned int i = 0; i < dim1; i++) { aux2.clear(); for (unsigned int j = 0; j < dim2; j++) { aux3.clear(); for (unsigned int k = 0; k < dim3; k++) { aux4.clear(); for (unsigned int l = 0; l < dim4; l++) { //iss.read((char*) &v, sizeof(v)); TRYREAD(iss,v); aux4.push_back(ArrayTime(v)); } aux3.push_back(aux4); } aux2.push_back(aux3); } attribute.push_back(aux2); } return attribute; ; } void Parser::toXMLBase64(vector<Flux> data, const string &name, string &buf){ stringstream oss(stringstream::out | stringstream::binary); string encoded; buf.append("<" + name + "> "); int ndim = 1; int dim1 = data.size(); oss.write((char *)&ndim, sizeof(int)); oss.write((char *)&dim1, sizeof(dim1)); for (unsigned int i = 0; i < data.size(); i++) { double v = data.at(i).get(); oss.write((char *) &v, sizeof(v)); } Base64 b64; b64.encode(oss.str(), encoded, false); buf.append(encoded); buf.append(" </" + name + "> "); } void Parser::toXMLBase64(vector< vector<Flux> > data, const string &name, string &buf){ stringstream oss(stringstream::out | stringstream::binary); string encoded; buf.append("<" + name + "> "); int ndim = 2; int dim1 = data.size(); int dim2 = data.at(0).size(); oss.write((char *)&ndim, sizeof(int)); oss.write((char *)&dim1, sizeof(dim1)); oss.write((char *)&dim2, sizeof(dim2)); for (unsigned int i = 0; i < data.size(); i++) for (unsigned int j = 0; j < data.at(0).size(); j++) { double v = data.at(i).at(j).get(); oss.write((char *) &v, sizeof(v)); } Base64 b64; b64.encode(oss.str(), encoded, false); buf.append(encoded); buf.append(" </" + name + "> ") ; } void Parser::toXMLBase64(vector< vector< vector<Flux> > > data, const string &name, string &buf){ stringstream oss(stringstream::out | stringstream::binary); string encoded; buf.append("<" + name + "> "); int ndim = 3; int dim1 = data.size(); int dim2 = data.at(0).size(); int dim3 = data.at(0).at(0).size(); oss.write((char *)&ndim, sizeof(int)); oss.write((char *)&dim1, sizeof(dim1)); oss.write((char *)&dim2, sizeof(dim2)); oss.write((char *)&dim3, sizeof(dim3)); for (unsigned int i = 0; i < data.size(); i++) for (unsigned int j = 0; j < data.at(0).size(); j++) for (unsigned int k = 0; k < data.at(0).at(0).size(); k++){ double v = data.at(i).at(j).at(k).get(); oss.write((char *) &v, sizeof(v)); } Base64 b64; b64.encode(oss.str(), encoded, false); buf.append(encoded); buf.append(" </" + name + "> ") ; } void Parser::toXMLBase64(vector<vector< vector< vector<Flux> > > >data, const string &name, string &buf){ stringstream oss(stringstream::out | stringstream::binary); string encoded; buf.append("<" + name + "> "); int ndim = 3; int dim1 = data.size(); int dim2 = data.at(0).size(); int dim3 = data.at(0).at(0).size(); int dim4 = data.at(0).at(0).at(0).size(); oss.write((char *)&ndim, sizeof(int)); oss.write((char *)&dim1, sizeof(dim1)); oss.write((char *)&dim2, sizeof(dim2)); oss.write((char *)&dim3, sizeof(dim3)); oss.write((char *)&dim4, sizeof(dim4)); for (unsigned int i = 0; i < data.size(); i++) for (unsigned int j = 0; j < data.at(0).size(); j++) for (unsigned int k = 0; k < data.at(0).at(0).size(); k++) for (unsigned int l = 0; l < data.at(0).at(0).at(0).size(); l++){ double v = data.at(i).at(j).at(k).at(l).get(); oss.write((char *) &v, sizeof(v)); } Base64 b64; b64.encode(oss.str(), encoded, false); buf.append(encoded); buf.append(" </" + name + "> ") ; } #ifndef Double_CPP #define Double_CPP double #endif #define TRYREAD(_stream_, _value_) _stream_.read((char*) &(_value_), sizeof(_value_)); \ if (_stream_.bad()) throw ConversionException("I/O error during read of " + name, tableName); vector<Flux>& Parser::get1DFluxFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector<Flux>& attribute) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } string decodedString; Base64 b64; b64.decode(xmlField, decodedString); stringstream iss(stringstream::in | stringstream::binary); iss.str(decodedString); attribute.clear(); unsigned int ndim = 0; //iss.read((char *)&ndim, sizeof(ndim)); TRYREAD(iss,ndim); unsigned int dim1 = 0; //iss.read((char *)&dim1, sizeof(dim1)); TRYREAD(iss,dim1); if (ndim != 1) { throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 1.", tableName); } attribute.reserve(dim1); Double_CPP v; for (unsigned int i = 0; i < dim1; i++) { //iss.read((char*) &v, sizeof(v)); TRYREAD(iss,v); attribute.push_back(Flux(v)); } return attribute; } vector <vector<Flux> >& Parser::get2DFluxFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector <vector<Flux> >& attribute) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } string decodedString; Base64 b64; b64.decode(xmlField, decodedString); stringstream iss(stringstream::in | stringstream::binary); iss.str(decodedString); attribute.clear(); unsigned int ndim = 0; //iss.read((char *)&ndim, sizeof(ndim)); TRYREAD(iss,ndim); if (ndim != 2) { throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 2.", tableName); } unsigned int dim1 = 0; //iss.read((char *)&dim1, sizeof(dim1)); TRYREAD(iss,dim1); unsigned int dim2 = 0; //iss.read((char *)&dim2, sizeof(dim2)); TRYREAD(iss,dim2); attribute.reserve(dim1); Double_CPP v; vector<Flux> aux2; aux2.reserve(dim2); for (unsigned int i = 0; i < dim1; i++) { aux2.clear(); for (unsigned int j = 0; j < dim2; j++) { //iss.read((char*) &v, sizeof(v)); TRYREAD(iss,v); aux2.push_back(Flux(v)); } attribute.push_back(aux2); } return attribute; } vector <vector <vector<Flux> > >& Parser::get3DFluxFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector <vector <vector<Flux> > >& attribute) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } string decodedString; Base64 b64; b64.decode(xmlField, decodedString); stringstream iss(stringstream::in | stringstream::binary); iss.str(decodedString); attribute.clear(); unsigned int ndim = 0; //iss.read((char *)&ndim, sizeof(ndim)); TRYREAD(iss, ndim); if (ndim != 3) { throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 3.", tableName); } unsigned int dim1 = 0; //iss.read((char *)&dim1, sizeof(dim1)); TRYREAD(iss,dim1); unsigned int dim2 = 0; //iss.read((char *)&dim2, sizeof(dim2)); TRYREAD(iss,dim2); unsigned int dim3 = 0; //iss.read((char *)&dim2, sizeof(dim3)); TRYREAD(iss,dim3); attribute.reserve(dim1); Double_CPP v; vector <vector<Flux> > aux2; vector<Flux> aux3; aux2.reserve(dim2); aux3.reserve(dim3); for (unsigned int i = 0; i < dim1; i++) { aux2.clear(); for (unsigned int j = 0; j < dim2; j++) { aux3.clear(); for (unsigned int k = 0; k < dim3; k++) { //iss.read((char*) &v, sizeof(v)); TRYREAD(iss,v); aux3.push_back(Flux(v)); } aux2.push_back(aux3); } attribute.push_back(aux2); } return attribute; ; } vector <vector <vector <vector<Flux> > > >& Parser::get4DFluxFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector< vector <vector <vector<Flux> > > >& attribute) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } string decodedString; Base64 b64; b64.decode(xmlField, decodedString); stringstream iss(stringstream::in | stringstream::binary); iss.str(decodedString); attribute.clear(); unsigned int ndim = 0; //iss.read((char *)&ndim, sizeof(ndim)); TRYREAD(iss, ndim); if (ndim != 4) { throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 4.", tableName); } unsigned int dim1 = 0; //iss.read((char *)&dim1, sizeof(dim1)); TRYREAD(iss,dim1); unsigned int dim2 = 0; //iss.read((char *)&dim2, sizeof(dim2)); TRYREAD(iss,dim2); unsigned int dim3 = 0; //iss.read((char *)&dim2, sizeof(dim3)); TRYREAD(iss,dim3); unsigned int dim4 = 0; //iss.read((char *)&dim2, sizeof(dim3)); TRYREAD(iss,dim3); attribute.reserve(dim1); Double_CPP v; vector <vector <vector<Flux> > > aux2; vector <vector<Flux> > aux3; vector<Flux> aux4; aux2.reserve(dim2); aux3.reserve(dim3); aux4.reserve(dim4); for (unsigned int i = 0; i < dim1; i++) { aux2.clear(); for (unsigned int j = 0; j < dim2; j++) { aux3.clear(); for (unsigned int k = 0; k < dim3; k++) { aux4.clear(); for (unsigned int l = 0; l < dim4; l++) { //iss.read((char*) &v, sizeof(v)); TRYREAD(iss,v); aux4.push_back(Flux(v)); } aux3.push_back(aux4); } aux2.push_back(aux3); } attribute.push_back(aux2); } return attribute; ; } void Parser::toXMLBase64(vector<Frequency> data, const string &name, string &buf){ stringstream oss(stringstream::out | stringstream::binary); string encoded; buf.append("<" + name + "> "); int ndim = 1; int dim1 = data.size(); oss.write((char *)&ndim, sizeof(int)); oss.write((char *)&dim1, sizeof(dim1)); for (unsigned int i = 0; i < data.size(); i++) { double v = data.at(i).get(); oss.write((char *) &v, sizeof(v)); } Base64 b64; b64.encode(oss.str(), encoded, false); buf.append(encoded); buf.append(" </" + name + "> "); } void Parser::toXMLBase64(vector< vector<Frequency> > data, const string &name, string &buf){ stringstream oss(stringstream::out | stringstream::binary); string encoded; buf.append("<" + name + "> "); int ndim = 2; int dim1 = data.size(); int dim2 = data.at(0).size(); oss.write((char *)&ndim, sizeof(int)); oss.write((char *)&dim1, sizeof(dim1)); oss.write((char *)&dim2, sizeof(dim2)); for (unsigned int i = 0; i < data.size(); i++) for (unsigned int j = 0; j < data.at(0).size(); j++) { double v = data.at(i).at(j).get(); oss.write((char *) &v, sizeof(v)); } Base64 b64; b64.encode(oss.str(), encoded, false); buf.append(encoded); buf.append(" </" + name + "> ") ; } void Parser::toXMLBase64(vector< vector< vector<Frequency> > > data, const string &name, string &buf){ stringstream oss(stringstream::out | stringstream::binary); string encoded; buf.append("<" + name + "> "); int ndim = 3; int dim1 = data.size(); int dim2 = data.at(0).size(); int dim3 = data.at(0).at(0).size(); oss.write((char *)&ndim, sizeof(int)); oss.write((char *)&dim1, sizeof(dim1)); oss.write((char *)&dim2, sizeof(dim2)); oss.write((char *)&dim3, sizeof(dim3)); for (unsigned int i = 0; i < data.size(); i++) for (unsigned int j = 0; j < data.at(0).size(); j++) for (unsigned int k = 0; k < data.at(0).at(0).size(); k++){ double v = data.at(i).at(j).at(k).get(); oss.write((char *) &v, sizeof(v)); } Base64 b64; b64.encode(oss.str(), encoded, false); buf.append(encoded); buf.append(" </" + name + "> ") ; } void Parser::toXMLBase64(vector<vector< vector< vector<Frequency> > > >data, const string &name, string &buf){ stringstream oss(stringstream::out | stringstream::binary); string encoded; buf.append("<" + name + "> "); int ndim = 3; int dim1 = data.size(); int dim2 = data.at(0).size(); int dim3 = data.at(0).at(0).size(); int dim4 = data.at(0).at(0).at(0).size(); oss.write((char *)&ndim, sizeof(int)); oss.write((char *)&dim1, sizeof(dim1)); oss.write((char *)&dim2, sizeof(dim2)); oss.write((char *)&dim3, sizeof(dim3)); oss.write((char *)&dim4, sizeof(dim4)); for (unsigned int i = 0; i < data.size(); i++) for (unsigned int j = 0; j < data.at(0).size(); j++) for (unsigned int k = 0; k < data.at(0).at(0).size(); k++) for (unsigned int l = 0; l < data.at(0).at(0).at(0).size(); l++){ double v = data.at(i).at(j).at(k).at(l).get(); oss.write((char *) &v, sizeof(v)); } Base64 b64; b64.encode(oss.str(), encoded, false); buf.append(encoded); buf.append(" </" + name + "> ") ; } #ifndef Double_CPP #define Double_CPP double #endif #define TRYREAD(_stream_, _value_) _stream_.read((char*) &(_value_), sizeof(_value_)); \ if (_stream_.bad()) throw ConversionException("I/O error during read of " + name, tableName); vector<Frequency>& Parser::get1DFrequencyFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector<Frequency>& attribute) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } string decodedString; Base64 b64; b64.decode(xmlField, decodedString); stringstream iss(stringstream::in | stringstream::binary); iss.str(decodedString); attribute.clear(); unsigned int ndim = 0; //iss.read((char *)&ndim, sizeof(ndim)); TRYREAD(iss,ndim); unsigned int dim1 = 0; //iss.read((char *)&dim1, sizeof(dim1)); TRYREAD(iss,dim1); if (ndim != 1) { throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 1.", tableName); } attribute.reserve(dim1); Double_CPP v; for (unsigned int i = 0; i < dim1; i++) { //iss.read((char*) &v, sizeof(v)); TRYREAD(iss,v); attribute.push_back(Frequency(v)); } return attribute; } vector <vector<Frequency> >& Parser::get2DFrequencyFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector <vector<Frequency> >& attribute) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } string decodedString; Base64 b64; b64.decode(xmlField, decodedString); stringstream iss(stringstream::in | stringstream::binary); iss.str(decodedString); attribute.clear(); unsigned int ndim = 0; //iss.read((char *)&ndim, sizeof(ndim)); TRYREAD(iss,ndim); if (ndim != 2) { throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 2.", tableName); } unsigned int dim1 = 0; //iss.read((char *)&dim1, sizeof(dim1)); TRYREAD(iss,dim1); unsigned int dim2 = 0; //iss.read((char *)&dim2, sizeof(dim2)); TRYREAD(iss,dim2); attribute.reserve(dim1); Double_CPP v; vector<Frequency> aux2; aux2.reserve(dim2); for (unsigned int i = 0; i < dim1; i++) { aux2.clear(); for (unsigned int j = 0; j < dim2; j++) { //iss.read((char*) &v, sizeof(v)); TRYREAD(iss,v); aux2.push_back(Frequency(v)); } attribute.push_back(aux2); } return attribute; } vector <vector <vector<Frequency> > >& Parser::get3DFrequencyFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector <vector <vector<Frequency> > >& attribute) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } string decodedString; Base64 b64; b64.decode(xmlField, decodedString); stringstream iss(stringstream::in | stringstream::binary); iss.str(decodedString); attribute.clear(); unsigned int ndim = 0; //iss.read((char *)&ndim, sizeof(ndim)); TRYREAD(iss, ndim); if (ndim != 3) { throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 3.", tableName); } unsigned int dim1 = 0; //iss.read((char *)&dim1, sizeof(dim1)); TRYREAD(iss,dim1); unsigned int dim2 = 0; //iss.read((char *)&dim2, sizeof(dim2)); TRYREAD(iss,dim2); unsigned int dim3 = 0; //iss.read((char *)&dim2, sizeof(dim3)); TRYREAD(iss,dim3); attribute.reserve(dim1); Double_CPP v; vector <vector<Frequency> > aux2; vector<Frequency> aux3; aux2.reserve(dim2); aux3.reserve(dim3); for (unsigned int i = 0; i < dim1; i++) { aux2.clear(); for (unsigned int j = 0; j < dim2; j++) { aux3.clear(); for (unsigned int k = 0; k < dim3; k++) { //iss.read((char*) &v, sizeof(v)); TRYREAD(iss,v); aux3.push_back(Frequency(v)); } aux2.push_back(aux3); } attribute.push_back(aux2); } return attribute; ; } vector <vector <vector <vector<Frequency> > > >& Parser::get4DFrequencyFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector< vector <vector <vector<Frequency> > > >& attribute) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } string decodedString; Base64 b64; b64.decode(xmlField, decodedString); stringstream iss(stringstream::in | stringstream::binary); iss.str(decodedString); attribute.clear(); unsigned int ndim = 0; //iss.read((char *)&ndim, sizeof(ndim)); TRYREAD(iss, ndim); if (ndim != 4) { throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 4.", tableName); } unsigned int dim1 = 0; //iss.read((char *)&dim1, sizeof(dim1)); TRYREAD(iss,dim1); unsigned int dim2 = 0; //iss.read((char *)&dim2, sizeof(dim2)); TRYREAD(iss,dim2); unsigned int dim3 = 0; //iss.read((char *)&dim2, sizeof(dim3)); TRYREAD(iss,dim3); unsigned int dim4 = 0; //iss.read((char *)&dim2, sizeof(dim3)); TRYREAD(iss,dim3); attribute.reserve(dim1); Double_CPP v; vector <vector <vector<Frequency> > > aux2; vector <vector<Frequency> > aux3; vector<Frequency> aux4; aux2.reserve(dim2); aux3.reserve(dim3); aux4.reserve(dim4); for (unsigned int i = 0; i < dim1; i++) { aux2.clear(); for (unsigned int j = 0; j < dim2; j++) { aux3.clear(); for (unsigned int k = 0; k < dim3; k++) { aux4.clear(); for (unsigned int l = 0; l < dim4; l++) { //iss.read((char*) &v, sizeof(v)); TRYREAD(iss,v); aux4.push_back(Frequency(v)); } aux3.push_back(aux4); } aux2.push_back(aux3); } attribute.push_back(aux2); } return attribute; ; } void Parser::toXMLBase64(vector<Humidity> data, const string &name, string &buf){ stringstream oss(stringstream::out | stringstream::binary); string encoded; buf.append("<" + name + "> "); int ndim = 1; int dim1 = data.size(); oss.write((char *)&ndim, sizeof(int)); oss.write((char *)&dim1, sizeof(dim1)); for (unsigned int i = 0; i < data.size(); i++) { double v = data.at(i).get(); oss.write((char *) &v, sizeof(v)); } Base64 b64; b64.encode(oss.str(), encoded, false); buf.append(encoded); buf.append(" </" + name + "> "); } void Parser::toXMLBase64(vector< vector<Humidity> > data, const string &name, string &buf){ stringstream oss(stringstream::out | stringstream::binary); string encoded; buf.append("<" + name + "> "); int ndim = 2; int dim1 = data.size(); int dim2 = data.at(0).size(); oss.write((char *)&ndim, sizeof(int)); oss.write((char *)&dim1, sizeof(dim1)); oss.write((char *)&dim2, sizeof(dim2)); for (unsigned int i = 0; i < data.size(); i++) for (unsigned int j = 0; j < data.at(0).size(); j++) { double v = data.at(i).at(j).get(); oss.write((char *) &v, sizeof(v)); } Base64 b64; b64.encode(oss.str(), encoded, false); buf.append(encoded); buf.append(" </" + name + "> ") ; } void Parser::toXMLBase64(vector< vector< vector<Humidity> > > data, const string &name, string &buf){ stringstream oss(stringstream::out | stringstream::binary); string encoded; buf.append("<" + name + "> "); int ndim = 3; int dim1 = data.size(); int dim2 = data.at(0).size(); int dim3 = data.at(0).at(0).size(); oss.write((char *)&ndim, sizeof(int)); oss.write((char *)&dim1, sizeof(dim1)); oss.write((char *)&dim2, sizeof(dim2)); oss.write((char *)&dim3, sizeof(dim3)); for (unsigned int i = 0; i < data.size(); i++) for (unsigned int j = 0; j < data.at(0).size(); j++) for (unsigned int k = 0; k < data.at(0).at(0).size(); k++){ double v = data.at(i).at(j).at(k).get(); oss.write((char *) &v, sizeof(v)); } Base64 b64; b64.encode(oss.str(), encoded, false); buf.append(encoded); buf.append(" </" + name + "> ") ; } void Parser::toXMLBase64(vector<vector< vector< vector<Humidity> > > >data, const string &name, string &buf){ stringstream oss(stringstream::out | stringstream::binary); string encoded; buf.append("<" + name + "> "); int ndim = 3; int dim1 = data.size(); int dim2 = data.at(0).size(); int dim3 = data.at(0).at(0).size(); int dim4 = data.at(0).at(0).at(0).size(); oss.write((char *)&ndim, sizeof(int)); oss.write((char *)&dim1, sizeof(dim1)); oss.write((char *)&dim2, sizeof(dim2)); oss.write((char *)&dim3, sizeof(dim3)); oss.write((char *)&dim4, sizeof(dim4)); for (unsigned int i = 0; i < data.size(); i++) for (unsigned int j = 0; j < data.at(0).size(); j++) for (unsigned int k = 0; k < data.at(0).at(0).size(); k++) for (unsigned int l = 0; l < data.at(0).at(0).at(0).size(); l++){ double v = data.at(i).at(j).at(k).at(l).get(); oss.write((char *) &v, sizeof(v)); } Base64 b64; b64.encode(oss.str(), encoded, false); buf.append(encoded); buf.append(" </" + name + "> ") ; } #ifndef Double_CPP #define Double_CPP double #endif #define TRYREAD(_stream_, _value_) _stream_.read((char*) &(_value_), sizeof(_value_)); \ if (_stream_.bad()) throw ConversionException("I/O error during read of " + name, tableName); vector<Humidity>& Parser::get1DHumidityFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector<Humidity>& attribute) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } string decodedString; Base64 b64; b64.decode(xmlField, decodedString); stringstream iss(stringstream::in | stringstream::binary); iss.str(decodedString); attribute.clear(); unsigned int ndim = 0; //iss.read((char *)&ndim, sizeof(ndim)); TRYREAD(iss,ndim); unsigned int dim1 = 0; //iss.read((char *)&dim1, sizeof(dim1)); TRYREAD(iss,dim1); if (ndim != 1) { throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 1.", tableName); } attribute.reserve(dim1); Double_CPP v; for (unsigned int i = 0; i < dim1; i++) { //iss.read((char*) &v, sizeof(v)); TRYREAD(iss,v); attribute.push_back(Humidity(v)); } return attribute; } vector <vector<Humidity> >& Parser::get2DHumidityFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector <vector<Humidity> >& attribute) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } string decodedString; Base64 b64; b64.decode(xmlField, decodedString); stringstream iss(stringstream::in | stringstream::binary); iss.str(decodedString); attribute.clear(); unsigned int ndim = 0; //iss.read((char *)&ndim, sizeof(ndim)); TRYREAD(iss,ndim); if (ndim != 2) { throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 2.", tableName); } unsigned int dim1 = 0; //iss.read((char *)&dim1, sizeof(dim1)); TRYREAD(iss,dim1); unsigned int dim2 = 0; //iss.read((char *)&dim2, sizeof(dim2)); TRYREAD(iss,dim2); attribute.reserve(dim1); Double_CPP v; vector<Humidity> aux2; aux2.reserve(dim2); for (unsigned int i = 0; i < dim1; i++) { aux2.clear(); for (unsigned int j = 0; j < dim2; j++) { //iss.read((char*) &v, sizeof(v)); TRYREAD(iss,v); aux2.push_back(Humidity(v)); } attribute.push_back(aux2); } return attribute; } vector <vector <vector<Humidity> > >& Parser::get3DHumidityFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector <vector <vector<Humidity> > >& attribute) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } string decodedString; Base64 b64; b64.decode(xmlField, decodedString); stringstream iss(stringstream::in | stringstream::binary); iss.str(decodedString); attribute.clear(); unsigned int ndim = 0; //iss.read((char *)&ndim, sizeof(ndim)); TRYREAD(iss, ndim); if (ndim != 3) { throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 3.", tableName); } unsigned int dim1 = 0; //iss.read((char *)&dim1, sizeof(dim1)); TRYREAD(iss,dim1); unsigned int dim2 = 0; //iss.read((char *)&dim2, sizeof(dim2)); TRYREAD(iss,dim2); unsigned int dim3 = 0; //iss.read((char *)&dim2, sizeof(dim3)); TRYREAD(iss,dim3); attribute.reserve(dim1); Double_CPP v; vector <vector<Humidity> > aux2; vector<Humidity> aux3; aux2.reserve(dim2); aux3.reserve(dim3); for (unsigned int i = 0; i < dim1; i++) { aux2.clear(); for (unsigned int j = 0; j < dim2; j++) { aux3.clear(); for (unsigned int k = 0; k < dim3; k++) { //iss.read((char*) &v, sizeof(v)); TRYREAD(iss,v); aux3.push_back(Humidity(v)); } aux2.push_back(aux3); } attribute.push_back(aux2); } return attribute; ; } vector <vector <vector <vector<Humidity> > > >& Parser::get4DHumidityFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector< vector <vector <vector<Humidity> > > >& attribute) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } string decodedString; Base64 b64; b64.decode(xmlField, decodedString); stringstream iss(stringstream::in | stringstream::binary); iss.str(decodedString); attribute.clear(); unsigned int ndim = 0; //iss.read((char *)&ndim, sizeof(ndim)); TRYREAD(iss, ndim); if (ndim != 4) { throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 4.", tableName); } unsigned int dim1 = 0; //iss.read((char *)&dim1, sizeof(dim1)); TRYREAD(iss,dim1); unsigned int dim2 = 0; //iss.read((char *)&dim2, sizeof(dim2)); TRYREAD(iss,dim2); unsigned int dim3 = 0; //iss.read((char *)&dim2, sizeof(dim3)); TRYREAD(iss,dim3); unsigned int dim4 = 0; //iss.read((char *)&dim2, sizeof(dim3)); TRYREAD(iss,dim3); attribute.reserve(dim1); Double_CPP v; vector <vector <vector<Humidity> > > aux2; vector <vector<Humidity> > aux3; vector<Humidity> aux4; aux2.reserve(dim2); aux3.reserve(dim3); aux4.reserve(dim4); for (unsigned int i = 0; i < dim1; i++) { aux2.clear(); for (unsigned int j = 0; j < dim2; j++) { aux3.clear(); for (unsigned int k = 0; k < dim3; k++) { aux4.clear(); for (unsigned int l = 0; l < dim4; l++) { //iss.read((char*) &v, sizeof(v)); TRYREAD(iss,v); aux4.push_back(Humidity(v)); } aux3.push_back(aux4); } aux2.push_back(aux3); } attribute.push_back(aux2); } return attribute; ; } void Parser::toXMLBase64(vector<Interval> data, const string &name, string &buf){ stringstream oss(stringstream::out | stringstream::binary); string encoded; buf.append("<" + name + "> "); int ndim = 1; int dim1 = data.size(); oss.write((char *)&ndim, sizeof(int)); oss.write((char *)&dim1, sizeof(dim1)); for (unsigned int i = 0; i < data.size(); i++) { long v = data.at(i).get(); oss.write((char *) &v, sizeof(v)); } Base64 b64; b64.encode(oss.str(), encoded, false); buf.append(encoded); buf.append(" </" + name + "> "); } void Parser::toXMLBase64(vector< vector<Interval> > data, const string &name, string &buf){ stringstream oss(stringstream::out | stringstream::binary); string encoded; buf.append("<" + name + "> "); int ndim = 2; int dim1 = data.size(); int dim2 = data.at(0).size(); oss.write((char *)&ndim, sizeof(int)); oss.write((char *)&dim1, sizeof(dim1)); oss.write((char *)&dim2, sizeof(dim2)); for (unsigned int i = 0; i < data.size(); i++) for (unsigned int j = 0; j < data.at(0).size(); j++) { long v = data.at(i).at(j).get(); oss.write((char *) &v, sizeof(v)); } Base64 b64; b64.encode(oss.str(), encoded, false); buf.append(encoded); buf.append(" </" + name + "> ") ; } void Parser::toXMLBase64(vector< vector< vector<Interval> > > data, const string &name, string &buf){ stringstream oss(stringstream::out | stringstream::binary); string encoded; buf.append("<" + name + "> "); int ndim = 3; int dim1 = data.size(); int dim2 = data.at(0).size(); int dim3 = data.at(0).at(0).size(); oss.write((char *)&ndim, sizeof(int)); oss.write((char *)&dim1, sizeof(dim1)); oss.write((char *)&dim2, sizeof(dim2)); oss.write((char *)&dim3, sizeof(dim3)); for (unsigned int i = 0; i < data.size(); i++) for (unsigned int j = 0; j < data.at(0).size(); j++) for (unsigned int k = 0; k < data.at(0).at(0).size(); k++){ long v = data.at(i).at(j).at(k).get(); oss.write((char *) &v, sizeof(v)); } Base64 b64; b64.encode(oss.str(), encoded, false); buf.append(encoded); buf.append(" </" + name + "> ") ; } void Parser::toXMLBase64(vector<vector< vector< vector<Interval> > > >data, const string &name, string &buf){ stringstream oss(stringstream::out | stringstream::binary); string encoded; buf.append("<" + name + "> "); int ndim = 3; int dim1 = data.size(); int dim2 = data.at(0).size(); int dim3 = data.at(0).at(0).size(); int dim4 = data.at(0).at(0).at(0).size(); oss.write((char *)&ndim, sizeof(int)); oss.write((char *)&dim1, sizeof(dim1)); oss.write((char *)&dim2, sizeof(dim2)); oss.write((char *)&dim3, sizeof(dim3)); oss.write((char *)&dim4, sizeof(dim4)); for (unsigned int i = 0; i < data.size(); i++) for (unsigned int j = 0; j < data.at(0).size(); j++) for (unsigned int k = 0; k < data.at(0).at(0).size(); k++) for (unsigned int l = 0; l < data.at(0).at(0).at(0).size(); l++){ long v = data.at(i).at(j).at(k).at(l).get(); oss.write((char *) &v, sizeof(v)); } Base64 b64; b64.encode(oss.str(), encoded, false); buf.append(encoded); buf.append(" </" + name + "> ") ; } #ifndef Long_CPP #define Long_CPP int64_t #endif #define TRYREAD(_stream_, _value_) _stream_.read((char*) &(_value_), sizeof(_value_)); \ if (_stream_.bad()) throw ConversionException("I/O error during read of " + name, tableName); vector<Interval>& Parser::get1DIntervalFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector<Interval>& attribute) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } string decodedString; Base64 b64; b64.decode(xmlField, decodedString); stringstream iss(stringstream::in | stringstream::binary); iss.str(decodedString); attribute.clear(); unsigned int ndim = 0; //iss.read((char *)&ndim, sizeof(ndim)); TRYREAD(iss,ndim); unsigned int dim1 = 0; //iss.read((char *)&dim1, sizeof(dim1)); TRYREAD(iss,dim1); if (ndim != 1) { throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 1.", tableName); } attribute.reserve(dim1); Long_CPP v; for (unsigned int i = 0; i < dim1; i++) { //iss.read((char*) &v, sizeof(v)); TRYREAD(iss,v); attribute.push_back(Interval(v)); } return attribute; } vector <vector<Interval> >& Parser::get2DIntervalFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector <vector<Interval> >& attribute) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } string decodedString; Base64 b64; b64.decode(xmlField, decodedString); stringstream iss(stringstream::in | stringstream::binary); iss.str(decodedString); attribute.clear(); unsigned int ndim = 0; //iss.read((char *)&ndim, sizeof(ndim)); TRYREAD(iss,ndim); if (ndim != 2) { throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 2.", tableName); } unsigned int dim1 = 0; //iss.read((char *)&dim1, sizeof(dim1)); TRYREAD(iss,dim1); unsigned int dim2 = 0; //iss.read((char *)&dim2, sizeof(dim2)); TRYREAD(iss,dim2); attribute.reserve(dim1); Long_CPP v; vector<Interval> aux2; aux2.reserve(dim2); for (unsigned int i = 0; i < dim1; i++) { aux2.clear(); for (unsigned int j = 0; j < dim2; j++) { //iss.read((char*) &v, sizeof(v)); TRYREAD(iss,v); aux2.push_back(Interval(v)); } attribute.push_back(aux2); } return attribute; } vector <vector <vector<Interval> > >& Parser::get3DIntervalFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector <vector <vector<Interval> > >& attribute) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } string decodedString; Base64 b64; b64.decode(xmlField, decodedString); stringstream iss(stringstream::in | stringstream::binary); iss.str(decodedString); attribute.clear(); unsigned int ndim = 0; //iss.read((char *)&ndim, sizeof(ndim)); TRYREAD(iss, ndim); if (ndim != 3) { throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 3.", tableName); } unsigned int dim1 = 0; //iss.read((char *)&dim1, sizeof(dim1)); TRYREAD(iss,dim1); unsigned int dim2 = 0; //iss.read((char *)&dim2, sizeof(dim2)); TRYREAD(iss,dim2); unsigned int dim3 = 0; //iss.read((char *)&dim2, sizeof(dim3)); TRYREAD(iss,dim3); attribute.reserve(dim1); Long_CPP v; vector <vector<Interval> > aux2; vector<Interval> aux3; aux2.reserve(dim2); aux3.reserve(dim3); for (unsigned int i = 0; i < dim1; i++) { aux2.clear(); for (unsigned int j = 0; j < dim2; j++) { aux3.clear(); for (unsigned int k = 0; k < dim3; k++) { //iss.read((char*) &v, sizeof(v)); TRYREAD(iss,v); aux3.push_back(Interval(v)); } aux2.push_back(aux3); } attribute.push_back(aux2); } return attribute; ; } vector <vector <vector <vector<Interval> > > >& Parser::get4DIntervalFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector< vector <vector <vector<Interval> > > >& attribute) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } string decodedString; Base64 b64; b64.decode(xmlField, decodedString); stringstream iss(stringstream::in | stringstream::binary); iss.str(decodedString); attribute.clear(); unsigned int ndim = 0; //iss.read((char *)&ndim, sizeof(ndim)); TRYREAD(iss, ndim); if (ndim != 4) { throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 4.", tableName); } unsigned int dim1 = 0; //iss.read((char *)&dim1, sizeof(dim1)); TRYREAD(iss,dim1); unsigned int dim2 = 0; //iss.read((char *)&dim2, sizeof(dim2)); TRYREAD(iss,dim2); unsigned int dim3 = 0; //iss.read((char *)&dim2, sizeof(dim3)); TRYREAD(iss,dim3); unsigned int dim4 = 0; //iss.read((char *)&dim2, sizeof(dim3)); TRYREAD(iss,dim3); attribute.reserve(dim1); Long_CPP v; vector <vector <vector<Interval> > > aux2; vector <vector<Interval> > aux3; vector<Interval> aux4; aux2.reserve(dim2); aux3.reserve(dim3); aux4.reserve(dim4); for (unsigned int i = 0; i < dim1; i++) { aux2.clear(); for (unsigned int j = 0; j < dim2; j++) { aux3.clear(); for (unsigned int k = 0; k < dim3; k++) { aux4.clear(); for (unsigned int l = 0; l < dim4; l++) { //iss.read((char*) &v, sizeof(v)); TRYREAD(iss,v); aux4.push_back(Interval(v)); } aux3.push_back(aux4); } aux2.push_back(aux3); } attribute.push_back(aux2); } return attribute; ; } void Parser::toXMLBase64(vector<Length> data, const string &name, string &buf){ stringstream oss(stringstream::out | stringstream::binary); string encoded; buf.append("<" + name + "> "); int ndim = 1; int dim1 = data.size(); oss.write((char *)&ndim, sizeof(int)); oss.write((char *)&dim1, sizeof(dim1)); for (unsigned int i = 0; i < data.size(); i++) { double v = data.at(i).get(); oss.write((char *) &v, sizeof(v)); } Base64 b64; b64.encode(oss.str(), encoded, false); buf.append(encoded); buf.append(" </" + name + "> "); } void Parser::toXMLBase64(vector< vector<Length> > data, const string &name, string &buf){ stringstream oss(stringstream::out | stringstream::binary); string encoded; buf.append("<" + name + "> "); int ndim = 2; int dim1 = data.size(); int dim2 = data.at(0).size(); oss.write((char *)&ndim, sizeof(int)); oss.write((char *)&dim1, sizeof(dim1)); oss.write((char *)&dim2, sizeof(dim2)); for (unsigned int i = 0; i < data.size(); i++) for (unsigned int j = 0; j < data.at(0).size(); j++) { double v = data.at(i).at(j).get(); oss.write((char *) &v, sizeof(v)); } Base64 b64; b64.encode(oss.str(), encoded, false); buf.append(encoded); buf.append(" </" + name + "> ") ; } void Parser::toXMLBase64(vector< vector< vector<Length> > > data, const string &name, string &buf){ stringstream oss(stringstream::out | stringstream::binary); string encoded; buf.append("<" + name + "> "); int ndim = 3; int dim1 = data.size(); int dim2 = data.at(0).size(); int dim3 = data.at(0).at(0).size(); oss.write((char *)&ndim, sizeof(int)); oss.write((char *)&dim1, sizeof(dim1)); oss.write((char *)&dim2, sizeof(dim2)); oss.write((char *)&dim3, sizeof(dim3)); for (unsigned int i = 0; i < data.size(); i++) for (unsigned int j = 0; j < data.at(0).size(); j++) for (unsigned int k = 0; k < data.at(0).at(0).size(); k++){ double v = data.at(i).at(j).at(k).get(); oss.write((char *) &v, sizeof(v)); } Base64 b64; b64.encode(oss.str(), encoded, false); buf.append(encoded); buf.append(" </" + name + "> ") ; } void Parser::toXMLBase64(vector<vector< vector< vector<Length> > > >data, const string &name, string &buf){ stringstream oss(stringstream::out | stringstream::binary); string encoded; buf.append("<" + name + "> "); int ndim = 3; int dim1 = data.size(); int dim2 = data.at(0).size(); int dim3 = data.at(0).at(0).size(); int dim4 = data.at(0).at(0).at(0).size(); oss.write((char *)&ndim, sizeof(int)); oss.write((char *)&dim1, sizeof(dim1)); oss.write((char *)&dim2, sizeof(dim2)); oss.write((char *)&dim3, sizeof(dim3)); oss.write((char *)&dim4, sizeof(dim4)); for (unsigned int i = 0; i < data.size(); i++) for (unsigned int j = 0; j < data.at(0).size(); j++) for (unsigned int k = 0; k < data.at(0).at(0).size(); k++) for (unsigned int l = 0; l < data.at(0).at(0).at(0).size(); l++){ double v = data.at(i).at(j).at(k).at(l).get(); oss.write((char *) &v, sizeof(v)); } Base64 b64; b64.encode(oss.str(), encoded, false); buf.append(encoded); buf.append(" </" + name + "> ") ; } #ifndef Double_CPP #define Double_CPP double #endif #define TRYREAD(_stream_, _value_) _stream_.read((char*) &(_value_), sizeof(_value_)); \ if (_stream_.bad()) throw ConversionException("I/O error during read of " + name, tableName); vector<Length>& Parser::get1DLengthFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector<Length>& attribute) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } string decodedString; Base64 b64; b64.decode(xmlField, decodedString); stringstream iss(stringstream::in | stringstream::binary); iss.str(decodedString); attribute.clear(); unsigned int ndim = 0; //iss.read((char *)&ndim, sizeof(ndim)); TRYREAD(iss,ndim); unsigned int dim1 = 0; //iss.read((char *)&dim1, sizeof(dim1)); TRYREAD(iss,dim1); if (ndim != 1) { throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 1.", tableName); } attribute.reserve(dim1); Double_CPP v; for (unsigned int i = 0; i < dim1; i++) { //iss.read((char*) &v, sizeof(v)); TRYREAD(iss,v); attribute.push_back(Length(v)); } return attribute; } vector <vector<Length> >& Parser::get2DLengthFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector <vector<Length> >& attribute) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } string decodedString; Base64 b64; b64.decode(xmlField, decodedString); stringstream iss(stringstream::in | stringstream::binary); iss.str(decodedString); attribute.clear(); unsigned int ndim = 0; //iss.read((char *)&ndim, sizeof(ndim)); TRYREAD(iss,ndim); if (ndim != 2) { throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 2.", tableName); } unsigned int dim1 = 0; //iss.read((char *)&dim1, sizeof(dim1)); TRYREAD(iss,dim1); unsigned int dim2 = 0; //iss.read((char *)&dim2, sizeof(dim2)); TRYREAD(iss,dim2); attribute.reserve(dim1); Double_CPP v; vector<Length> aux2; aux2.reserve(dim2); for (unsigned int i = 0; i < dim1; i++) { aux2.clear(); for (unsigned int j = 0; j < dim2; j++) { //iss.read((char*) &v, sizeof(v)); TRYREAD(iss,v); aux2.push_back(Length(v)); } attribute.push_back(aux2); } return attribute; } vector <vector <vector<Length> > >& Parser::get3DLengthFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector <vector <vector<Length> > >& attribute) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } string decodedString; Base64 b64; b64.decode(xmlField, decodedString); stringstream iss(stringstream::in | stringstream::binary); iss.str(decodedString); attribute.clear(); unsigned int ndim = 0; //iss.read((char *)&ndim, sizeof(ndim)); TRYREAD(iss, ndim); if (ndim != 3) { throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 3.", tableName); } unsigned int dim1 = 0; //iss.read((char *)&dim1, sizeof(dim1)); TRYREAD(iss,dim1); unsigned int dim2 = 0; //iss.read((char *)&dim2, sizeof(dim2)); TRYREAD(iss,dim2); unsigned int dim3 = 0; //iss.read((char *)&dim2, sizeof(dim3)); TRYREAD(iss,dim3); attribute.reserve(dim1); Double_CPP v; vector <vector<Length> > aux2; vector<Length> aux3; aux2.reserve(dim2); aux3.reserve(dim3); for (unsigned int i = 0; i < dim1; i++) { aux2.clear(); for (unsigned int j = 0; j < dim2; j++) { aux3.clear(); for (unsigned int k = 0; k < dim3; k++) { //iss.read((char*) &v, sizeof(v)); TRYREAD(iss,v); aux3.push_back(Length(v)); } aux2.push_back(aux3); } attribute.push_back(aux2); } return attribute; ; } vector <vector <vector <vector<Length> > > >& Parser::get4DLengthFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector< vector <vector <vector<Length> > > >& attribute) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } string decodedString; Base64 b64; b64.decode(xmlField, decodedString); stringstream iss(stringstream::in | stringstream::binary); iss.str(decodedString); attribute.clear(); unsigned int ndim = 0; //iss.read((char *)&ndim, sizeof(ndim)); TRYREAD(iss, ndim); if (ndim != 4) { throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 4.", tableName); } unsigned int dim1 = 0; //iss.read((char *)&dim1, sizeof(dim1)); TRYREAD(iss,dim1); unsigned int dim2 = 0; //iss.read((char *)&dim2, sizeof(dim2)); TRYREAD(iss,dim2); unsigned int dim3 = 0; //iss.read((char *)&dim2, sizeof(dim3)); TRYREAD(iss,dim3); unsigned int dim4 = 0; //iss.read((char *)&dim2, sizeof(dim3)); TRYREAD(iss,dim3); attribute.reserve(dim1); Double_CPP v; vector <vector <vector<Length> > > aux2; vector <vector<Length> > aux3; vector<Length> aux4; aux2.reserve(dim2); aux3.reserve(dim3); aux4.reserve(dim4); for (unsigned int i = 0; i < dim1; i++) { aux2.clear(); for (unsigned int j = 0; j < dim2; j++) { aux3.clear(); for (unsigned int k = 0; k < dim3; k++) { aux4.clear(); for (unsigned int l = 0; l < dim4; l++) { //iss.read((char*) &v, sizeof(v)); TRYREAD(iss,v); aux4.push_back(Length(v)); } aux3.push_back(aux4); } aux2.push_back(aux3); } attribute.push_back(aux2); } return attribute; ; } void Parser::toXMLBase64(vector<Pressure> data, const string &name, string &buf){ stringstream oss(stringstream::out | stringstream::binary); string encoded; buf.append("<" + name + "> "); int ndim = 1; int dim1 = data.size(); oss.write((char *)&ndim, sizeof(int)); oss.write((char *)&dim1, sizeof(dim1)); for (unsigned int i = 0; i < data.size(); i++) { double v = data.at(i).get(); oss.write((char *) &v, sizeof(v)); } Base64 b64; b64.encode(oss.str(), encoded, false); buf.append(encoded); buf.append(" </" + name + "> "); } void Parser::toXMLBase64(vector< vector<Pressure> > data, const string &name, string &buf){ stringstream oss(stringstream::out | stringstream::binary); string encoded; buf.append("<" + name + "> "); int ndim = 2; int dim1 = data.size(); int dim2 = data.at(0).size(); oss.write((char *)&ndim, sizeof(int)); oss.write((char *)&dim1, sizeof(dim1)); oss.write((char *)&dim2, sizeof(dim2)); for (unsigned int i = 0; i < data.size(); i++) for (unsigned int j = 0; j < data.at(0).size(); j++) { double v = data.at(i).at(j).get(); oss.write((char *) &v, sizeof(v)); } Base64 b64; b64.encode(oss.str(), encoded, false); buf.append(encoded); buf.append(" </" + name + "> ") ; } void Parser::toXMLBase64(vector< vector< vector<Pressure> > > data, const string &name, string &buf){ stringstream oss(stringstream::out | stringstream::binary); string encoded; buf.append("<" + name + "> "); int ndim = 3; int dim1 = data.size(); int dim2 = data.at(0).size(); int dim3 = data.at(0).at(0).size(); oss.write((char *)&ndim, sizeof(int)); oss.write((char *)&dim1, sizeof(dim1)); oss.write((char *)&dim2, sizeof(dim2)); oss.write((char *)&dim3, sizeof(dim3)); for (unsigned int i = 0; i < data.size(); i++) for (unsigned int j = 0; j < data.at(0).size(); j++) for (unsigned int k = 0; k < data.at(0).at(0).size(); k++){ double v = data.at(i).at(j).at(k).get(); oss.write((char *) &v, sizeof(v)); } Base64 b64; b64.encode(oss.str(), encoded, false); buf.append(encoded); buf.append(" </" + name + "> ") ; } void Parser::toXMLBase64(vector<vector< vector< vector<Pressure> > > >data, const string &name, string &buf){ stringstream oss(stringstream::out | stringstream::binary); string encoded; buf.append("<" + name + "> "); int ndim = 3; int dim1 = data.size(); int dim2 = data.at(0).size(); int dim3 = data.at(0).at(0).size(); int dim4 = data.at(0).at(0).at(0).size(); oss.write((char *)&ndim, sizeof(int)); oss.write((char *)&dim1, sizeof(dim1)); oss.write((char *)&dim2, sizeof(dim2)); oss.write((char *)&dim3, sizeof(dim3)); oss.write((char *)&dim4, sizeof(dim4)); for (unsigned int i = 0; i < data.size(); i++) for (unsigned int j = 0; j < data.at(0).size(); j++) for (unsigned int k = 0; k < data.at(0).at(0).size(); k++) for (unsigned int l = 0; l < data.at(0).at(0).at(0).size(); l++){ double v = data.at(i).at(j).at(k).at(l).get(); oss.write((char *) &v, sizeof(v)); } Base64 b64; b64.encode(oss.str(), encoded, false); buf.append(encoded); buf.append(" </" + name + "> ") ; } #ifndef Double_CPP #define Double_CPP double #endif #define TRYREAD(_stream_, _value_) _stream_.read((char*) &(_value_), sizeof(_value_)); \ if (_stream_.bad()) throw ConversionException("I/O error during read of " + name, tableName); vector<Pressure>& Parser::get1DPressureFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector<Pressure>& attribute) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } string decodedString; Base64 b64; b64.decode(xmlField, decodedString); stringstream iss(stringstream::in | stringstream::binary); iss.str(decodedString); attribute.clear(); unsigned int ndim = 0; //iss.read((char *)&ndim, sizeof(ndim)); TRYREAD(iss,ndim); unsigned int dim1 = 0; //iss.read((char *)&dim1, sizeof(dim1)); TRYREAD(iss,dim1); if (ndim != 1) { throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 1.", tableName); } attribute.reserve(dim1); Double_CPP v; for (unsigned int i = 0; i < dim1; i++) { //iss.read((char*) &v, sizeof(v)); TRYREAD(iss,v); attribute.push_back(Pressure(v)); } return attribute; } vector <vector<Pressure> >& Parser::get2DPressureFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector <vector<Pressure> >& attribute) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } string decodedString; Base64 b64; b64.decode(xmlField, decodedString); stringstream iss(stringstream::in | stringstream::binary); iss.str(decodedString); attribute.clear(); unsigned int ndim = 0; //iss.read((char *)&ndim, sizeof(ndim)); TRYREAD(iss,ndim); if (ndim != 2) { throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 2.", tableName); } unsigned int dim1 = 0; //iss.read((char *)&dim1, sizeof(dim1)); TRYREAD(iss,dim1); unsigned int dim2 = 0; //iss.read((char *)&dim2, sizeof(dim2)); TRYREAD(iss,dim2); attribute.reserve(dim1); Double_CPP v; vector<Pressure> aux2; aux2.reserve(dim2); for (unsigned int i = 0; i < dim1; i++) { aux2.clear(); for (unsigned int j = 0; j < dim2; j++) { //iss.read((char*) &v, sizeof(v)); TRYREAD(iss,v); aux2.push_back(Pressure(v)); } attribute.push_back(aux2); } return attribute; } vector <vector <vector<Pressure> > >& Parser::get3DPressureFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector <vector <vector<Pressure> > >& attribute) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } string decodedString; Base64 b64; b64.decode(xmlField, decodedString); stringstream iss(stringstream::in | stringstream::binary); iss.str(decodedString); attribute.clear(); unsigned int ndim = 0; //iss.read((char *)&ndim, sizeof(ndim)); TRYREAD(iss, ndim); if (ndim != 3) { throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 3.", tableName); } unsigned int dim1 = 0; //iss.read((char *)&dim1, sizeof(dim1)); TRYREAD(iss,dim1); unsigned int dim2 = 0; //iss.read((char *)&dim2, sizeof(dim2)); TRYREAD(iss,dim2); unsigned int dim3 = 0; //iss.read((char *)&dim2, sizeof(dim3)); TRYREAD(iss,dim3); attribute.reserve(dim1); Double_CPP v; vector <vector<Pressure> > aux2; vector<Pressure> aux3; aux2.reserve(dim2); aux3.reserve(dim3); for (unsigned int i = 0; i < dim1; i++) { aux2.clear(); for (unsigned int j = 0; j < dim2; j++) { aux3.clear(); for (unsigned int k = 0; k < dim3; k++) { //iss.read((char*) &v, sizeof(v)); TRYREAD(iss,v); aux3.push_back(Pressure(v)); } aux2.push_back(aux3); } attribute.push_back(aux2); } return attribute; ; } vector <vector <vector <vector<Pressure> > > >& Parser::get4DPressureFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector< vector <vector <vector<Pressure> > > >& attribute) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } string decodedString; Base64 b64; b64.decode(xmlField, decodedString); stringstream iss(stringstream::in | stringstream::binary); iss.str(decodedString); attribute.clear(); unsigned int ndim = 0; //iss.read((char *)&ndim, sizeof(ndim)); TRYREAD(iss, ndim); if (ndim != 4) { throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 4.", tableName); } unsigned int dim1 = 0; //iss.read((char *)&dim1, sizeof(dim1)); TRYREAD(iss,dim1); unsigned int dim2 = 0; //iss.read((char *)&dim2, sizeof(dim2)); TRYREAD(iss,dim2); unsigned int dim3 = 0; //iss.read((char *)&dim2, sizeof(dim3)); TRYREAD(iss,dim3); unsigned int dim4 = 0; //iss.read((char *)&dim2, sizeof(dim3)); TRYREAD(iss,dim3); attribute.reserve(dim1); Double_CPP v; vector <vector <vector<Pressure> > > aux2; vector <vector<Pressure> > aux3; vector<Pressure> aux4; aux2.reserve(dim2); aux3.reserve(dim3); aux4.reserve(dim4); for (unsigned int i = 0; i < dim1; i++) { aux2.clear(); for (unsigned int j = 0; j < dim2; j++) { aux3.clear(); for (unsigned int k = 0; k < dim3; k++) { aux4.clear(); for (unsigned int l = 0; l < dim4; l++) { //iss.read((char*) &v, sizeof(v)); TRYREAD(iss,v); aux4.push_back(Pressure(v)); } aux3.push_back(aux4); } aux2.push_back(aux3); } attribute.push_back(aux2); } return attribute; ; } void Parser::toXMLBase64(vector<Speed> data, const string &name, string &buf){ stringstream oss(stringstream::out | stringstream::binary); string encoded; buf.append("<" + name + "> "); int ndim = 1; int dim1 = data.size(); oss.write((char *)&ndim, sizeof(int)); oss.write((char *)&dim1, sizeof(dim1)); for (unsigned int i = 0; i < data.size(); i++) { double v = data.at(i).get(); oss.write((char *) &v, sizeof(v)); } Base64 b64; b64.encode(oss.str(), encoded, false); buf.append(encoded); buf.append(" </" + name + "> "); } void Parser::toXMLBase64(vector< vector<Speed> > data, const string &name, string &buf){ stringstream oss(stringstream::out | stringstream::binary); string encoded; buf.append("<" + name + "> "); int ndim = 2; int dim1 = data.size(); int dim2 = data.at(0).size(); oss.write((char *)&ndim, sizeof(int)); oss.write((char *)&dim1, sizeof(dim1)); oss.write((char *)&dim2, sizeof(dim2)); for (unsigned int i = 0; i < data.size(); i++) for (unsigned int j = 0; j < data.at(0).size(); j++) { double v = data.at(i).at(j).get(); oss.write((char *) &v, sizeof(v)); } Base64 b64; b64.encode(oss.str(), encoded, false); buf.append(encoded); buf.append(" </" + name + "> ") ; } void Parser::toXMLBase64(vector< vector< vector<Speed> > > data, const string &name, string &buf){ stringstream oss(stringstream::out | stringstream::binary); string encoded; buf.append("<" + name + "> "); int ndim = 3; int dim1 = data.size(); int dim2 = data.at(0).size(); int dim3 = data.at(0).at(0).size(); oss.write((char *)&ndim, sizeof(int)); oss.write((char *)&dim1, sizeof(dim1)); oss.write((char *)&dim2, sizeof(dim2)); oss.write((char *)&dim3, sizeof(dim3)); for (unsigned int i = 0; i < data.size(); i++) for (unsigned int j = 0; j < data.at(0).size(); j++) for (unsigned int k = 0; k < data.at(0).at(0).size(); k++){ double v = data.at(i).at(j).at(k).get(); oss.write((char *) &v, sizeof(v)); } Base64 b64; b64.encode(oss.str(), encoded, false); buf.append(encoded); buf.append(" </" + name + "> ") ; } void Parser::toXMLBase64(vector<vector< vector< vector<Speed> > > >data, const string &name, string &buf){ stringstream oss(stringstream::out | stringstream::binary); string encoded; buf.append("<" + name + "> "); int ndim = 3; int dim1 = data.size(); int dim2 = data.at(0).size(); int dim3 = data.at(0).at(0).size(); int dim4 = data.at(0).at(0).at(0).size(); oss.write((char *)&ndim, sizeof(int)); oss.write((char *)&dim1, sizeof(dim1)); oss.write((char *)&dim2, sizeof(dim2)); oss.write((char *)&dim3, sizeof(dim3)); oss.write((char *)&dim4, sizeof(dim4)); for (unsigned int i = 0; i < data.size(); i++) for (unsigned int j = 0; j < data.at(0).size(); j++) for (unsigned int k = 0; k < data.at(0).at(0).size(); k++) for (unsigned int l = 0; l < data.at(0).at(0).at(0).size(); l++){ double v = data.at(i).at(j).at(k).at(l).get(); oss.write((char *) &v, sizeof(v)); } Base64 b64; b64.encode(oss.str(), encoded, false); buf.append(encoded); buf.append(" </" + name + "> ") ; } #ifndef Double_CPP #define Double_CPP double #endif #define TRYREAD(_stream_, _value_) _stream_.read((char*) &(_value_), sizeof(_value_)); \ if (_stream_.bad()) throw ConversionException("I/O error during read of " + name, tableName); vector<Speed>& Parser::get1DSpeedFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector<Speed>& attribute) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } string decodedString; Base64 b64; b64.decode(xmlField, decodedString); stringstream iss(stringstream::in | stringstream::binary); iss.str(decodedString); attribute.clear(); unsigned int ndim = 0; //iss.read((char *)&ndim, sizeof(ndim)); TRYREAD(iss,ndim); unsigned int dim1 = 0; //iss.read((char *)&dim1, sizeof(dim1)); TRYREAD(iss,dim1); if (ndim != 1) { throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 1.", tableName); } attribute.reserve(dim1); Double_CPP v; for (unsigned int i = 0; i < dim1; i++) { //iss.read((char*) &v, sizeof(v)); TRYREAD(iss,v); attribute.push_back(Speed(v)); } return attribute; } vector <vector<Speed> >& Parser::get2DSpeedFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector <vector<Speed> >& attribute) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } string decodedString; Base64 b64; b64.decode(xmlField, decodedString); stringstream iss(stringstream::in | stringstream::binary); iss.str(decodedString); attribute.clear(); unsigned int ndim = 0; //iss.read((char *)&ndim, sizeof(ndim)); TRYREAD(iss,ndim); if (ndim != 2) { throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 2.", tableName); } unsigned int dim1 = 0; //iss.read((char *)&dim1, sizeof(dim1)); TRYREAD(iss,dim1); unsigned int dim2 = 0; //iss.read((char *)&dim2, sizeof(dim2)); TRYREAD(iss,dim2); attribute.reserve(dim1); Double_CPP v; vector<Speed> aux2; aux2.reserve(dim2); for (unsigned int i = 0; i < dim1; i++) { aux2.clear(); for (unsigned int j = 0; j < dim2; j++) { //iss.read((char*) &v, sizeof(v)); TRYREAD(iss,v); aux2.push_back(Speed(v)); } attribute.push_back(aux2); } return attribute; } vector <vector <vector<Speed> > >& Parser::get3DSpeedFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector <vector <vector<Speed> > >& attribute) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } string decodedString; Base64 b64; b64.decode(xmlField, decodedString); stringstream iss(stringstream::in | stringstream::binary); iss.str(decodedString); attribute.clear(); unsigned int ndim = 0; //iss.read((char *)&ndim, sizeof(ndim)); TRYREAD(iss, ndim); if (ndim != 3) { throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 3.", tableName); } unsigned int dim1 = 0; //iss.read((char *)&dim1, sizeof(dim1)); TRYREAD(iss,dim1); unsigned int dim2 = 0; //iss.read((char *)&dim2, sizeof(dim2)); TRYREAD(iss,dim2); unsigned int dim3 = 0; //iss.read((char *)&dim2, sizeof(dim3)); TRYREAD(iss,dim3); attribute.reserve(dim1); Double_CPP v; vector <vector<Speed> > aux2; vector<Speed> aux3; aux2.reserve(dim2); aux3.reserve(dim3); for (unsigned int i = 0; i < dim1; i++) { aux2.clear(); for (unsigned int j = 0; j < dim2; j++) { aux3.clear(); for (unsigned int k = 0; k < dim3; k++) { //iss.read((char*) &v, sizeof(v)); TRYREAD(iss,v); aux3.push_back(Speed(v)); } aux2.push_back(aux3); } attribute.push_back(aux2); } return attribute; ; } vector <vector <vector <vector<Speed> > > >& Parser::get4DSpeedFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector< vector <vector <vector<Speed> > > >& attribute) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } string decodedString; Base64 b64; b64.decode(xmlField, decodedString); stringstream iss(stringstream::in | stringstream::binary); iss.str(decodedString); attribute.clear(); unsigned int ndim = 0; //iss.read((char *)&ndim, sizeof(ndim)); TRYREAD(iss, ndim); if (ndim != 4) { throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 4.", tableName); } unsigned int dim1 = 0; //iss.read((char *)&dim1, sizeof(dim1)); TRYREAD(iss,dim1); unsigned int dim2 = 0; //iss.read((char *)&dim2, sizeof(dim2)); TRYREAD(iss,dim2); unsigned int dim3 = 0; //iss.read((char *)&dim2, sizeof(dim3)); TRYREAD(iss,dim3); unsigned int dim4 = 0; //iss.read((char *)&dim2, sizeof(dim3)); TRYREAD(iss,dim3); attribute.reserve(dim1); Double_CPP v; vector <vector <vector<Speed> > > aux2; vector <vector<Speed> > aux3; vector<Speed> aux4; aux2.reserve(dim2); aux3.reserve(dim3); aux4.reserve(dim4); for (unsigned int i = 0; i < dim1; i++) { aux2.clear(); for (unsigned int j = 0; j < dim2; j++) { aux3.clear(); for (unsigned int k = 0; k < dim3; k++) { aux4.clear(); for (unsigned int l = 0; l < dim4; l++) { //iss.read((char*) &v, sizeof(v)); TRYREAD(iss,v); aux4.push_back(Speed(v)); } aux3.push_back(aux4); } aux2.push_back(aux3); } attribute.push_back(aux2); } return attribute; ; } void Parser::toXMLBase64(vector<Temperature> data, const string &name, string &buf){ stringstream oss(stringstream::out | stringstream::binary); string encoded; buf.append("<" + name + "> "); int ndim = 1; int dim1 = data.size(); oss.write((char *)&ndim, sizeof(int)); oss.write((char *)&dim1, sizeof(dim1)); for (unsigned int i = 0; i < data.size(); i++) { double v = data.at(i).get(); oss.write((char *) &v, sizeof(v)); } Base64 b64; b64.encode(oss.str(), encoded, false); buf.append(encoded); buf.append(" </" + name + "> "); } void Parser::toXMLBase64(vector< vector<Temperature> > data, const string &name, string &buf){ stringstream oss(stringstream::out | stringstream::binary); string encoded; buf.append("<" + name + "> "); int ndim = 2; int dim1 = data.size(); int dim2 = data.at(0).size(); oss.write((char *)&ndim, sizeof(int)); oss.write((char *)&dim1, sizeof(dim1)); oss.write((char *)&dim2, sizeof(dim2)); for (unsigned int i = 0; i < data.size(); i++) for (unsigned int j = 0; j < data.at(0).size(); j++) { double v = data.at(i).at(j).get(); oss.write((char *) &v, sizeof(v)); } Base64 b64; b64.encode(oss.str(), encoded, false); buf.append(encoded); buf.append(" </" + name + "> ") ; } void Parser::toXMLBase64(vector< vector< vector<Temperature> > > data, const string &name, string &buf){ stringstream oss(stringstream::out | stringstream::binary); string encoded; buf.append("<" + name + "> "); int ndim = 3; int dim1 = data.size(); int dim2 = data.at(0).size(); int dim3 = data.at(0).at(0).size(); oss.write((char *)&ndim, sizeof(int)); oss.write((char *)&dim1, sizeof(dim1)); oss.write((char *)&dim2, sizeof(dim2)); oss.write((char *)&dim3, sizeof(dim3)); for (unsigned int i = 0; i < data.size(); i++) for (unsigned int j = 0; j < data.at(0).size(); j++) for (unsigned int k = 0; k < data.at(0).at(0).size(); k++){ double v = data.at(i).at(j).at(k).get(); oss.write((char *) &v, sizeof(v)); } Base64 b64; b64.encode(oss.str(), encoded, false); buf.append(encoded); buf.append(" </" + name + "> ") ; } void Parser::toXMLBase64(vector<vector< vector< vector<Temperature> > > >data, const string &name, string &buf){ stringstream oss(stringstream::out | stringstream::binary); string encoded; buf.append("<" + name + "> "); int ndim = 3; int dim1 = data.size(); int dim2 = data.at(0).size(); int dim3 = data.at(0).at(0).size(); int dim4 = data.at(0).at(0).at(0).size(); oss.write((char *)&ndim, sizeof(int)); oss.write((char *)&dim1, sizeof(dim1)); oss.write((char *)&dim2, sizeof(dim2)); oss.write((char *)&dim3, sizeof(dim3)); oss.write((char *)&dim4, sizeof(dim4)); for (unsigned int i = 0; i < data.size(); i++) for (unsigned int j = 0; j < data.at(0).size(); j++) for (unsigned int k = 0; k < data.at(0).at(0).size(); k++) for (unsigned int l = 0; l < data.at(0).at(0).at(0).size(); l++){ double v = data.at(i).at(j).at(k).at(l).get(); oss.write((char *) &v, sizeof(v)); } Base64 b64; b64.encode(oss.str(), encoded, false); buf.append(encoded); buf.append(" </" + name + "> ") ; } #ifndef Double_CPP #define Double_CPP double #endif #define TRYREAD(_stream_, _value_) _stream_.read((char*) &(_value_), sizeof(_value_)); \ if (_stream_.bad()) throw ConversionException("I/O error during read of " + name, tableName); vector<Temperature>& Parser::get1DTemperatureFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector<Temperature>& attribute) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } string decodedString; Base64 b64; b64.decode(xmlField, decodedString); stringstream iss(stringstream::in | stringstream::binary); iss.str(decodedString); attribute.clear(); unsigned int ndim = 0; //iss.read((char *)&ndim, sizeof(ndim)); TRYREAD(iss,ndim); unsigned int dim1 = 0; //iss.read((char *)&dim1, sizeof(dim1)); TRYREAD(iss,dim1); if (ndim != 1) { throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 1.", tableName); } attribute.reserve(dim1); Double_CPP v; for (unsigned int i = 0; i < dim1; i++) { //iss.read((char*) &v, sizeof(v)); TRYREAD(iss,v); attribute.push_back(Temperature(v)); } return attribute; } vector <vector<Temperature> >& Parser::get2DTemperatureFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector <vector<Temperature> >& attribute) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } string decodedString; Base64 b64; b64.decode(xmlField, decodedString); stringstream iss(stringstream::in | stringstream::binary); iss.str(decodedString); attribute.clear(); unsigned int ndim = 0; //iss.read((char *)&ndim, sizeof(ndim)); TRYREAD(iss,ndim); if (ndim != 2) { throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 2.", tableName); } unsigned int dim1 = 0; //iss.read((char *)&dim1, sizeof(dim1)); TRYREAD(iss,dim1); unsigned int dim2 = 0; //iss.read((char *)&dim2, sizeof(dim2)); TRYREAD(iss,dim2); attribute.reserve(dim1); Double_CPP v; vector<Temperature> aux2; aux2.reserve(dim2); for (unsigned int i = 0; i < dim1; i++) { aux2.clear(); for (unsigned int j = 0; j < dim2; j++) { //iss.read((char*) &v, sizeof(v)); TRYREAD(iss,v); aux2.push_back(Temperature(v)); } attribute.push_back(aux2); } return attribute; } vector <vector <vector<Temperature> > >& Parser::get3DTemperatureFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector <vector <vector<Temperature> > >& attribute) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } string decodedString; Base64 b64; b64.decode(xmlField, decodedString); stringstream iss(stringstream::in | stringstream::binary); iss.str(decodedString); attribute.clear(); unsigned int ndim = 0; //iss.read((char *)&ndim, sizeof(ndim)); TRYREAD(iss, ndim); if (ndim != 3) { throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 3.", tableName); } unsigned int dim1 = 0; //iss.read((char *)&dim1, sizeof(dim1)); TRYREAD(iss,dim1); unsigned int dim2 = 0; //iss.read((char *)&dim2, sizeof(dim2)); TRYREAD(iss,dim2); unsigned int dim3 = 0; //iss.read((char *)&dim2, sizeof(dim3)); TRYREAD(iss,dim3); attribute.reserve(dim1); Double_CPP v; vector <vector<Temperature> > aux2; vector<Temperature> aux3; aux2.reserve(dim2); aux3.reserve(dim3); for (unsigned int i = 0; i < dim1; i++) { aux2.clear(); for (unsigned int j = 0; j < dim2; j++) { aux3.clear(); for (unsigned int k = 0; k < dim3; k++) { //iss.read((char*) &v, sizeof(v)); TRYREAD(iss,v); aux3.push_back(Temperature(v)); } aux2.push_back(aux3); } attribute.push_back(aux2); } return attribute; ; } vector <vector <vector <vector<Temperature> > > >& Parser::get4DTemperatureFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector< vector <vector <vector<Temperature> > > >& attribute) { string xmlField = Parser::getField(xmlDoc,name); if (xmlField.length() == 0) { throw ConversionException("Error: Field \"" + name + "\": Invalid XML syntax", tableName); } string decodedString; Base64 b64; b64.decode(xmlField, decodedString); stringstream iss(stringstream::in | stringstream::binary); iss.str(decodedString); attribute.clear(); unsigned int ndim = 0; //iss.read((char *)&ndim, sizeof(ndim)); TRYREAD(iss, ndim); if (ndim != 4) { throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 4.", tableName); } unsigned int dim1 = 0; //iss.read((char *)&dim1, sizeof(dim1)); TRYREAD(iss,dim1); unsigned int dim2 = 0; //iss.read((char *)&dim2, sizeof(dim2)); TRYREAD(iss,dim2); unsigned int dim3 = 0; //iss.read((char *)&dim2, sizeof(dim3)); TRYREAD(iss,dim3); unsigned int dim4 = 0; //iss.read((char *)&dim2, sizeof(dim3)); TRYREAD(iss,dim3); attribute.reserve(dim1); Double_CPP v; vector <vector <vector<Temperature> > > aux2; vector <vector<Temperature> > aux3; vector<Temperature> aux4; aux2.reserve(dim2); aux3.reserve(dim3); aux4.reserve(dim4); for (unsigned int i = 0; i < dim1; i++) { aux2.clear(); for (unsigned int j = 0; j < dim2; j++) { aux3.clear(); for (unsigned int k = 0; k < dim3; k++) { aux4.clear(); for (unsigned int l = 0; l < dim4; l++) { //iss.read((char*) &v, sizeof(v)); TRYREAD(iss,v); aux4.push_back(Temperature(v)); } aux3.push_back(aux4); } aux2.push_back(aux3); } attribute.push_back(aux2); } return attribute; ; } } // End namespace asdm