Line data Source code
1 :
2 : /*
3 : * ALMA - Atacama Large Millimeter Array
4 : * (c) European Southern Observatory, 2002
5 : * (c) Associated Universities Inc., 2002
6 : * Copyright by ESO (in the framework of the ALMA collaboration),
7 : * Copyright by AUI (in the framework of the ALMA collaboration),
8 : * All rights reserved.
9 : *
10 : * This library is free software; you can redistribute it and/or
11 : * modify it under the terms of the GNU Lesser General Public
12 : * License as published by the Free software Foundation; either
13 : * version 2.1 of the License, or (at your option) any later version.
14 : *
15 : * This library is distributed in the hope that it will be useful,
16 : * but WITHOUT ANY WARRANTY, without even the implied warranty of
17 : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 : * Lesser General Public License for more details.
19 : *
20 : * You should have received a copy of the GNU Lesser General Public
21 : * License along with this library; if not, write to the Free Software
22 : * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
23 : * MA 02111-1307 USA
24 : *
25 : * Warning!
26 : * --------------------------------------------------------------------
27 : * | This is generated code! Do not modify this file. |
28 : * | If you do, all changes will be lost when the file is re-generated. |
29 : * --------------------------------------------------------------------
30 : *
31 : * File Parser.cpp
32 : */
33 : #include <iostream>
34 : #include <sstream>
35 : #include <alma/ASDM/Base64.h>
36 :
37 : #include <alma/ASDM/Parser.h>
38 : #ifndef WITHOUT_BOOST
39 : #include <boost/property_tree/detail/xml_parser_utils.hpp>
40 : #endif
41 : #include <alma/ASDM/OutOfBoundsException.h>
42 : #include <alma/ASDM/NumberFormatException.h>
43 : #include <alma/ASDM/BooleanWrapper.h>
44 : #include <alma/ASDM/ByteWrapper.h>
45 : #include <alma/ASDM/CharacterWrapper.h>
46 : #include <alma/ASDM/DoubleWrapper.h>
47 : #include <alma/ASDM/FloatWrapper.h>
48 : #include <alma/ASDM/IntegerWrapper.h>
49 : #include <alma/ASDM/LongWrapper.h>
50 : #include <alma/ASDM/ShortWrapper.h>
51 : using asdm::OutOfBoundsException;
52 : using asdm::NumberFormatException;
53 : using asdm::Boolean;
54 : using asdm::Byte;
55 : using asdm::Character;
56 : using asdm::Double;
57 : using asdm::Float;
58 : using asdm::Integer;
59 : using asdm::Long;
60 : using asdm::Short;
61 :
62 : using namespace std;
63 :
64 : namespace asdm {
65 :
66 0 : string Parser::substring(const string &s, int a, int b) {
67 0 : return s.substr(a,(b - a));
68 : }
69 :
70 0 : string Parser::trim(const string &s) {
71 0 : unsigned int i = 0;
72 : //while (s.at(i) == ' ' && i < s.length())
73 0 : while (i < s.length() && s.at(i) == ' ')
74 0 : ++i;
75 0 : if (i == s.length())
76 0 : return "";
77 0 : unsigned int j = s.length() - 1;
78 : //while (s.at(j) == ' ' && j > i)
79 0 : while (j > i && s.at(j) == ' ')
80 0 : --j;
81 0 : return substring(s,i,j + 1);
82 : }
83 :
84 0 : string Parser::encode(const string &s) {
85 : #ifndef WITHOUT_BOOST
86 : return boost::property_tree::xml_parser::encode_char_entities(s);
87 : #else
88 0 : string result;
89 0 : for (string::const_iterator it=s.begin(); it!=s.end();++it) {
90 0 : switch(*it) {
91 0 : case '&': result += "&"; break;
92 0 : case '<': result += ">"; break;
93 0 : case '>': result += "<"; break;
94 0 : case '\"': result += """; break;
95 0 : case '\'': result += "'"; break;
96 0 : default: result += *it;
97 : }
98 : }
99 0 : return result;
100 : #endif
101 0 : }
102 :
103 : #ifndef WITHOUT_BOOST
104 : string Parser::decode(const string &s, const string &/* tableName */) {
105 : return boost::property_tree::xml_parser::decode_char_entities(s);
106 : }
107 : #else
108 0 : string Parser::decode(const string &s, const string &tableName) {
109 0 : string result;
110 0 : for (string::const_iterator it=s.begin(); it!=s.end();++it) {
111 : // is this the start of a special set of characters to be decoded
112 0 : if (*it == '&') {
113 : // is it correctly terminated
114 0 : string::const_iterator term = find(it+1,s.end(),';');
115 0 : if (term == s.end())
116 0 : throw ConversionException("Error: Missing semi-colon after start of special characters in \"" +
117 0 : s + "\" : Invalid XML syntax", tableName);
118 :
119 0 : string thing(it+1,term);
120 0 : if (thing == "amp") result += '&';
121 0 : else if (thing == "gt") result += '>';
122 0 : else if (thing == "lt") result += '<';
123 0 : else if (thing == "quot") result += '\"';
124 0 : else if (thing == "apos") result += '\'';
125 : else
126 0 : throw ConversionException("Error: Unrecognized special characters in \"" +
127 0 : s + "\" : Invalid XML syntax", tableName);
128 :
129 0 : it = term;
130 0 : } else {
131 0 : result += *it;
132 : }
133 : }
134 0 : return result;
135 0 : }
136 : #endif
137 :
138 :
139 : /**
140 : * Get the portion of the string bounded by s1 and s2, inclusive.
141 : * @param s1
142 : * @param s2
143 : * @return
144 : */
145 0 : string Parser::getElement(const string &s1, const string &s2) {
146 0 : beg = str.find(s1,pos);
147 0 : if (beg == string::npos)
148 0 : return "";
149 0 : end = str.find(s2,beg + s1.length());
150 0 : if (end == string::npos)
151 0 : return "";
152 0 : pos = end + s2.length();
153 0 : return substring(str,beg,end + s2.length());
154 : }
155 :
156 : /**
157 : * Get the portion of the string bounded by s1 and s2, exclusive.
158 : * @param s1
159 : * @param s2
160 : * @return
161 : */
162 0 : string Parser::getElementContent(const string &s1, const string &s2) {
163 0 : string s = getElement(s1,s2);
164 0 : if (s.length() == 0)
165 0 : return "";
166 0 : s = substring(str,beg + s1.length(),end);
167 0 : return trim(s);
168 0 : }
169 :
170 0 : string Parser::getField(const string &field) {
171 0 : beg = str.find("<" + field + ">");
172 0 : if (beg == string::npos)
173 0 : return "";
174 0 : beg += field.length() + 2;
175 0 : end = str.find("</" + field + ">",beg);
176 0 : if (end == string::npos)
177 0 : return "";
178 0 : string s = substring(str,beg,end);
179 0 : return trim(s);
180 0 : }
181 :
182 0 : string Parser::getField(const string &xml, const string &field) {
183 0 : string::size_type b = xml.find("<" + field + ">");
184 0 : if (b == string::npos)
185 0 : return "";
186 0 : b += field.length() + 2;
187 0 : string::size_type e = xml.find("</" + field + ">",b);
188 0 : if (e == string::npos)
189 0 : return "";
190 0 : string s = substring(xml,b,e);
191 0 : return trim(s);
192 0 : }
193 :
194 : //////////////////////////////////////////////////////
195 : // The follwing is a special case.
196 : //////////////////////////////////////////////////////
197 :
198 0 : string Parser::getString(const string &name, const string &tableName, const string &xmlDoc)
199 : {
200 0 : string xmlField = Parser::getField(xmlDoc,name);
201 : /*
202 : if (xmlField == "")
203 : throw ConversionException("Error: Missing field \"" +
204 : name + "\" or invalid syntax",tableName);
205 : */
206 0 : return Parser::decode(xmlField,tableName);
207 0 : }
208 :
209 0 : vector<string> Parser::get1DString(const string &name, const string &tableName, const string &xmlDoc)
210 : {
211 0 : vector<string> x(2);
212 0 : string xmlField = Parser::getField(xmlDoc,name);
213 0 : if (xmlField == "") {
214 0 : throw ConversionException("Error: Field \"" +
215 0 : name + "\": Invalid XML syntax", tableName);
216 : }
217 0 : StringTokenizer t(xmlField," ");
218 : try {
219 0 : int ndim = Integer::parseInt(t.nextToken());
220 0 : if (ndim != 1) {
221 0 : throw ConversionException("Error: Field \"" +
222 0 : name + "\": Invalid array format", tableName);
223 : }
224 0 : int dim0 = Integer::parseInt(t.nextToken());
225 0 : vector<string> value(dim0);
226 0 : if (dim0 == 0)
227 0 : return value;
228 0 : t.nextToken("\""); // the space
229 0 : value[0] = t.nextToken();
230 0 : for (int i = 1; i < dim0; ++i) {
231 0 : t.nextToken(); // the space
232 0 : string thisToken = t.nextToken();
233 0 : value[i] = Parser::decode(thisToken,tableName);
234 0 : }
235 0 : if (t.hasMoreTokens()) {
236 0 : throw ConversionException("Error: Field \"" +
237 0 : name + "\": Syntax error.", tableName);
238 : }
239 0 : return value;
240 0 : } catch (const NumberFormatException &e) {
241 0 : throw ConversionException("Error: Field \"" +
242 0 : name + "\": " + e.getMessage(), tableName);
243 0 : } catch (const OutOfBoundsException &e) {
244 0 : throw ConversionException("Error: Field \"" +
245 0 : name + "\": Unexpected end of string", tableName);
246 0 : }
247 0 : }
248 :
249 0 : vector <vector<string> > Parser::get2DString(const string &name, const string &tableName, const string &xmlDoc)
250 : {
251 0 : string xmlField = Parser::getField(xmlDoc,name);
252 0 : if (xmlField == "") {
253 0 : throw ConversionException("Error: Field \"" +
254 0 : name + "\": Invalid XML syntax", tableName);
255 : }
256 0 : StringTokenizer t(xmlField," ");
257 : try {
258 0 : int ndim = Integer::parseInt(t.nextToken());
259 0 : if (ndim != 2) {
260 0 : throw ConversionException("Error: Field \"" +
261 0 : name + "\": Invalid array format", tableName);
262 : }
263 0 : int dim0 = Integer::parseInt(t.nextToken());
264 0 : int dim1 = Integer::parseInt(t.nextToken());
265 0 : vector <vector<string> > value;
266 :
267 0 : if (dim0 == 0 || dim1 == 0)
268 0 : return value;
269 0 : t.nextToken("\""); // the space
270 :
271 0 : vector<string>v_aux;
272 0 : for (int i = 0; i < dim0; ++i) {
273 0 : v_aux.clear();
274 0 : for (int j = 0; j < dim1; ++j) {
275 0 : v_aux.push_back(Parser::decode(t.nextToken(),tableName));
276 0 : if (i != dim0 - 1 || j != dim1 - 1)
277 0 : t.nextToken(); // the space
278 : }
279 0 : value.push_back(v_aux);
280 : }
281 0 : if (t.hasMoreTokens()) {
282 0 : throw ConversionException("Error: Field \"" +
283 0 : name + "\": Syntax error.", tableName);
284 : }
285 0 : return value;
286 0 : } catch (const NumberFormatException &e) {
287 0 : throw ConversionException("Error: Field \"" +
288 0 : name + "\": " + e.getMessage(), tableName);
289 0 : } catch (const OutOfBoundsException &e) {
290 0 : throw ConversionException("Error: Field \"" +
291 0 : name + "\": Unexpected end of string", tableName);
292 0 : }
293 0 : }
294 :
295 0 : vector <vector <vector<string> > > Parser::get3DString(const string &name, const string &tableName, const string &xmlDoc)
296 : {
297 0 : string xmlField = Parser::getField(xmlDoc,name);
298 0 : if (xmlField == "") {
299 0 : throw ConversionException("Error: Field \"" +
300 0 : name + "\": Invalid XML syntax", tableName);
301 : }
302 0 : StringTokenizer t(xmlField," ");
303 : try {
304 0 : int ndim = Integer::parseInt(t.nextToken());
305 0 : if (ndim != 3) {
306 0 : throw ConversionException("Error: Field \"" +
307 0 : name + "\": Invalid array format", tableName);
308 : }
309 0 : int dim0 = Integer::parseInt(t.nextToken());
310 0 : int dim1 = Integer::parseInt(t.nextToken());
311 0 : int dim2 = Integer::parseInt(t.nextToken());
312 0 : vector <vector <vector<string> > > value;
313 0 : if (dim0 == 0 || dim1 == 0 || dim2 == 0)
314 0 : return value;
315 0 : t.nextToken("\""); // the space
316 :
317 0 : vector<string> v_aux;
318 0 : vector<vector <string> > vv_aux;
319 0 : for (int i = 0; i < dim0; ++i) {
320 0 : vv_aux.clear();
321 0 : for (int j = 0; j < dim1; ++j) {
322 0 : v_aux.clear();
323 0 : for (int k = 0; k < dim2; ++k) {
324 0 : v_aux.push_back( Parser::decode(t.nextToken(),tableName));
325 0 : if (i != dim0 - 1 || j != dim1 - 1 || k != dim2 - 1)
326 0 : t.nextToken(); // the space
327 : }
328 0 : vv_aux.push_back(v_aux);
329 : }
330 0 : value.push_back(vv_aux);
331 : }
332 0 : if (t.hasMoreTokens()) {
333 0 : throw ConversionException("Error: Field \"" +
334 0 : name + "\": Syntax error.", tableName);
335 : }
336 0 : return value;
337 0 : } catch (const NumberFormatException &e) {
338 0 : throw ConversionException("Error: Field \"" +
339 0 : name + "\": " + e.getMessage(), tableName);
340 0 : } catch (const OutOfBoundsException &e) {
341 0 : throw ConversionException("Error: Field \"" +
342 0 : name + "\": Unexpected end of string", tableName);
343 0 : }
344 0 : }
345 :
346 : // Generated methods for conversion to and from XML
347 : // data representations for all types, both primitive
348 : // and extended. Also included are 1, 2, and 3
349 : // dimensional arrays of these types.
350 :
351 :
352 : // Field type: int
353 :
354 0 : void Parser::toXML(int data, const string &name, string &buf) {
355 0 : buf.append("<" + name + "> ");
356 :
357 0 : buf.append(Integer::toString(data));
358 :
359 0 : buf.append(" </" + name + "> ");
360 0 : }
361 :
362 :
363 :
364 0 : void Parser::toXML(set< int > data, const string &name, string &buf) {
365 0 : buf.append("<" + name + "> ");
366 0 : set < int >::iterator iter;
367 0 : for (iter=data.begin(); iter!=data.end(); iter++) {
368 :
369 0 : buf.append(Integer::toString(*iter));
370 0 : buf.append(" ");
371 :
372 : }
373 0 : }
374 :
375 :
376 0 : void Parser::toXML(vector<int> data, const string &name, string &buf) {
377 0 : buf.append("<" + name + "> ");
378 0 : buf.append("1 ");
379 0 : buf.append(Integer::toString(data.size()));
380 0 : buf.append(" ");
381 0 : for (unsigned int i = 0; i < data.size(); ++i) {
382 :
383 0 : buf.append(Integer::toString(data[i]));
384 :
385 0 : buf.append(" ");
386 : }
387 0 : buf.append(" </" + name + "> ");
388 0 : }
389 :
390 0 : void Parser::toXML(vector< vector<int> > data, const string &name, string &buf) {
391 0 : buf.append("<" + name + "> ");
392 0 : buf.append("2 ");
393 0 : buf.append(Integer::toString(data.size()));
394 0 : buf.append(" ");
395 0 : buf.append(Integer::toString(data[0].size()));
396 0 : buf.append(" ");
397 0 : for (unsigned int i = 0; i < data.size(); ++i) {
398 0 : for (unsigned int j = 0; j < data[i].size(); ++j) {
399 :
400 0 : buf.append(Integer::toString(data[i][j]));
401 :
402 0 : buf.append(" ");
403 : }
404 : }
405 0 : buf.append(" </" + name + "> ");
406 0 : }
407 :
408 0 : void Parser::toXML(vector< vector< vector<int> > > data, const string &name, string &buf) {
409 0 : buf.append("<" + name + "> ");
410 0 : buf.append("3 ");
411 0 : buf.append(Integer::toString(data.size()));
412 0 : buf.append(" ");
413 0 : buf.append(Integer::toString(data[0].size()));
414 0 : buf.append(" ");
415 0 : buf.append(Integer::toString(data[0][0].size()));
416 0 : buf.append(" ");
417 0 : for (unsigned int i = 0; i < data.size(); ++i) {
418 0 : for (unsigned int j = 0; j < data[i].size(); ++j) {
419 0 : for (unsigned int k = 0; k < data[i][j].size(); ++k) {
420 :
421 0 : buf.append(Integer::toString(data[i][j][k]));
422 :
423 0 : buf.append(" ");
424 : }
425 : }
426 : }
427 0 : buf.append(" </" + name + "> ");
428 0 : }
429 :
430 0 : void Parser::toXML(vector<vector< vector< vector<int> > > >data, const string &name, string &buf) {
431 0 : buf.append("<" + name + "> ");
432 0 : buf.append("4 ");
433 0 : buf.append(Integer::toString(data.size()));
434 0 : buf.append(" ");
435 0 : buf.append(Integer::toString(data[0].size()));
436 0 : buf.append(" ");
437 0 : buf.append(Integer::toString(data[0][0].size()));
438 0 : buf.append(" ");
439 0 : buf.append(Integer::toString(data[0][0][0].size()));
440 0 : buf.append(" ");
441 0 : for (unsigned int i = 0; i < data.size(); ++i) {
442 0 : for (unsigned int j = 0; j < data[i].size(); ++j) {
443 0 : for (unsigned int k = 0; k < data[i][j].size(); ++k) {
444 0 : for (unsigned int l = 0; l < data[i][j][k].size(); l++) {
445 :
446 0 : buf.append(Integer::toString(data[i][j][k][l]));
447 :
448 0 : buf.append(" ");
449 : }
450 : }
451 : }
452 : }
453 0 : buf.append(" </" + name + "> ");
454 0 : }
455 :
456 :
457 :
458 :
459 :
460 0 : set< int > Parser::getIntSet(const string &name, const string &tableName, const string &xmlDoc) {
461 0 : string xmlField = Parser::getField(xmlDoc,name);
462 0 : if (xmlField.length() == 0)
463 0 : throw ConversionException("Error: Missing field \"" +
464 0 : name + "\" or invalid syntax",tableName);
465 0 : StringTokenizer t(xmlField," ");
466 0 : set < int > result;
467 :
468 0 : while (t.hasMoreTokens()) {
469 :
470 :
471 : try {
472 0 : int data = Integer::parseInt(xmlField);
473 0 : result.insert(data);
474 0 : } catch (const NumberFormatException &e) {
475 0 : throw ConversionException("Error: Field \"" +
476 0 : name + "\": " + e.getMessage(), tableName);
477 0 : }
478 :
479 : }
480 0 : return result;
481 0 : }
482 :
483 :
484 0 : int Parser::getInteger(const string &name, const string &tableName, const string &xmlDoc)
485 : {
486 0 : string xmlField = Parser::getField(xmlDoc,name);
487 0 : if (xmlField.length() == 0)
488 0 : throw ConversionException("Error: Missing field \"" +
489 0 : name + "\" or invalid syntax",tableName);
490 :
491 : try {
492 0 : int data = Integer::parseInt(xmlField);
493 0 : return data;
494 0 : } catch (const NumberFormatException &e) {
495 0 : throw ConversionException("Error: Field \"" +
496 0 : name + "\": " + e.getMessage(), tableName);
497 0 : }
498 :
499 0 : }
500 :
501 0 : vector<int> Parser::get1DInteger(const string &name, const string &tableName, const string &xmlDoc)
502 : {
503 0 : string xmlField = Parser::getField(xmlDoc,name);
504 0 : if (xmlField.length() == 0) {
505 0 : throw ConversionException("Error: Field \"" +
506 0 : name + "\": Invalid XML syntax", tableName);
507 : }
508 0 : StringTokenizer t(xmlField," ");
509 : try {
510 0 : int ndim = Integer::parseInt(t.nextToken());
511 0 : if (ndim != 1) {
512 0 : throw ConversionException("Error: Field \"" +
513 0 : name + "\": Invalid array format", tableName);
514 : }
515 0 : int dim0 = Integer::parseInt(t.nextToken());
516 0 : vector<int> value (dim0);
517 0 : if (dim0 == 0)
518 0 : return value;
519 0 : for (int i = 0; i < dim0; ++i) {
520 :
521 0 : value[i] = Integer::parseInt(t.nextToken());
522 :
523 : }
524 0 : if (t.hasMoreTokens()) {
525 0 : throw ConversionException("Error: Field \"" +
526 0 : name + "\": Syntax error.", tableName);
527 : }
528 0 : return value;
529 0 : } catch (const NumberFormatException &e) {
530 0 : throw ConversionException("Error: Field \"" +
531 0 : name + "\": " + e.getMessage(), tableName);
532 0 : } catch (const OutOfBoundsException &e) {
533 0 : throw ConversionException("Error: Field \"" +
534 0 : name + "\": Unexpected end of string", tableName);
535 0 : } catch (const TagFormatException &e) {
536 0 : throw ConversionException("Error: Field \"" +
537 0 : name + "\": " + e.getMessage(), tableName);
538 0 : }
539 0 : }
540 :
541 0 : vector< vector<int> > Parser::get2DInteger(const string &name, const string &tableName, const string &xmlDoc)
542 : {
543 0 : string xmlField = Parser::getField(xmlDoc,name);
544 0 : if (xmlField.length() == 0) {
545 0 : throw ConversionException("Error: Field \"" +
546 0 : name + "\": Invalid XML syntax", tableName);
547 : }
548 0 : StringTokenizer t(xmlField," ");
549 : try {
550 0 : int ndim = Integer::parseInt(t.nextToken());
551 0 : if (ndim != 2) {
552 0 : throw ConversionException("Error: Field \"" +
553 0 : name + "\": Invalid array format", tableName);
554 : }
555 0 : int dim0 = Integer::parseInt(t.nextToken());
556 0 : int dim1 = Integer::parseInt(t.nextToken());
557 0 : vector< vector<int> > value;
558 :
559 0 : if (dim0 == 0 || dim1 == 0)
560 0 : return value;
561 :
562 0 : vector<int> v_aux;
563 0 : for (int i = 0; i < dim0; ++i) {
564 0 : v_aux.clear();
565 0 : for (int j = 0; j < dim1; ++j) {
566 :
567 0 : v_aux.push_back(Integer::parseInt(t.nextToken()));
568 :
569 : }
570 0 : value.push_back(v_aux);
571 : }
572 0 : if (t.hasMoreTokens()) {
573 0 : throw ConversionException("Error: Field \"" +
574 0 : name + "\": Syntax error.", tableName);
575 : }
576 0 : return value;
577 0 : } catch (const NumberFormatException &e) {
578 0 : throw ConversionException("Error: Field \"" +
579 0 : name + "\": " + e.getMessage(), tableName);
580 0 : } catch (const OutOfBoundsException &e) {
581 0 : throw ConversionException("Error: Field \"" +
582 0 : name + "\": Unexpected end of string", tableName);
583 0 : } catch (const TagFormatException &e) {
584 0 : throw ConversionException("Error: Field \"" +
585 0 : name + "\": " + e.getMessage(), tableName);
586 0 : }
587 0 : }
588 :
589 0 : vector< vector< vector<int> > > Parser::get3DInteger(const string &name, const string &tableName, const string &xmlDoc)
590 : {
591 0 : string xmlField = Parser::getField(xmlDoc,name);
592 0 : if (xmlField.length() == 0) {
593 0 : throw ConversionException("Error: Field \"" +
594 0 : name + "\": Invalid XML syntax", tableName);
595 : }
596 0 : StringTokenizer t(xmlField," ");
597 : try {
598 0 : int ndim = Integer::parseInt(t.nextToken());
599 0 : if (ndim != 3) {
600 0 : throw ConversionException("Error: Field \"" +
601 0 : name + "\": Invalid array format", tableName);
602 : }
603 0 : int dim0 = Integer::parseInt(t.nextToken());
604 0 : int dim1 = Integer::parseInt(t.nextToken());
605 0 : int dim2 = Integer::parseInt(t.nextToken());
606 0 : vector< vector< vector<int> > > value ;
607 0 : if (dim0 == 0 || dim1 == 0 || dim2 == 0)
608 0 : return value;
609 :
610 0 : vector<vector<int> > vv_aux;
611 0 : vector<int> v_aux;
612 0 : for (int i = 0; i < dim0; ++i) {
613 0 : vv_aux.clear();
614 0 : for (int j = 0; j < dim1; ++j) {
615 0 : v_aux.clear();
616 0 : for (int k = 0; k < dim2; ++k) {
617 :
618 0 : v_aux.push_back(Integer::parseInt(t.nextToken()));
619 :
620 : }
621 0 : vv_aux.push_back(v_aux);
622 : }
623 0 : value.push_back(vv_aux);
624 : }
625 0 : if (t.hasMoreTokens()) {
626 0 : throw ConversionException("Error: Field \"" +
627 0 : name + "\": Syntax error.", tableName);
628 : }
629 0 : return value;
630 0 : } catch (const NumberFormatException &e) {
631 0 : throw ConversionException("Error: Field \"" +
632 0 : name + "\": " + e.getMessage(), tableName);
633 0 : } catch (const OutOfBoundsException &e) {
634 0 : throw ConversionException("Error: Field \"" +
635 0 : name + "\": Unexpected end of string", tableName);
636 0 : } catch (const TagFormatException &e) {
637 0 : throw ConversionException("Error: Field \"" +
638 0 : name + "\": " + e.getMessage(), tableName);
639 0 : }
640 0 : }
641 :
642 0 : vector< vector< vector< vector<int> > > >Parser::get4DInteger(const string &name, const string &tableName, const string &xmlDoc)
643 : {
644 0 : string xmlField = Parser::getField(xmlDoc,name);
645 0 : if (xmlField.length() == 0) {
646 0 : throw ConversionException("Error: Field \"" +
647 0 : name + "\": Invalid XML syntax", tableName);
648 : }
649 0 : StringTokenizer t(xmlField," ");
650 : try {
651 0 : int ndim = Integer::parseInt(t.nextToken());
652 0 : if (ndim != 4) {
653 0 : throw ConversionException("Error: Field \"" +
654 0 : name + "\": Invalid array format", tableName);
655 : }
656 0 : int dim0 = Integer::parseInt(t.nextToken());
657 0 : int dim1 = Integer::parseInt(t.nextToken());
658 0 : int dim2 = Integer::parseInt(t.nextToken());
659 0 : int dim3 = Integer::parseInt(t.nextToken());
660 0 : vector<vector< vector< vector<int> > > >value;
661 0 : if (dim0 == 0 || dim1 == 0 || dim2 == 0 || dim3 == 0)
662 0 : return value;
663 :
664 0 : vector<vector<vector<int> > >vvv_aux;
665 0 : vector<vector< int> > vv_aux;
666 0 : vector<int> v_aux;
667 0 : for (int i = 0; i < dim0; ++i) {
668 0 : vvv_aux.clear();
669 0 : for (int j = 0; j < dim1; ++j) {
670 0 : vv_aux.clear();
671 0 : for (int k = 0; k < dim2; ++k) {
672 0 : v_aux.clear();
673 0 : for (int l = 0; l < dim3; l++) {
674 :
675 0 : v_aux.push_back(Integer::parseInt(t.nextToken()));
676 :
677 : }
678 0 : vv_aux.push_back(v_aux);
679 : }
680 0 : vvv_aux.push_back(vv_aux);
681 : }
682 0 : value.push_back(vvv_aux);
683 : }
684 0 : if (t.hasMoreTokens()) {
685 0 : throw ConversionException("Error: Field \"" +
686 0 : name + "\": Syntax error.", tableName);
687 : }
688 0 : return value;
689 0 : } catch (const NumberFormatException &e) {
690 0 : throw ConversionException("Error: Field \"" +
691 0 : name + "\": " + e.getMessage(), tableName);
692 0 : } catch (const OutOfBoundsException &e) {
693 0 : throw ConversionException("Error: Field \"" +
694 0 : name + "\": Unexpected end of string", tableName);
695 0 : } catch (const TagFormatException &e) {
696 0 : throw ConversionException("Error: Field \"" +
697 0 : name + "\": " + e.getMessage(), tableName);
698 0 : }
699 0 : }
700 :
701 :
702 :
703 :
704 :
705 : // Field type: short
706 :
707 0 : void Parser::toXML(short data, const string &name, string &buf) {
708 0 : buf.append("<" + name + "> ");
709 :
710 0 : buf.append(Short::toString(data));
711 :
712 0 : buf.append(" </" + name + "> ");
713 0 : }
714 :
715 :
716 :
717 :
718 0 : void Parser::toXML(vector<short> data, const string &name, string &buf) {
719 0 : buf.append("<" + name + "> ");
720 0 : buf.append("1 ");
721 0 : buf.append(Integer::toString(data.size()));
722 0 : buf.append(" ");
723 0 : for (unsigned int i = 0; i < data.size(); ++i) {
724 :
725 0 : buf.append(Short::toString(data[i]));
726 :
727 0 : buf.append(" ");
728 : }
729 0 : buf.append(" </" + name + "> ");
730 0 : }
731 :
732 0 : void Parser::toXML(vector< vector<short> > data, const string &name, string &buf) {
733 0 : buf.append("<" + name + "> ");
734 0 : buf.append("2 ");
735 0 : buf.append(Integer::toString(data.size()));
736 0 : buf.append(" ");
737 0 : buf.append(Integer::toString(data[0].size()));
738 0 : buf.append(" ");
739 0 : for (unsigned int i = 0; i < data.size(); ++i) {
740 0 : for (unsigned int j = 0; j < data[i].size(); ++j) {
741 :
742 0 : buf.append(Short::toString(data[i][j]));
743 :
744 0 : buf.append(" ");
745 : }
746 : }
747 0 : buf.append(" </" + name + "> ");
748 0 : }
749 :
750 0 : void Parser::toXML(vector< vector< vector<short> > > data, const string &name, string &buf) {
751 0 : buf.append("<" + name + "> ");
752 0 : buf.append("3 ");
753 0 : buf.append(Integer::toString(data.size()));
754 0 : buf.append(" ");
755 0 : buf.append(Integer::toString(data[0].size()));
756 0 : buf.append(" ");
757 0 : buf.append(Integer::toString(data[0][0].size()));
758 0 : buf.append(" ");
759 0 : for (unsigned int i = 0; i < data.size(); ++i) {
760 0 : for (unsigned int j = 0; j < data[i].size(); ++j) {
761 0 : for (unsigned int k = 0; k < data[i][j].size(); ++k) {
762 :
763 0 : buf.append(Short::toString(data[i][j][k]));
764 :
765 0 : buf.append(" ");
766 : }
767 : }
768 : }
769 0 : buf.append(" </" + name + "> ");
770 0 : }
771 :
772 0 : void Parser::toXML(vector<vector< vector< vector<short> > > >data, const string &name, string &buf) {
773 0 : buf.append("<" + name + "> ");
774 0 : buf.append("4 ");
775 0 : buf.append(Integer::toString(data.size()));
776 0 : buf.append(" ");
777 0 : buf.append(Integer::toString(data[0].size()));
778 0 : buf.append(" ");
779 0 : buf.append(Integer::toString(data[0][0].size()));
780 0 : buf.append(" ");
781 0 : buf.append(Integer::toString(data[0][0][0].size()));
782 0 : buf.append(" ");
783 0 : for (unsigned int i = 0; i < data.size(); ++i) {
784 0 : for (unsigned int j = 0; j < data[i].size(); ++j) {
785 0 : for (unsigned int k = 0; k < data[i][j].size(); ++k) {
786 0 : for (unsigned int l = 0; l < data[i][j][k].size(); l++) {
787 :
788 0 : buf.append(Short::toString(data[i][j][k][l]));
789 :
790 0 : buf.append(" ");
791 : }
792 : }
793 : }
794 : }
795 0 : buf.append(" </" + name + "> ");
796 0 : }
797 :
798 :
799 :
800 :
801 :
802 :
803 0 : short Parser::getShort(const string &name, const string &tableName, const string &xmlDoc)
804 : {
805 0 : string xmlField = Parser::getField(xmlDoc,name);
806 0 : if (xmlField.length() == 0)
807 0 : throw ConversionException("Error: Missing field \"" +
808 0 : name + "\" or invalid syntax",tableName);
809 :
810 : try {
811 0 : short data = Short::parseShort(xmlField);
812 0 : return data;
813 0 : } catch (const NumberFormatException &e) {
814 0 : throw ConversionException("Error: Field \"" +
815 0 : name + "\": " + e.getMessage(), tableName);
816 0 : }
817 :
818 0 : }
819 :
820 0 : vector<short> Parser::get1DShort(const string &name, const string &tableName, const string &xmlDoc)
821 : {
822 0 : string xmlField = Parser::getField(xmlDoc,name);
823 0 : if (xmlField.length() == 0) {
824 0 : throw ConversionException("Error: Field \"" +
825 0 : name + "\": Invalid XML syntax", tableName);
826 : }
827 0 : StringTokenizer t(xmlField," ");
828 : try {
829 0 : int ndim = Integer::parseInt(t.nextToken());
830 0 : if (ndim != 1) {
831 0 : throw ConversionException("Error: Field \"" +
832 0 : name + "\": Invalid array format", tableName);
833 : }
834 0 : int dim0 = Integer::parseInt(t.nextToken());
835 0 : vector<short> value (dim0);
836 0 : if (dim0 == 0)
837 0 : return value;
838 0 : for (int i = 0; i < dim0; ++i) {
839 :
840 0 : value[i] = Short::parseShort(t.nextToken());
841 :
842 : }
843 0 : if (t.hasMoreTokens()) {
844 0 : throw ConversionException("Error: Field \"" +
845 0 : name + "\": Syntax error.", tableName);
846 : }
847 0 : return value;
848 0 : } catch (const NumberFormatException &e) {
849 0 : throw ConversionException("Error: Field \"" +
850 0 : name + "\": " + e.getMessage(), tableName);
851 0 : } catch (const OutOfBoundsException &e) {
852 0 : throw ConversionException("Error: Field \"" +
853 0 : name + "\": Unexpected end of string", tableName);
854 0 : } catch (const TagFormatException &e) {
855 0 : throw ConversionException("Error: Field \"" +
856 0 : name + "\": " + e.getMessage(), tableName);
857 0 : }
858 0 : }
859 :
860 0 : vector< vector<short> > Parser::get2DShort(const string &name, const string &tableName, const string &xmlDoc)
861 : {
862 0 : string xmlField = Parser::getField(xmlDoc,name);
863 0 : if (xmlField.length() == 0) {
864 0 : throw ConversionException("Error: Field \"" +
865 0 : name + "\": Invalid XML syntax", tableName);
866 : }
867 0 : StringTokenizer t(xmlField," ");
868 : try {
869 0 : int ndim = Integer::parseInt(t.nextToken());
870 0 : if (ndim != 2) {
871 0 : throw ConversionException("Error: Field \"" +
872 0 : name + "\": Invalid array format", tableName);
873 : }
874 0 : int dim0 = Integer::parseInt(t.nextToken());
875 0 : int dim1 = Integer::parseInt(t.nextToken());
876 0 : vector< vector<short> > value;
877 :
878 0 : if (dim0 == 0 || dim1 == 0)
879 0 : return value;
880 :
881 0 : vector<short> v_aux;
882 0 : for (int i = 0; i < dim0; ++i) {
883 0 : v_aux.clear();
884 0 : for (int j = 0; j < dim1; ++j) {
885 :
886 0 : v_aux.push_back(Short::parseShort(t.nextToken()));
887 :
888 : }
889 0 : value.push_back(v_aux);
890 : }
891 0 : if (t.hasMoreTokens()) {
892 0 : throw ConversionException("Error: Field \"" +
893 0 : name + "\": Syntax error.", tableName);
894 : }
895 0 : return value;
896 0 : } catch (const NumberFormatException &e) {
897 0 : throw ConversionException("Error: Field \"" +
898 0 : name + "\": " + e.getMessage(), tableName);
899 0 : } catch (const OutOfBoundsException &e) {
900 0 : throw ConversionException("Error: Field \"" +
901 0 : name + "\": Unexpected end of string", tableName);
902 0 : } catch (const TagFormatException &e) {
903 0 : throw ConversionException("Error: Field \"" +
904 0 : name + "\": " + e.getMessage(), tableName);
905 0 : }
906 0 : }
907 :
908 0 : vector< vector< vector<short> > > Parser::get3DShort(const string &name, const string &tableName, const string &xmlDoc)
909 : {
910 0 : string xmlField = Parser::getField(xmlDoc,name);
911 0 : if (xmlField.length() == 0) {
912 0 : throw ConversionException("Error: Field \"" +
913 0 : name + "\": Invalid XML syntax", tableName);
914 : }
915 0 : StringTokenizer t(xmlField," ");
916 : try {
917 0 : int ndim = Integer::parseInt(t.nextToken());
918 0 : if (ndim != 3) {
919 0 : throw ConversionException("Error: Field \"" +
920 0 : name + "\": Invalid array format", tableName);
921 : }
922 0 : int dim0 = Integer::parseInt(t.nextToken());
923 0 : int dim1 = Integer::parseInt(t.nextToken());
924 0 : int dim2 = Integer::parseInt(t.nextToken());
925 0 : vector< vector< vector<short> > > value ;
926 0 : if (dim0 == 0 || dim1 == 0 || dim2 == 0)
927 0 : return value;
928 :
929 0 : vector<vector<short> > vv_aux;
930 0 : vector<short> v_aux;
931 0 : for (int i = 0; i < dim0; ++i) {
932 0 : vv_aux.clear();
933 0 : for (int j = 0; j < dim1; ++j) {
934 0 : v_aux.clear();
935 0 : for (int k = 0; k < dim2; ++k) {
936 :
937 0 : v_aux.push_back(Short::parseShort(t.nextToken()));
938 :
939 : }
940 0 : vv_aux.push_back(v_aux);
941 : }
942 0 : value.push_back(vv_aux);
943 : }
944 0 : if (t.hasMoreTokens()) {
945 0 : throw ConversionException("Error: Field \"" +
946 0 : name + "\": Syntax error.", tableName);
947 : }
948 0 : return value;
949 0 : } catch (const NumberFormatException &e) {
950 0 : throw ConversionException("Error: Field \"" +
951 0 : name + "\": " + e.getMessage(), tableName);
952 0 : } catch (const OutOfBoundsException &e) {
953 0 : throw ConversionException("Error: Field \"" +
954 0 : name + "\": Unexpected end of string", tableName);
955 0 : } catch (const TagFormatException &e) {
956 0 : throw ConversionException("Error: Field \"" +
957 0 : name + "\": " + e.getMessage(), tableName);
958 0 : }
959 0 : }
960 :
961 0 : vector< vector< vector< vector<short> > > >Parser::get4DShort(const string &name, const string &tableName, const string &xmlDoc)
962 : {
963 0 : string xmlField = Parser::getField(xmlDoc,name);
964 0 : if (xmlField.length() == 0) {
965 0 : throw ConversionException("Error: Field \"" +
966 0 : name + "\": Invalid XML syntax", tableName);
967 : }
968 0 : StringTokenizer t(xmlField," ");
969 : try {
970 0 : int ndim = Integer::parseInt(t.nextToken());
971 0 : if (ndim != 4) {
972 0 : throw ConversionException("Error: Field \"" +
973 0 : name + "\": Invalid array format", tableName);
974 : }
975 0 : int dim0 = Integer::parseInt(t.nextToken());
976 0 : int dim1 = Integer::parseInt(t.nextToken());
977 0 : int dim2 = Integer::parseInt(t.nextToken());
978 0 : int dim3 = Integer::parseInt(t.nextToken());
979 0 : vector<vector< vector< vector<short> > > >value;
980 0 : if (dim0 == 0 || dim1 == 0 || dim2 == 0 || dim3 == 0)
981 0 : return value;
982 :
983 0 : vector<vector<vector<short> > >vvv_aux;
984 0 : vector<vector< short> > vv_aux;
985 0 : vector<short> v_aux;
986 0 : for (int i = 0; i < dim0; ++i) {
987 0 : vvv_aux.clear();
988 0 : for (int j = 0; j < dim1; ++j) {
989 0 : vv_aux.clear();
990 0 : for (int k = 0; k < dim2; ++k) {
991 0 : v_aux.clear();
992 0 : for (int l = 0; l < dim3; l++) {
993 :
994 0 : v_aux.push_back(Short::parseShort(t.nextToken()));
995 :
996 : }
997 0 : vv_aux.push_back(v_aux);
998 : }
999 0 : vvv_aux.push_back(vv_aux);
1000 : }
1001 0 : value.push_back(vvv_aux);
1002 : }
1003 0 : if (t.hasMoreTokens()) {
1004 0 : throw ConversionException("Error: Field \"" +
1005 0 : name + "\": Syntax error.", tableName);
1006 : }
1007 0 : return value;
1008 0 : } catch (const NumberFormatException &e) {
1009 0 : throw ConversionException("Error: Field \"" +
1010 0 : name + "\": " + e.getMessage(), tableName);
1011 0 : } catch (const OutOfBoundsException &e) {
1012 0 : throw ConversionException("Error: Field \"" +
1013 0 : name + "\": Unexpected end of string", tableName);
1014 0 : } catch (const TagFormatException &e) {
1015 0 : throw ConversionException("Error: Field \"" +
1016 0 : name + "\": " + e.getMessage(), tableName);
1017 0 : }
1018 0 : }
1019 :
1020 :
1021 :
1022 :
1023 :
1024 : // Field type: int64_t
1025 :
1026 0 : void Parser::toXML(int64_t data, const string &name, string &buf) {
1027 0 : buf.append("<" + name + "> ");
1028 :
1029 0 : buf.append(Long::toString(data));
1030 :
1031 0 : buf.append(" </" + name + "> ");
1032 0 : }
1033 :
1034 :
1035 :
1036 :
1037 0 : void Parser::toXML(vector<int64_t> data, const string &name, string &buf) {
1038 0 : buf.append("<" + name + "> ");
1039 0 : buf.append("1 ");
1040 0 : buf.append(Integer::toString(data.size()));
1041 0 : buf.append(" ");
1042 0 : for (unsigned int i = 0; i < data.size(); ++i) {
1043 :
1044 0 : buf.append(Long::toString(data[i]));
1045 :
1046 0 : buf.append(" ");
1047 : }
1048 0 : buf.append(" </" + name + "> ");
1049 0 : }
1050 :
1051 0 : void Parser::toXML(vector< vector<int64_t> > data, const string &name, string &buf) {
1052 0 : buf.append("<" + name + "> ");
1053 0 : buf.append("2 ");
1054 0 : buf.append(Integer::toString(data.size()));
1055 0 : buf.append(" ");
1056 0 : buf.append(Integer::toString(data[0].size()));
1057 0 : buf.append(" ");
1058 0 : for (unsigned int i = 0; i < data.size(); ++i) {
1059 0 : for (unsigned int j = 0; j < data[i].size(); ++j) {
1060 :
1061 0 : buf.append(Long::toString(data[i][j]));
1062 :
1063 0 : buf.append(" ");
1064 : }
1065 : }
1066 0 : buf.append(" </" + name + "> ");
1067 0 : }
1068 :
1069 0 : void Parser::toXML(vector< vector< vector<int64_t> > > data, const string &name, string &buf) {
1070 0 : buf.append("<" + name + "> ");
1071 0 : buf.append("3 ");
1072 0 : buf.append(Integer::toString(data.size()));
1073 0 : buf.append(" ");
1074 0 : buf.append(Integer::toString(data[0].size()));
1075 0 : buf.append(" ");
1076 0 : buf.append(Integer::toString(data[0][0].size()));
1077 0 : buf.append(" ");
1078 0 : for (unsigned int i = 0; i < data.size(); ++i) {
1079 0 : for (unsigned int j = 0; j < data[i].size(); ++j) {
1080 0 : for (unsigned int k = 0; k < data[i][j].size(); ++k) {
1081 :
1082 0 : buf.append(Long::toString(data[i][j][k]));
1083 :
1084 0 : buf.append(" ");
1085 : }
1086 : }
1087 : }
1088 0 : buf.append(" </" + name + "> ");
1089 0 : }
1090 :
1091 0 : void Parser::toXML(vector<vector< vector< vector<int64_t> > > >data, const string &name, string &buf) {
1092 0 : buf.append("<" + name + "> ");
1093 0 : buf.append("4 ");
1094 0 : buf.append(Integer::toString(data.size()));
1095 0 : buf.append(" ");
1096 0 : buf.append(Integer::toString(data[0].size()));
1097 0 : buf.append(" ");
1098 0 : buf.append(Integer::toString(data[0][0].size()));
1099 0 : buf.append(" ");
1100 0 : buf.append(Integer::toString(data[0][0][0].size()));
1101 0 : buf.append(" ");
1102 0 : for (unsigned int i = 0; i < data.size(); ++i) {
1103 0 : for (unsigned int j = 0; j < data[i].size(); ++j) {
1104 0 : for (unsigned int k = 0; k < data[i][j].size(); ++k) {
1105 0 : for (unsigned int l = 0; l < data[i][j][k].size(); l++) {
1106 :
1107 0 : buf.append(Long::toString(data[i][j][k][l]));
1108 :
1109 0 : buf.append(" ");
1110 : }
1111 : }
1112 : }
1113 : }
1114 0 : buf.append(" </" + name + "> ");
1115 0 : }
1116 :
1117 :
1118 :
1119 :
1120 :
1121 :
1122 0 : int64_t Parser::getLong(const string &name, const string &tableName, const string &xmlDoc)
1123 : {
1124 0 : string xmlField = Parser::getField(xmlDoc,name);
1125 0 : if (xmlField.length() == 0)
1126 0 : throw ConversionException("Error: Missing field \"" +
1127 0 : name + "\" or invalid syntax",tableName);
1128 :
1129 : try {
1130 0 : int64_t data = Long::parseLong(xmlField);
1131 0 : return data;
1132 0 : } catch (const NumberFormatException &e) {
1133 0 : throw ConversionException("Error: Field \"" +
1134 0 : name + "\": " + e.getMessage(), tableName);
1135 0 : }
1136 :
1137 0 : }
1138 :
1139 0 : vector<int64_t> Parser::get1DLong(const string &name, const string &tableName, const string &xmlDoc)
1140 : {
1141 0 : string xmlField = Parser::getField(xmlDoc,name);
1142 0 : if (xmlField.length() == 0) {
1143 0 : throw ConversionException("Error: Field \"" +
1144 0 : name + "\": Invalid XML syntax", tableName);
1145 : }
1146 0 : StringTokenizer t(xmlField," ");
1147 : try {
1148 0 : int ndim = Integer::parseInt(t.nextToken());
1149 0 : if (ndim != 1) {
1150 0 : throw ConversionException("Error: Field \"" +
1151 0 : name + "\": Invalid array format", tableName);
1152 : }
1153 0 : int dim0 = Integer::parseInt(t.nextToken());
1154 0 : vector<int64_t> value (dim0);
1155 0 : if (dim0 == 0)
1156 0 : return value;
1157 0 : for (int i = 0; i < dim0; ++i) {
1158 :
1159 0 : value[i] = Long::parseLong(t.nextToken());
1160 :
1161 : }
1162 0 : if (t.hasMoreTokens()) {
1163 0 : throw ConversionException("Error: Field \"" +
1164 0 : name + "\": Syntax error.", tableName);
1165 : }
1166 0 : return value;
1167 0 : } catch (const NumberFormatException &e) {
1168 0 : throw ConversionException("Error: Field \"" +
1169 0 : name + "\": " + e.getMessage(), tableName);
1170 0 : } catch (const OutOfBoundsException &e) {
1171 0 : throw ConversionException("Error: Field \"" +
1172 0 : name + "\": Unexpected end of string", tableName);
1173 0 : } catch (const TagFormatException &e) {
1174 0 : throw ConversionException("Error: Field \"" +
1175 0 : name + "\": " + e.getMessage(), tableName);
1176 0 : }
1177 0 : }
1178 :
1179 0 : vector< vector<int64_t> > Parser::get2DLong(const string &name, const string &tableName, const string &xmlDoc)
1180 : {
1181 0 : string xmlField = Parser::getField(xmlDoc,name);
1182 0 : if (xmlField.length() == 0) {
1183 0 : throw ConversionException("Error: Field \"" +
1184 0 : name + "\": Invalid XML syntax", tableName);
1185 : }
1186 0 : StringTokenizer t(xmlField," ");
1187 : try {
1188 0 : int ndim = Integer::parseInt(t.nextToken());
1189 0 : if (ndim != 2) {
1190 0 : throw ConversionException("Error: Field \"" +
1191 0 : name + "\": Invalid array format", tableName);
1192 : }
1193 0 : int dim0 = Integer::parseInt(t.nextToken());
1194 0 : int dim1 = Integer::parseInt(t.nextToken());
1195 0 : vector< vector<int64_t> > value;
1196 :
1197 0 : if (dim0 == 0 || dim1 == 0)
1198 0 : return value;
1199 :
1200 0 : vector<int64_t> v_aux;
1201 0 : for (int i = 0; i < dim0; ++i) {
1202 0 : v_aux.clear();
1203 0 : for (int j = 0; j < dim1; ++j) {
1204 :
1205 0 : v_aux.push_back(Long::parseLong(t.nextToken()));
1206 :
1207 : }
1208 0 : value.push_back(v_aux);
1209 : }
1210 0 : if (t.hasMoreTokens()) {
1211 0 : throw ConversionException("Error: Field \"" +
1212 0 : name + "\": Syntax error.", tableName);
1213 : }
1214 0 : return value;
1215 0 : } catch (const NumberFormatException &e) {
1216 0 : throw ConversionException("Error: Field \"" +
1217 0 : name + "\": " + e.getMessage(), tableName);
1218 0 : } catch (const OutOfBoundsException &e) {
1219 0 : throw ConversionException("Error: Field \"" +
1220 0 : name + "\": Unexpected end of string", tableName);
1221 0 : } catch (const TagFormatException &e) {
1222 0 : throw ConversionException("Error: Field \"" +
1223 0 : name + "\": " + e.getMessage(), tableName);
1224 0 : }
1225 0 : }
1226 :
1227 0 : vector< vector< vector<int64_t> > > Parser::get3DLong(const string &name, const string &tableName, const string &xmlDoc)
1228 : {
1229 0 : string xmlField = Parser::getField(xmlDoc,name);
1230 0 : if (xmlField.length() == 0) {
1231 0 : throw ConversionException("Error: Field \"" +
1232 0 : name + "\": Invalid XML syntax", tableName);
1233 : }
1234 0 : StringTokenizer t(xmlField," ");
1235 : try {
1236 0 : int ndim = Integer::parseInt(t.nextToken());
1237 0 : if (ndim != 3) {
1238 0 : throw ConversionException("Error: Field \"" +
1239 0 : name + "\": Invalid array format", tableName);
1240 : }
1241 0 : int dim0 = Integer::parseInt(t.nextToken());
1242 0 : int dim1 = Integer::parseInt(t.nextToken());
1243 0 : int dim2 = Integer::parseInt(t.nextToken());
1244 0 : vector< vector< vector<int64_t> > > value ;
1245 0 : if (dim0 == 0 || dim1 == 0 || dim2 == 0)
1246 0 : return value;
1247 :
1248 0 : vector<vector<int64_t> > vv_aux;
1249 0 : vector<int64_t> v_aux;
1250 0 : for (int i = 0; i < dim0; ++i) {
1251 0 : vv_aux.clear();
1252 0 : for (int j = 0; j < dim1; ++j) {
1253 0 : v_aux.clear();
1254 0 : for (int k = 0; k < dim2; ++k) {
1255 :
1256 0 : v_aux.push_back(Long::parseLong(t.nextToken()));
1257 :
1258 : }
1259 0 : vv_aux.push_back(v_aux);
1260 : }
1261 0 : value.push_back(vv_aux);
1262 : }
1263 0 : if (t.hasMoreTokens()) {
1264 0 : throw ConversionException("Error: Field \"" +
1265 0 : name + "\": Syntax error.", tableName);
1266 : }
1267 0 : return value;
1268 0 : } catch (const NumberFormatException &e) {
1269 0 : throw ConversionException("Error: Field \"" +
1270 0 : name + "\": " + e.getMessage(), tableName);
1271 0 : } catch (const OutOfBoundsException &e) {
1272 0 : throw ConversionException("Error: Field \"" +
1273 0 : name + "\": Unexpected end of string", tableName);
1274 0 : } catch (const TagFormatException &e) {
1275 0 : throw ConversionException("Error: Field \"" +
1276 0 : name + "\": " + e.getMessage(), tableName);
1277 0 : }
1278 0 : }
1279 :
1280 0 : vector< vector< vector< vector<int64_t> > > >Parser::get4DLong(const string &name, const string &tableName, const string &xmlDoc)
1281 : {
1282 0 : string xmlField = Parser::getField(xmlDoc,name);
1283 0 : if (xmlField.length() == 0) {
1284 0 : throw ConversionException("Error: Field \"" +
1285 0 : name + "\": Invalid XML syntax", tableName);
1286 : }
1287 0 : StringTokenizer t(xmlField," ");
1288 : try {
1289 0 : int ndim = Integer::parseInt(t.nextToken());
1290 0 : if (ndim != 4) {
1291 0 : throw ConversionException("Error: Field \"" +
1292 0 : name + "\": Invalid array format", tableName);
1293 : }
1294 0 : int dim0 = Integer::parseInt(t.nextToken());
1295 0 : int dim1 = Integer::parseInt(t.nextToken());
1296 0 : int dim2 = Integer::parseInt(t.nextToken());
1297 0 : int dim3 = Integer::parseInt(t.nextToken());
1298 0 : vector<vector< vector< vector<int64_t> > > >value;
1299 0 : if (dim0 == 0 || dim1 == 0 || dim2 == 0 || dim3 == 0)
1300 0 : return value;
1301 :
1302 0 : vector<vector<vector<int64_t> > >vvv_aux;
1303 0 : vector<vector< int64_t> > vv_aux;
1304 0 : vector<int64_t> v_aux;
1305 0 : for (int i = 0; i < dim0; ++i) {
1306 0 : vvv_aux.clear();
1307 0 : for (int j = 0; j < dim1; ++j) {
1308 0 : vv_aux.clear();
1309 0 : for (int k = 0; k < dim2; ++k) {
1310 0 : v_aux.clear();
1311 0 : for (int l = 0; l < dim3; l++) {
1312 :
1313 0 : v_aux.push_back(Long::parseLong(t.nextToken()));
1314 :
1315 : }
1316 0 : vv_aux.push_back(v_aux);
1317 : }
1318 0 : vvv_aux.push_back(vv_aux);
1319 : }
1320 0 : value.push_back(vvv_aux);
1321 : }
1322 0 : if (t.hasMoreTokens()) {
1323 0 : throw ConversionException("Error: Field \"" +
1324 0 : name + "\": Syntax error.", tableName);
1325 : }
1326 0 : return value;
1327 0 : } catch (const NumberFormatException &e) {
1328 0 : throw ConversionException("Error: Field \"" +
1329 0 : name + "\": " + e.getMessage(), tableName);
1330 0 : } catch (const OutOfBoundsException &e) {
1331 0 : throw ConversionException("Error: Field \"" +
1332 0 : name + "\": Unexpected end of string", tableName);
1333 0 : } catch (const TagFormatException &e) {
1334 0 : throw ConversionException("Error: Field \"" +
1335 0 : name + "\": " + e.getMessage(), tableName);
1336 0 : }
1337 0 : }
1338 :
1339 :
1340 :
1341 :
1342 :
1343 : // Field type: char
1344 :
1345 0 : void Parser::toXML(char data, const string &name, string &buf) {
1346 0 : buf.append("<" + name + "> ");
1347 :
1348 0 : buf.append(Byte::toString(data));
1349 :
1350 0 : buf.append(" </" + name + "> ");
1351 0 : }
1352 :
1353 :
1354 :
1355 :
1356 0 : void Parser::toXML(vector<char> data, const string &name, string &buf) {
1357 0 : buf.append("<" + name + "> ");
1358 0 : buf.append("1 ");
1359 0 : buf.append(Integer::toString(data.size()));
1360 0 : buf.append(" ");
1361 0 : for (unsigned int i = 0; i < data.size(); ++i) {
1362 :
1363 0 : buf.append(Byte::toString(data[i]));
1364 :
1365 0 : buf.append(" ");
1366 : }
1367 0 : buf.append(" </" + name + "> ");
1368 0 : }
1369 :
1370 0 : void Parser::toXML(vector< vector<char> > data, const string &name, string &buf) {
1371 0 : buf.append("<" + name + "> ");
1372 0 : buf.append("2 ");
1373 0 : buf.append(Integer::toString(data.size()));
1374 0 : buf.append(" ");
1375 0 : buf.append(Integer::toString(data[0].size()));
1376 0 : buf.append(" ");
1377 0 : for (unsigned int i = 0; i < data.size(); ++i) {
1378 0 : for (unsigned int j = 0; j < data[i].size(); ++j) {
1379 :
1380 0 : buf.append(Byte::toString(data[i][j]));
1381 :
1382 0 : buf.append(" ");
1383 : }
1384 : }
1385 0 : buf.append(" </" + name + "> ");
1386 0 : }
1387 :
1388 0 : void Parser::toXML(vector< vector< vector<char> > > data, const string &name, string &buf) {
1389 0 : buf.append("<" + name + "> ");
1390 0 : buf.append("3 ");
1391 0 : buf.append(Integer::toString(data.size()));
1392 0 : buf.append(" ");
1393 0 : buf.append(Integer::toString(data[0].size()));
1394 0 : buf.append(" ");
1395 0 : buf.append(Integer::toString(data[0][0].size()));
1396 0 : buf.append(" ");
1397 0 : for (unsigned int i = 0; i < data.size(); ++i) {
1398 0 : for (unsigned int j = 0; j < data[i].size(); ++j) {
1399 0 : for (unsigned int k = 0; k < data[i][j].size(); ++k) {
1400 :
1401 0 : buf.append(Byte::toString(data[i][j][k]));
1402 :
1403 0 : buf.append(" ");
1404 : }
1405 : }
1406 : }
1407 0 : buf.append(" </" + name + "> ");
1408 0 : }
1409 :
1410 0 : void Parser::toXML(vector<vector< vector< vector<char> > > >data, const string &name, string &buf) {
1411 0 : buf.append("<" + name + "> ");
1412 0 : buf.append("4 ");
1413 0 : buf.append(Integer::toString(data.size()));
1414 0 : buf.append(" ");
1415 0 : buf.append(Integer::toString(data[0].size()));
1416 0 : buf.append(" ");
1417 0 : buf.append(Integer::toString(data[0][0].size()));
1418 0 : buf.append(" ");
1419 0 : buf.append(Integer::toString(data[0][0][0].size()));
1420 0 : buf.append(" ");
1421 0 : for (unsigned int i = 0; i < data.size(); ++i) {
1422 0 : for (unsigned int j = 0; j < data[i].size(); ++j) {
1423 0 : for (unsigned int k = 0; k < data[i][j].size(); ++k) {
1424 0 : for (unsigned int l = 0; l < data[i][j][k].size(); l++) {
1425 :
1426 0 : buf.append(Byte::toString(data[i][j][k][l]));
1427 :
1428 0 : buf.append(" ");
1429 : }
1430 : }
1431 : }
1432 : }
1433 0 : buf.append(" </" + name + "> ");
1434 0 : }
1435 :
1436 :
1437 :
1438 :
1439 :
1440 :
1441 0 : char Parser::getByte(const string &name, const string &tableName, const string &xmlDoc)
1442 : {
1443 0 : string xmlField = Parser::getField(xmlDoc,name);
1444 0 : if (xmlField.length() == 0)
1445 0 : throw ConversionException("Error: Missing field \"" +
1446 0 : name + "\" or invalid syntax",tableName);
1447 :
1448 : try {
1449 0 : char data = Byte::parseByte(xmlField);
1450 0 : return data;
1451 0 : } catch (const NumberFormatException &e) {
1452 0 : throw ConversionException("Error: Field \"" +
1453 0 : name + "\": " + e.getMessage(), tableName);
1454 0 : }
1455 :
1456 0 : }
1457 :
1458 0 : vector<char> Parser::get1DByte(const string &name, const string &tableName, const string &xmlDoc)
1459 : {
1460 0 : string xmlField = Parser::getField(xmlDoc,name);
1461 0 : if (xmlField.length() == 0) {
1462 0 : throw ConversionException("Error: Field \"" +
1463 0 : name + "\": Invalid XML syntax", tableName);
1464 : }
1465 0 : StringTokenizer t(xmlField," ");
1466 : try {
1467 0 : int ndim = Integer::parseInt(t.nextToken());
1468 0 : if (ndim != 1) {
1469 0 : throw ConversionException("Error: Field \"" +
1470 0 : name + "\": Invalid array format", tableName);
1471 : }
1472 0 : int dim0 = Integer::parseInt(t.nextToken());
1473 0 : vector<char> value (dim0);
1474 0 : if (dim0 == 0)
1475 0 : return value;
1476 0 : for (int i = 0; i < dim0; ++i) {
1477 :
1478 0 : value[i] = Byte::parseByte(t.nextToken());
1479 :
1480 : }
1481 0 : if (t.hasMoreTokens()) {
1482 0 : throw ConversionException("Error: Field \"" +
1483 0 : name + "\": Syntax error.", tableName);
1484 : }
1485 0 : return value;
1486 0 : } catch (const NumberFormatException &e) {
1487 0 : throw ConversionException("Error: Field \"" +
1488 0 : name + "\": " + e.getMessage(), tableName);
1489 0 : } catch (const OutOfBoundsException &e) {
1490 0 : throw ConversionException("Error: Field \"" +
1491 0 : name + "\": Unexpected end of string", tableName);
1492 0 : } catch (const TagFormatException &e) {
1493 0 : throw ConversionException("Error: Field \"" +
1494 0 : name + "\": " + e.getMessage(), tableName);
1495 0 : }
1496 0 : }
1497 :
1498 0 : vector< vector<char> > Parser::get2DByte(const string &name, const string &tableName, const string &xmlDoc)
1499 : {
1500 0 : string xmlField = Parser::getField(xmlDoc,name);
1501 0 : if (xmlField.length() == 0) {
1502 0 : throw ConversionException("Error: Field \"" +
1503 0 : name + "\": Invalid XML syntax", tableName);
1504 : }
1505 0 : StringTokenizer t(xmlField," ");
1506 : try {
1507 0 : int ndim = Integer::parseInt(t.nextToken());
1508 0 : if (ndim != 2) {
1509 0 : throw ConversionException("Error: Field \"" +
1510 0 : name + "\": Invalid array format", tableName);
1511 : }
1512 0 : int dim0 = Integer::parseInt(t.nextToken());
1513 0 : int dim1 = Integer::parseInt(t.nextToken());
1514 0 : vector< vector<char> > value;
1515 :
1516 0 : if (dim0 == 0 || dim1 == 0)
1517 0 : return value;
1518 :
1519 0 : vector<char> v_aux;
1520 0 : for (int i = 0; i < dim0; ++i) {
1521 0 : v_aux.clear();
1522 0 : for (int j = 0; j < dim1; ++j) {
1523 :
1524 0 : v_aux.push_back(Byte::parseByte(t.nextToken()));
1525 :
1526 : }
1527 0 : value.push_back(v_aux);
1528 : }
1529 0 : if (t.hasMoreTokens()) {
1530 0 : throw ConversionException("Error: Field \"" +
1531 0 : name + "\": Syntax error.", tableName);
1532 : }
1533 0 : return value;
1534 0 : } catch (const NumberFormatException &e) {
1535 0 : throw ConversionException("Error: Field \"" +
1536 0 : name + "\": " + e.getMessage(), tableName);
1537 0 : } catch (const OutOfBoundsException &e) {
1538 0 : throw ConversionException("Error: Field \"" +
1539 0 : name + "\": Unexpected end of string", tableName);
1540 0 : } catch (const TagFormatException &e) {
1541 0 : throw ConversionException("Error: Field \"" +
1542 0 : name + "\": " + e.getMessage(), tableName);
1543 0 : }
1544 0 : }
1545 :
1546 0 : vector< vector< vector<char> > > Parser::get3DByte(const string &name, const string &tableName, const string &xmlDoc)
1547 : {
1548 0 : string xmlField = Parser::getField(xmlDoc,name);
1549 0 : if (xmlField.length() == 0) {
1550 0 : throw ConversionException("Error: Field \"" +
1551 0 : name + "\": Invalid XML syntax", tableName);
1552 : }
1553 0 : StringTokenizer t(xmlField," ");
1554 : try {
1555 0 : int ndim = Integer::parseInt(t.nextToken());
1556 0 : if (ndim != 3) {
1557 0 : throw ConversionException("Error: Field \"" +
1558 0 : name + "\": Invalid array format", tableName);
1559 : }
1560 0 : int dim0 = Integer::parseInt(t.nextToken());
1561 0 : int dim1 = Integer::parseInt(t.nextToken());
1562 0 : int dim2 = Integer::parseInt(t.nextToken());
1563 0 : vector< vector< vector<char> > > value ;
1564 0 : if (dim0 == 0 || dim1 == 0 || dim2 == 0)
1565 0 : return value;
1566 :
1567 0 : vector<vector<char> > vv_aux;
1568 0 : vector<char> v_aux;
1569 0 : for (int i = 0; i < dim0; ++i) {
1570 0 : vv_aux.clear();
1571 0 : for (int j = 0; j < dim1; ++j) {
1572 0 : v_aux.clear();
1573 0 : for (int k = 0; k < dim2; ++k) {
1574 :
1575 0 : v_aux.push_back(Byte::parseByte(t.nextToken()));
1576 :
1577 : }
1578 0 : vv_aux.push_back(v_aux);
1579 : }
1580 0 : value.push_back(vv_aux);
1581 : }
1582 0 : if (t.hasMoreTokens()) {
1583 0 : throw ConversionException("Error: Field \"" +
1584 0 : name + "\": Syntax error.", tableName);
1585 : }
1586 0 : return value;
1587 0 : } catch (const NumberFormatException &e) {
1588 0 : throw ConversionException("Error: Field \"" +
1589 0 : name + "\": " + e.getMessage(), tableName);
1590 0 : } catch (const OutOfBoundsException &e) {
1591 0 : throw ConversionException("Error: Field \"" +
1592 0 : name + "\": Unexpected end of string", tableName);
1593 0 : } catch (const TagFormatException &e) {
1594 0 : throw ConversionException("Error: Field \"" +
1595 0 : name + "\": " + e.getMessage(), tableName);
1596 0 : }
1597 0 : }
1598 :
1599 0 : vector< vector< vector< vector<char> > > >Parser::get4DByte(const string &name, const string &tableName, const string &xmlDoc)
1600 : {
1601 0 : string xmlField = Parser::getField(xmlDoc,name);
1602 0 : if (xmlField.length() == 0) {
1603 0 : throw ConversionException("Error: Field \"" +
1604 0 : name + "\": Invalid XML syntax", tableName);
1605 : }
1606 0 : StringTokenizer t(xmlField," ");
1607 : try {
1608 0 : int ndim = Integer::parseInt(t.nextToken());
1609 0 : if (ndim != 4) {
1610 0 : throw ConversionException("Error: Field \"" +
1611 0 : name + "\": Invalid array format", tableName);
1612 : }
1613 0 : int dim0 = Integer::parseInt(t.nextToken());
1614 0 : int dim1 = Integer::parseInt(t.nextToken());
1615 0 : int dim2 = Integer::parseInt(t.nextToken());
1616 0 : int dim3 = Integer::parseInt(t.nextToken());
1617 0 : vector<vector< vector< vector<char> > > >value;
1618 0 : if (dim0 == 0 || dim1 == 0 || dim2 == 0 || dim3 == 0)
1619 0 : return value;
1620 :
1621 0 : vector<vector<vector<char> > >vvv_aux;
1622 0 : vector<vector< char> > vv_aux;
1623 0 : vector<char> v_aux;
1624 0 : for (int i = 0; i < dim0; ++i) {
1625 0 : vvv_aux.clear();
1626 0 : for (int j = 0; j < dim1; ++j) {
1627 0 : vv_aux.clear();
1628 0 : for (int k = 0; k < dim2; ++k) {
1629 0 : v_aux.clear();
1630 0 : for (int l = 0; l < dim3; l++) {
1631 :
1632 0 : v_aux.push_back(Byte::parseByte(t.nextToken()));
1633 :
1634 : }
1635 0 : vv_aux.push_back(v_aux);
1636 : }
1637 0 : vvv_aux.push_back(vv_aux);
1638 : }
1639 0 : value.push_back(vvv_aux);
1640 : }
1641 0 : if (t.hasMoreTokens()) {
1642 0 : throw ConversionException("Error: Field \"" +
1643 0 : name + "\": Syntax error.", tableName);
1644 : }
1645 0 : return value;
1646 0 : } catch (const NumberFormatException &e) {
1647 0 : throw ConversionException("Error: Field \"" +
1648 0 : name + "\": " + e.getMessage(), tableName);
1649 0 : } catch (const OutOfBoundsException &e) {
1650 0 : throw ConversionException("Error: Field \"" +
1651 0 : name + "\": Unexpected end of string", tableName);
1652 0 : } catch (const TagFormatException &e) {
1653 0 : throw ConversionException("Error: Field \"" +
1654 0 : name + "\": " + e.getMessage(), tableName);
1655 0 : }
1656 0 : }
1657 :
1658 :
1659 :
1660 :
1661 :
1662 : // Field type: float
1663 :
1664 0 : void Parser::toXML(float data, const string &name, string &buf) {
1665 0 : buf.append("<" + name + "> ");
1666 :
1667 0 : buf.append(Float::toString(data));
1668 :
1669 0 : buf.append(" </" + name + "> ");
1670 0 : }
1671 :
1672 :
1673 :
1674 :
1675 0 : void Parser::toXML(vector<float> data, const string &name, string &buf) {
1676 0 : buf.append("<" + name + "> ");
1677 0 : buf.append("1 ");
1678 0 : buf.append(Integer::toString(data.size()));
1679 0 : buf.append(" ");
1680 0 : for (unsigned int i = 0; i < data.size(); ++i) {
1681 :
1682 0 : buf.append(Float::toString(data[i]));
1683 :
1684 0 : buf.append(" ");
1685 : }
1686 0 : buf.append(" </" + name + "> ");
1687 0 : }
1688 :
1689 0 : void Parser::toXML(vector< vector<float> > data, const string &name, string &buf) {
1690 0 : buf.append("<" + name + "> ");
1691 0 : buf.append("2 ");
1692 0 : buf.append(Integer::toString(data.size()));
1693 0 : buf.append(" ");
1694 0 : buf.append(Integer::toString(data[0].size()));
1695 0 : buf.append(" ");
1696 0 : for (unsigned int i = 0; i < data.size(); ++i) {
1697 0 : for (unsigned int j = 0; j < data[i].size(); ++j) {
1698 :
1699 0 : buf.append(Float::toString(data[i][j]));
1700 :
1701 0 : buf.append(" ");
1702 : }
1703 : }
1704 0 : buf.append(" </" + name + "> ");
1705 0 : }
1706 :
1707 0 : void Parser::toXML(vector< vector< vector<float> > > data, const string &name, string &buf) {
1708 0 : buf.append("<" + name + "> ");
1709 0 : buf.append("3 ");
1710 0 : buf.append(Integer::toString(data.size()));
1711 0 : buf.append(" ");
1712 0 : buf.append(Integer::toString(data[0].size()));
1713 0 : buf.append(" ");
1714 0 : buf.append(Integer::toString(data[0][0].size()));
1715 0 : buf.append(" ");
1716 0 : for (unsigned int i = 0; i < data.size(); ++i) {
1717 0 : for (unsigned int j = 0; j < data[i].size(); ++j) {
1718 0 : for (unsigned int k = 0; k < data[i][j].size(); ++k) {
1719 :
1720 0 : buf.append(Float::toString(data[i][j][k]));
1721 :
1722 0 : buf.append(" ");
1723 : }
1724 : }
1725 : }
1726 0 : buf.append(" </" + name + "> ");
1727 0 : }
1728 :
1729 0 : void Parser::toXML(vector<vector< vector< vector<float> > > >data, const string &name, string &buf) {
1730 0 : buf.append("<" + name + "> ");
1731 0 : buf.append("4 ");
1732 0 : buf.append(Integer::toString(data.size()));
1733 0 : buf.append(" ");
1734 0 : buf.append(Integer::toString(data[0].size()));
1735 0 : buf.append(" ");
1736 0 : buf.append(Integer::toString(data[0][0].size()));
1737 0 : buf.append(" ");
1738 0 : buf.append(Integer::toString(data[0][0][0].size()));
1739 0 : buf.append(" ");
1740 0 : for (unsigned int i = 0; i < data.size(); ++i) {
1741 0 : for (unsigned int j = 0; j < data[i].size(); ++j) {
1742 0 : for (unsigned int k = 0; k < data[i][j].size(); ++k) {
1743 0 : for (unsigned int l = 0; l < data[i][j][k].size(); l++) {
1744 :
1745 0 : buf.append(Float::toString(data[i][j][k][l]));
1746 :
1747 0 : buf.append(" ");
1748 : }
1749 : }
1750 : }
1751 : }
1752 0 : buf.append(" </" + name + "> ");
1753 0 : }
1754 :
1755 :
1756 :
1757 :
1758 :
1759 :
1760 0 : float Parser::getFloat(const string &name, const string &tableName, const string &xmlDoc)
1761 : {
1762 0 : string xmlField = Parser::getField(xmlDoc,name);
1763 0 : if (xmlField.length() == 0)
1764 0 : throw ConversionException("Error: Missing field \"" +
1765 0 : name + "\" or invalid syntax",tableName);
1766 :
1767 : try {
1768 0 : float data = Float::parseFloat(xmlField);
1769 0 : return data;
1770 0 : } catch (const NumberFormatException &e) {
1771 0 : throw ConversionException("Error: Field \"" +
1772 0 : name + "\": " + e.getMessage(), tableName);
1773 0 : }
1774 :
1775 0 : }
1776 :
1777 0 : vector<float> Parser::get1DFloat(const string &name, const string &tableName, const string &xmlDoc)
1778 : {
1779 0 : string xmlField = Parser::getField(xmlDoc,name);
1780 0 : if (xmlField.length() == 0) {
1781 0 : throw ConversionException("Error: Field \"" +
1782 0 : name + "\": Invalid XML syntax", tableName);
1783 : }
1784 0 : StringTokenizer t(xmlField," ");
1785 : try {
1786 0 : int ndim = Integer::parseInt(t.nextToken());
1787 0 : if (ndim != 1) {
1788 0 : throw ConversionException("Error: Field \"" +
1789 0 : name + "\": Invalid array format", tableName);
1790 : }
1791 0 : int dim0 = Integer::parseInt(t.nextToken());
1792 0 : vector<float> value (dim0);
1793 0 : if (dim0 == 0)
1794 0 : return value;
1795 0 : for (int i = 0; i < dim0; ++i) {
1796 :
1797 0 : value[i] = Float::parseFloat(t.nextToken());
1798 :
1799 : }
1800 0 : if (t.hasMoreTokens()) {
1801 0 : throw ConversionException("Error: Field \"" +
1802 0 : name + "\": Syntax error.", tableName);
1803 : }
1804 0 : return value;
1805 0 : } catch (const NumberFormatException &e) {
1806 0 : throw ConversionException("Error: Field \"" +
1807 0 : name + "\": " + e.getMessage(), tableName);
1808 0 : } catch (const OutOfBoundsException &e) {
1809 0 : throw ConversionException("Error: Field \"" +
1810 0 : name + "\": Unexpected end of string", tableName);
1811 0 : } catch (const TagFormatException &e) {
1812 0 : throw ConversionException("Error: Field \"" +
1813 0 : name + "\": " + e.getMessage(), tableName);
1814 0 : }
1815 0 : }
1816 :
1817 0 : vector< vector<float> > Parser::get2DFloat(const string &name, const string &tableName, const string &xmlDoc)
1818 : {
1819 0 : string xmlField = Parser::getField(xmlDoc,name);
1820 0 : if (xmlField.length() == 0) {
1821 0 : throw ConversionException("Error: Field \"" +
1822 0 : name + "\": Invalid XML syntax", tableName);
1823 : }
1824 0 : StringTokenizer t(xmlField," ");
1825 : try {
1826 0 : int ndim = Integer::parseInt(t.nextToken());
1827 0 : if (ndim != 2) {
1828 0 : throw ConversionException("Error: Field \"" +
1829 0 : name + "\": Invalid array format", tableName);
1830 : }
1831 0 : int dim0 = Integer::parseInt(t.nextToken());
1832 0 : int dim1 = Integer::parseInt(t.nextToken());
1833 0 : vector< vector<float> > value;
1834 :
1835 0 : if (dim0 == 0 || dim1 == 0)
1836 0 : return value;
1837 :
1838 0 : vector<float> v_aux;
1839 0 : for (int i = 0; i < dim0; ++i) {
1840 0 : v_aux.clear();
1841 0 : for (int j = 0; j < dim1; ++j) {
1842 :
1843 0 : v_aux.push_back(Float::parseFloat(t.nextToken()));
1844 :
1845 : }
1846 0 : value.push_back(v_aux);
1847 : }
1848 0 : if (t.hasMoreTokens()) {
1849 0 : throw ConversionException("Error: Field \"" +
1850 0 : name + "\": Syntax error.", tableName);
1851 : }
1852 0 : return value;
1853 0 : } catch (const NumberFormatException &e) {
1854 0 : throw ConversionException("Error: Field \"" +
1855 0 : name + "\": " + e.getMessage(), tableName);
1856 0 : } catch (const OutOfBoundsException &e) {
1857 0 : throw ConversionException("Error: Field \"" +
1858 0 : name + "\": Unexpected end of string", tableName);
1859 0 : } catch (const TagFormatException &e) {
1860 0 : throw ConversionException("Error: Field \"" +
1861 0 : name + "\": " + e.getMessage(), tableName);
1862 0 : }
1863 0 : }
1864 :
1865 0 : vector< vector< vector<float> > > Parser::get3DFloat(const string &name, const string &tableName, const string &xmlDoc)
1866 : {
1867 0 : string xmlField = Parser::getField(xmlDoc,name);
1868 0 : if (xmlField.length() == 0) {
1869 0 : throw ConversionException("Error: Field \"" +
1870 0 : name + "\": Invalid XML syntax", tableName);
1871 : }
1872 0 : StringTokenizer t(xmlField," ");
1873 : try {
1874 0 : int ndim = Integer::parseInt(t.nextToken());
1875 0 : if (ndim != 3) {
1876 0 : throw ConversionException("Error: Field \"" +
1877 0 : name + "\": Invalid array format", tableName);
1878 : }
1879 0 : int dim0 = Integer::parseInt(t.nextToken());
1880 0 : int dim1 = Integer::parseInt(t.nextToken());
1881 0 : int dim2 = Integer::parseInt(t.nextToken());
1882 0 : vector< vector< vector<float> > > value ;
1883 0 : if (dim0 == 0 || dim1 == 0 || dim2 == 0)
1884 0 : return value;
1885 :
1886 0 : vector<vector<float> > vv_aux;
1887 0 : vector<float> v_aux;
1888 0 : for (int i = 0; i < dim0; ++i) {
1889 0 : vv_aux.clear();
1890 0 : for (int j = 0; j < dim1; ++j) {
1891 0 : v_aux.clear();
1892 0 : for (int k = 0; k < dim2; ++k) {
1893 :
1894 0 : v_aux.push_back(Float::parseFloat(t.nextToken()));
1895 :
1896 : }
1897 0 : vv_aux.push_back(v_aux);
1898 : }
1899 0 : value.push_back(vv_aux);
1900 : }
1901 0 : if (t.hasMoreTokens()) {
1902 0 : throw ConversionException("Error: Field \"" +
1903 0 : name + "\": Syntax error.", tableName);
1904 : }
1905 0 : return value;
1906 0 : } catch (const NumberFormatException &e) {
1907 0 : throw ConversionException("Error: Field \"" +
1908 0 : name + "\": " + e.getMessage(), tableName);
1909 0 : } catch (const OutOfBoundsException &e) {
1910 0 : throw ConversionException("Error: Field \"" +
1911 0 : name + "\": Unexpected end of string", tableName);
1912 0 : } catch (const TagFormatException &e) {
1913 0 : throw ConversionException("Error: Field \"" +
1914 0 : name + "\": " + e.getMessage(), tableName);
1915 0 : }
1916 0 : }
1917 :
1918 0 : vector< vector< vector< vector<float> > > >Parser::get4DFloat(const string &name, const string &tableName, const string &xmlDoc)
1919 : {
1920 0 : string xmlField = Parser::getField(xmlDoc,name);
1921 0 : if (xmlField.length() == 0) {
1922 0 : throw ConversionException("Error: Field \"" +
1923 0 : name + "\": Invalid XML syntax", tableName);
1924 : }
1925 0 : StringTokenizer t(xmlField," ");
1926 : try {
1927 0 : int ndim = Integer::parseInt(t.nextToken());
1928 0 : if (ndim != 4) {
1929 0 : throw ConversionException("Error: Field \"" +
1930 0 : name + "\": Invalid array format", tableName);
1931 : }
1932 0 : int dim0 = Integer::parseInt(t.nextToken());
1933 0 : int dim1 = Integer::parseInt(t.nextToken());
1934 0 : int dim2 = Integer::parseInt(t.nextToken());
1935 0 : int dim3 = Integer::parseInt(t.nextToken());
1936 0 : vector<vector< vector< vector<float> > > >value;
1937 0 : if (dim0 == 0 || dim1 == 0 || dim2 == 0 || dim3 == 0)
1938 0 : return value;
1939 :
1940 0 : vector<vector<vector<float> > >vvv_aux;
1941 0 : vector<vector< float> > vv_aux;
1942 0 : vector<float> v_aux;
1943 0 : for (int i = 0; i < dim0; ++i) {
1944 0 : vvv_aux.clear();
1945 0 : for (int j = 0; j < dim1; ++j) {
1946 0 : vv_aux.clear();
1947 0 : for (int k = 0; k < dim2; ++k) {
1948 0 : v_aux.clear();
1949 0 : for (int l = 0; l < dim3; l++) {
1950 :
1951 0 : v_aux.push_back(Float::parseFloat(t.nextToken()));
1952 :
1953 : }
1954 0 : vv_aux.push_back(v_aux);
1955 : }
1956 0 : vvv_aux.push_back(vv_aux);
1957 : }
1958 0 : value.push_back(vvv_aux);
1959 : }
1960 0 : if (t.hasMoreTokens()) {
1961 0 : throw ConversionException("Error: Field \"" +
1962 0 : name + "\": Syntax error.", tableName);
1963 : }
1964 0 : return value;
1965 0 : } catch (const NumberFormatException &e) {
1966 0 : throw ConversionException("Error: Field \"" +
1967 0 : name + "\": " + e.getMessage(), tableName);
1968 0 : } catch (const OutOfBoundsException &e) {
1969 0 : throw ConversionException("Error: Field \"" +
1970 0 : name + "\": Unexpected end of string", tableName);
1971 0 : } catch (const TagFormatException &e) {
1972 0 : throw ConversionException("Error: Field \"" +
1973 0 : name + "\": " + e.getMessage(), tableName);
1974 0 : }
1975 0 : }
1976 :
1977 :
1978 :
1979 :
1980 :
1981 : // Field type: double
1982 :
1983 0 : void Parser::toXML(double data, const string &name, string &buf) {
1984 0 : buf.append("<" + name + "> ");
1985 :
1986 0 : buf.append(Double::toString(data));
1987 :
1988 0 : buf.append(" </" + name + "> ");
1989 0 : }
1990 :
1991 :
1992 :
1993 :
1994 0 : void Parser::toXML(vector<double> data, const string &name, string &buf) {
1995 0 : buf.append("<" + name + "> ");
1996 0 : buf.append("1 ");
1997 0 : buf.append(Integer::toString(data.size()));
1998 0 : buf.append(" ");
1999 0 : for (unsigned int i = 0; i < data.size(); ++i) {
2000 :
2001 0 : buf.append(Double::toString(data[i]));
2002 :
2003 0 : buf.append(" ");
2004 : }
2005 0 : buf.append(" </" + name + "> ");
2006 0 : }
2007 :
2008 0 : void Parser::toXML(vector< vector<double> > data, const string &name, string &buf) {
2009 0 : buf.append("<" + name + "> ");
2010 0 : buf.append("2 ");
2011 0 : buf.append(Integer::toString(data.size()));
2012 0 : buf.append(" ");
2013 0 : buf.append(Integer::toString(data[0].size()));
2014 0 : buf.append(" ");
2015 0 : for (unsigned int i = 0; i < data.size(); ++i) {
2016 0 : for (unsigned int j = 0; j < data[i].size(); ++j) {
2017 :
2018 0 : buf.append(Double::toString(data[i][j]));
2019 :
2020 0 : buf.append(" ");
2021 : }
2022 : }
2023 0 : buf.append(" </" + name + "> ");
2024 0 : }
2025 :
2026 0 : void Parser::toXML(vector< vector< vector<double> > > data, const string &name, string &buf) {
2027 0 : buf.append("<" + name + "> ");
2028 0 : buf.append("3 ");
2029 0 : buf.append(Integer::toString(data.size()));
2030 0 : buf.append(" ");
2031 0 : buf.append(Integer::toString(data[0].size()));
2032 0 : buf.append(" ");
2033 0 : buf.append(Integer::toString(data[0][0].size()));
2034 0 : buf.append(" ");
2035 0 : for (unsigned int i = 0; i < data.size(); ++i) {
2036 0 : for (unsigned int j = 0; j < data[i].size(); ++j) {
2037 0 : for (unsigned int k = 0; k < data[i][j].size(); ++k) {
2038 :
2039 0 : buf.append(Double::toString(data[i][j][k]));
2040 :
2041 0 : buf.append(" ");
2042 : }
2043 : }
2044 : }
2045 0 : buf.append(" </" + name + "> ");
2046 0 : }
2047 :
2048 0 : void Parser::toXML(vector<vector< vector< vector<double> > > >data, const string &name, string &buf) {
2049 0 : buf.append("<" + name + "> ");
2050 0 : buf.append("4 ");
2051 0 : buf.append(Integer::toString(data.size()));
2052 0 : buf.append(" ");
2053 0 : buf.append(Integer::toString(data[0].size()));
2054 0 : buf.append(" ");
2055 0 : buf.append(Integer::toString(data[0][0].size()));
2056 0 : buf.append(" ");
2057 0 : buf.append(Integer::toString(data[0][0][0].size()));
2058 0 : buf.append(" ");
2059 0 : for (unsigned int i = 0; i < data.size(); ++i) {
2060 0 : for (unsigned int j = 0; j < data[i].size(); ++j) {
2061 0 : for (unsigned int k = 0; k < data[i][j].size(); ++k) {
2062 0 : for (unsigned int l = 0; l < data[i][j][k].size(); l++) {
2063 :
2064 0 : buf.append(Double::toString(data[i][j][k][l]));
2065 :
2066 0 : buf.append(" ");
2067 : }
2068 : }
2069 : }
2070 : }
2071 0 : buf.append(" </" + name + "> ");
2072 0 : }
2073 :
2074 :
2075 :
2076 :
2077 :
2078 :
2079 0 : double Parser::getDouble(const string &name, const string &tableName, const string &xmlDoc)
2080 : {
2081 0 : string xmlField = Parser::getField(xmlDoc,name);
2082 0 : if (xmlField.length() == 0)
2083 0 : throw ConversionException("Error: Missing field \"" +
2084 0 : name + "\" or invalid syntax",tableName);
2085 :
2086 : try {
2087 0 : double data = Double::parseDouble(xmlField);
2088 0 : return data;
2089 0 : } catch (const NumberFormatException &e) {
2090 0 : throw ConversionException("Error: Field \"" +
2091 0 : name + "\": " + e.getMessage(), tableName);
2092 0 : }
2093 :
2094 0 : }
2095 :
2096 0 : vector<double> Parser::get1DDouble(const string &name, const string &tableName, const string &xmlDoc)
2097 : {
2098 0 : string xmlField = Parser::getField(xmlDoc,name);
2099 0 : if (xmlField.length() == 0) {
2100 0 : throw ConversionException("Error: Field \"" +
2101 0 : name + "\": Invalid XML syntax", tableName);
2102 : }
2103 0 : StringTokenizer t(xmlField," ");
2104 : try {
2105 0 : int ndim = Integer::parseInt(t.nextToken());
2106 0 : if (ndim != 1) {
2107 0 : throw ConversionException("Error: Field \"" +
2108 0 : name + "\": Invalid array format", tableName);
2109 : }
2110 0 : int dim0 = Integer::parseInt(t.nextToken());
2111 0 : vector<double> value (dim0);
2112 0 : if (dim0 == 0)
2113 0 : return value;
2114 0 : for (int i = 0; i < dim0; ++i) {
2115 :
2116 0 : value[i] = Double::parseDouble(t.nextToken());
2117 :
2118 : }
2119 0 : if (t.hasMoreTokens()) {
2120 0 : throw ConversionException("Error: Field \"" +
2121 0 : name + "\": Syntax error.", tableName);
2122 : }
2123 0 : return value;
2124 0 : } catch (const NumberFormatException &e) {
2125 0 : throw ConversionException("Error: Field \"" +
2126 0 : name + "\": " + e.getMessage(), tableName);
2127 0 : } catch (const OutOfBoundsException &e) {
2128 0 : throw ConversionException("Error: Field \"" +
2129 0 : name + "\": Unexpected end of string", tableName);
2130 0 : } catch (const TagFormatException &e) {
2131 0 : throw ConversionException("Error: Field \"" +
2132 0 : name + "\": " + e.getMessage(), tableName);
2133 0 : }
2134 0 : }
2135 :
2136 0 : vector< vector<double> > Parser::get2DDouble(const string &name, const string &tableName, const string &xmlDoc)
2137 : {
2138 0 : string xmlField = Parser::getField(xmlDoc,name);
2139 0 : if (xmlField.length() == 0) {
2140 0 : throw ConversionException("Error: Field \"" +
2141 0 : name + "\": Invalid XML syntax", tableName);
2142 : }
2143 0 : StringTokenizer t(xmlField," ");
2144 : try {
2145 0 : int ndim = Integer::parseInt(t.nextToken());
2146 0 : if (ndim != 2) {
2147 0 : throw ConversionException("Error: Field \"" +
2148 0 : name + "\": Invalid array format", tableName);
2149 : }
2150 0 : int dim0 = Integer::parseInt(t.nextToken());
2151 0 : int dim1 = Integer::parseInt(t.nextToken());
2152 0 : vector< vector<double> > value;
2153 :
2154 0 : if (dim0 == 0 || dim1 == 0)
2155 0 : return value;
2156 :
2157 0 : vector<double> v_aux;
2158 0 : for (int i = 0; i < dim0; ++i) {
2159 0 : v_aux.clear();
2160 0 : for (int j = 0; j < dim1; ++j) {
2161 :
2162 0 : v_aux.push_back(Double::parseDouble(t.nextToken()));
2163 :
2164 : }
2165 0 : value.push_back(v_aux);
2166 : }
2167 0 : if (t.hasMoreTokens()) {
2168 0 : throw ConversionException("Error: Field \"" +
2169 0 : name + "\": Syntax error.", tableName);
2170 : }
2171 0 : return value;
2172 0 : } catch (const NumberFormatException &e) {
2173 0 : throw ConversionException("Error: Field \"" +
2174 0 : name + "\": " + e.getMessage(), tableName);
2175 0 : } catch (const OutOfBoundsException &e) {
2176 0 : throw ConversionException("Error: Field \"" +
2177 0 : name + "\": Unexpected end of string", tableName);
2178 0 : } catch (const TagFormatException &e) {
2179 0 : throw ConversionException("Error: Field \"" +
2180 0 : name + "\": " + e.getMessage(), tableName);
2181 0 : }
2182 0 : }
2183 :
2184 0 : vector< vector< vector<double> > > Parser::get3DDouble(const string &name, const string &tableName, const string &xmlDoc)
2185 : {
2186 0 : string xmlField = Parser::getField(xmlDoc,name);
2187 0 : if (xmlField.length() == 0) {
2188 0 : throw ConversionException("Error: Field \"" +
2189 0 : name + "\": Invalid XML syntax", tableName);
2190 : }
2191 0 : StringTokenizer t(xmlField," ");
2192 : try {
2193 0 : int ndim = Integer::parseInt(t.nextToken());
2194 0 : if (ndim != 3) {
2195 0 : throw ConversionException("Error: Field \"" +
2196 0 : name + "\": Invalid array format", tableName);
2197 : }
2198 0 : int dim0 = Integer::parseInt(t.nextToken());
2199 0 : int dim1 = Integer::parseInt(t.nextToken());
2200 0 : int dim2 = Integer::parseInt(t.nextToken());
2201 0 : vector< vector< vector<double> > > value ;
2202 0 : if (dim0 == 0 || dim1 == 0 || dim2 == 0)
2203 0 : return value;
2204 :
2205 0 : vector<vector<double> > vv_aux;
2206 0 : vector<double> v_aux;
2207 0 : for (int i = 0; i < dim0; ++i) {
2208 0 : vv_aux.clear();
2209 0 : for (int j = 0; j < dim1; ++j) {
2210 0 : v_aux.clear();
2211 0 : for (int k = 0; k < dim2; ++k) {
2212 :
2213 0 : v_aux.push_back(Double::parseDouble(t.nextToken()));
2214 :
2215 : }
2216 0 : vv_aux.push_back(v_aux);
2217 : }
2218 0 : value.push_back(vv_aux);
2219 : }
2220 0 : if (t.hasMoreTokens()) {
2221 0 : throw ConversionException("Error: Field \"" +
2222 0 : name + "\": Syntax error.", tableName);
2223 : }
2224 0 : return value;
2225 0 : } catch (const NumberFormatException &e) {
2226 0 : throw ConversionException("Error: Field \"" +
2227 0 : name + "\": " + e.getMessage(), tableName);
2228 0 : } catch (const OutOfBoundsException &e) {
2229 0 : throw ConversionException("Error: Field \"" +
2230 0 : name + "\": Unexpected end of string", tableName);
2231 0 : } catch (const TagFormatException &e) {
2232 0 : throw ConversionException("Error: Field \"" +
2233 0 : name + "\": " + e.getMessage(), tableName);
2234 0 : }
2235 0 : }
2236 :
2237 0 : vector< vector< vector< vector<double> > > >Parser::get4DDouble(const string &name, const string &tableName, const string &xmlDoc)
2238 : {
2239 0 : string xmlField = Parser::getField(xmlDoc,name);
2240 0 : if (xmlField.length() == 0) {
2241 0 : throw ConversionException("Error: Field \"" +
2242 0 : name + "\": Invalid XML syntax", tableName);
2243 : }
2244 0 : StringTokenizer t(xmlField," ");
2245 : try {
2246 0 : int ndim = Integer::parseInt(t.nextToken());
2247 0 : if (ndim != 4) {
2248 0 : throw ConversionException("Error: Field \"" +
2249 0 : name + "\": Invalid array format", tableName);
2250 : }
2251 0 : int dim0 = Integer::parseInt(t.nextToken());
2252 0 : int dim1 = Integer::parseInt(t.nextToken());
2253 0 : int dim2 = Integer::parseInt(t.nextToken());
2254 0 : int dim3 = Integer::parseInt(t.nextToken());
2255 0 : vector<vector< vector< vector<double> > > >value;
2256 0 : if (dim0 == 0 || dim1 == 0 || dim2 == 0 || dim3 == 0)
2257 0 : return value;
2258 :
2259 0 : vector<vector<vector<double> > >vvv_aux;
2260 0 : vector<vector< double> > vv_aux;
2261 0 : vector<double> v_aux;
2262 0 : for (int i = 0; i < dim0; ++i) {
2263 0 : vvv_aux.clear();
2264 0 : for (int j = 0; j < dim1; ++j) {
2265 0 : vv_aux.clear();
2266 0 : for (int k = 0; k < dim2; ++k) {
2267 0 : v_aux.clear();
2268 0 : for (int l = 0; l < dim3; l++) {
2269 :
2270 0 : v_aux.push_back(Double::parseDouble(t.nextToken()));
2271 :
2272 : }
2273 0 : vv_aux.push_back(v_aux);
2274 : }
2275 0 : vvv_aux.push_back(vv_aux);
2276 : }
2277 0 : value.push_back(vvv_aux);
2278 : }
2279 0 : if (t.hasMoreTokens()) {
2280 0 : throw ConversionException("Error: Field \"" +
2281 0 : name + "\": Syntax error.", tableName);
2282 : }
2283 0 : return value;
2284 0 : } catch (const NumberFormatException &e) {
2285 0 : throw ConversionException("Error: Field \"" +
2286 0 : name + "\": " + e.getMessage(), tableName);
2287 0 : } catch (const OutOfBoundsException &e) {
2288 0 : throw ConversionException("Error: Field \"" +
2289 0 : name + "\": Unexpected end of string", tableName);
2290 0 : } catch (const TagFormatException &e) {
2291 0 : throw ConversionException("Error: Field \"" +
2292 0 : name + "\": " + e.getMessage(), tableName);
2293 0 : }
2294 0 : }
2295 :
2296 :
2297 :
2298 :
2299 :
2300 : // Field type: unsigned char
2301 :
2302 0 : void Parser::toXML(unsigned char data, const string &name, string &buf) {
2303 0 : buf.append("<" + name + "> ");
2304 :
2305 0 : buf.append(Character::toString(data));
2306 :
2307 0 : buf.append(" </" + name + "> ");
2308 0 : }
2309 :
2310 :
2311 :
2312 :
2313 0 : void Parser::toXML(vector<unsigned char> data, const string &name, string &buf) {
2314 0 : buf.append("<" + name + "> ");
2315 0 : buf.append("1 ");
2316 0 : buf.append(Integer::toString(data.size()));
2317 0 : buf.append(" ");
2318 0 : for (unsigned int i = 0; i < data.size(); ++i) {
2319 :
2320 0 : buf.append(Character::toString(data[i]));
2321 :
2322 0 : buf.append(" ");
2323 : }
2324 0 : buf.append(" </" + name + "> ");
2325 0 : }
2326 :
2327 0 : void Parser::toXML(vector< vector<unsigned char> > data, const string &name, string &buf) {
2328 0 : buf.append("<" + name + "> ");
2329 0 : buf.append("2 ");
2330 0 : buf.append(Integer::toString(data.size()));
2331 0 : buf.append(" ");
2332 0 : buf.append(Integer::toString(data[0].size()));
2333 0 : buf.append(" ");
2334 0 : for (unsigned int i = 0; i < data.size(); ++i) {
2335 0 : for (unsigned int j = 0; j < data[i].size(); ++j) {
2336 :
2337 0 : buf.append(Character::toString(data[i][j]));
2338 :
2339 0 : buf.append(" ");
2340 : }
2341 : }
2342 0 : buf.append(" </" + name + "> ");
2343 0 : }
2344 :
2345 0 : void Parser::toXML(vector< vector< vector<unsigned char> > > data, const string &name, string &buf) {
2346 0 : buf.append("<" + name + "> ");
2347 0 : buf.append("3 ");
2348 0 : buf.append(Integer::toString(data.size()));
2349 0 : buf.append(" ");
2350 0 : buf.append(Integer::toString(data[0].size()));
2351 0 : buf.append(" ");
2352 0 : buf.append(Integer::toString(data[0][0].size()));
2353 0 : buf.append(" ");
2354 0 : for (unsigned int i = 0; i < data.size(); ++i) {
2355 0 : for (unsigned int j = 0; j < data[i].size(); ++j) {
2356 0 : for (unsigned int k = 0; k < data[i][j].size(); ++k) {
2357 :
2358 0 : buf.append(Character::toString(data[i][j][k]));
2359 :
2360 0 : buf.append(" ");
2361 : }
2362 : }
2363 : }
2364 0 : buf.append(" </" + name + "> ");
2365 0 : }
2366 :
2367 0 : void Parser::toXML(vector<vector< vector< vector<unsigned char> > > >data, const string &name, string &buf) {
2368 0 : buf.append("<" + name + "> ");
2369 0 : buf.append("4 ");
2370 0 : buf.append(Integer::toString(data.size()));
2371 0 : buf.append(" ");
2372 0 : buf.append(Integer::toString(data[0].size()));
2373 0 : buf.append(" ");
2374 0 : buf.append(Integer::toString(data[0][0].size()));
2375 0 : buf.append(" ");
2376 0 : buf.append(Integer::toString(data[0][0][0].size()));
2377 0 : buf.append(" ");
2378 0 : for (unsigned int i = 0; i < data.size(); ++i) {
2379 0 : for (unsigned int j = 0; j < data[i].size(); ++j) {
2380 0 : for (unsigned int k = 0; k < data[i][j].size(); ++k) {
2381 0 : for (unsigned int l = 0; l < data[i][j][k].size(); l++) {
2382 :
2383 0 : buf.append(Character::toString(data[i][j][k][l]));
2384 :
2385 0 : buf.append(" ");
2386 : }
2387 : }
2388 : }
2389 : }
2390 0 : buf.append(" </" + name + "> ");
2391 0 : }
2392 :
2393 :
2394 :
2395 :
2396 :
2397 :
2398 0 : unsigned char Parser::getCharacter(const string &name, const string &tableName, const string &xmlDoc)
2399 : {
2400 0 : string xmlField = Parser::getField(xmlDoc,name);
2401 0 : if (xmlField.length() == 0)
2402 0 : throw ConversionException("Error: Missing field \"" +
2403 0 : name + "\" or invalid syntax",tableName);
2404 :
2405 0 : return xmlField.at(0);
2406 :
2407 0 : }
2408 :
2409 0 : vector<unsigned char> Parser::get1DCharacter(const string &name, const string &tableName, const string &xmlDoc)
2410 : {
2411 0 : string xmlField = Parser::getField(xmlDoc,name);
2412 0 : if (xmlField.length() == 0) {
2413 0 : throw ConversionException("Error: Field \"" +
2414 0 : name + "\": Invalid XML syntax", tableName);
2415 : }
2416 0 : StringTokenizer t(xmlField," ");
2417 : try {
2418 0 : int ndim = Integer::parseInt(t.nextToken());
2419 0 : if (ndim != 1) {
2420 0 : throw ConversionException("Error: Field \"" +
2421 0 : name + "\": Invalid array format", tableName);
2422 : }
2423 0 : int dim0 = Integer::parseInt(t.nextToken());
2424 0 : vector<unsigned char> value (dim0);
2425 0 : if (dim0 == 0)
2426 0 : return value;
2427 0 : for (int i = 0; i < dim0; ++i) {
2428 :
2429 0 : value[i] = t.nextToken().at(0);
2430 :
2431 : }
2432 0 : if (t.hasMoreTokens()) {
2433 0 : throw ConversionException("Error: Field \"" +
2434 0 : name + "\": Syntax error.", tableName);
2435 : }
2436 0 : return value;
2437 0 : } catch (const NumberFormatException &e) {
2438 0 : throw ConversionException("Error: Field \"" +
2439 0 : name + "\": " + e.getMessage(), tableName);
2440 0 : } catch (const OutOfBoundsException &e) {
2441 0 : throw ConversionException("Error: Field \"" +
2442 0 : name + "\": Unexpected end of string", tableName);
2443 0 : } catch (const TagFormatException &e) {
2444 0 : throw ConversionException("Error: Field \"" +
2445 0 : name + "\": " + e.getMessage(), tableName);
2446 0 : }
2447 0 : }
2448 :
2449 0 : vector< vector<unsigned char> > Parser::get2DCharacter(const string &name, const string &tableName, const string &xmlDoc)
2450 : {
2451 0 : string xmlField = Parser::getField(xmlDoc,name);
2452 0 : if (xmlField.length() == 0) {
2453 0 : throw ConversionException("Error: Field \"" +
2454 0 : name + "\": Invalid XML syntax", tableName);
2455 : }
2456 0 : StringTokenizer t(xmlField," ");
2457 : try {
2458 0 : int ndim = Integer::parseInt(t.nextToken());
2459 0 : if (ndim != 2) {
2460 0 : throw ConversionException("Error: Field \"" +
2461 0 : name + "\": Invalid array format", tableName);
2462 : }
2463 0 : int dim0 = Integer::parseInt(t.nextToken());
2464 0 : int dim1 = Integer::parseInt(t.nextToken());
2465 0 : vector< vector<unsigned char> > value;
2466 :
2467 0 : if (dim0 == 0 || dim1 == 0)
2468 0 : return value;
2469 :
2470 0 : vector<unsigned char> v_aux;
2471 0 : for (int i = 0; i < dim0; ++i) {
2472 0 : v_aux.clear();
2473 0 : for (int j = 0; j < dim1; ++j) {
2474 :
2475 0 : v_aux.push_back(t.nextToken().at(0));
2476 :
2477 : }
2478 0 : value.push_back(v_aux);
2479 : }
2480 0 : if (t.hasMoreTokens()) {
2481 0 : throw ConversionException("Error: Field \"" +
2482 0 : name + "\": Syntax error.", tableName);
2483 : }
2484 0 : return value;
2485 0 : } catch (const NumberFormatException &e) {
2486 0 : throw ConversionException("Error: Field \"" +
2487 0 : name + "\": " + e.getMessage(), tableName);
2488 0 : } catch (const OutOfBoundsException &e) {
2489 0 : throw ConversionException("Error: Field \"" +
2490 0 : name + "\": Unexpected end of string", tableName);
2491 0 : } catch (const TagFormatException &e) {
2492 0 : throw ConversionException("Error: Field \"" +
2493 0 : name + "\": " + e.getMessage(), tableName);
2494 0 : }
2495 0 : }
2496 :
2497 0 : vector< vector< vector<unsigned char> > > Parser::get3DCharacter(const string &name, const string &tableName, const string &xmlDoc)
2498 : {
2499 0 : string xmlField = Parser::getField(xmlDoc,name);
2500 0 : if (xmlField.length() == 0) {
2501 0 : throw ConversionException("Error: Field \"" +
2502 0 : name + "\": Invalid XML syntax", tableName);
2503 : }
2504 0 : StringTokenizer t(xmlField," ");
2505 : try {
2506 0 : int ndim = Integer::parseInt(t.nextToken());
2507 0 : if (ndim != 3) {
2508 0 : throw ConversionException("Error: Field \"" +
2509 0 : name + "\": Invalid array format", tableName);
2510 : }
2511 0 : int dim0 = Integer::parseInt(t.nextToken());
2512 0 : int dim1 = Integer::parseInt(t.nextToken());
2513 0 : int dim2 = Integer::parseInt(t.nextToken());
2514 0 : vector< vector< vector<unsigned char> > > value ;
2515 0 : if (dim0 == 0 || dim1 == 0 || dim2 == 0)
2516 0 : return value;
2517 :
2518 0 : vector<vector<unsigned char> > vv_aux;
2519 0 : vector<unsigned char> v_aux;
2520 0 : for (int i = 0; i < dim0; ++i) {
2521 0 : vv_aux.clear();
2522 0 : for (int j = 0; j < dim1; ++j) {
2523 0 : v_aux.clear();
2524 0 : for (int k = 0; k < dim2; ++k) {
2525 :
2526 0 : v_aux.push_back( t.nextToken().at(0));
2527 :
2528 : }
2529 0 : vv_aux.push_back(v_aux);
2530 : }
2531 0 : value.push_back(vv_aux);
2532 : }
2533 0 : if (t.hasMoreTokens()) {
2534 0 : throw ConversionException("Error: Field \"" +
2535 0 : name + "\": Syntax error.", tableName);
2536 : }
2537 0 : return value;
2538 0 : } catch (const NumberFormatException &e) {
2539 0 : throw ConversionException("Error: Field \"" +
2540 0 : name + "\": " + e.getMessage(), tableName);
2541 0 : } catch (const OutOfBoundsException &e) {
2542 0 : throw ConversionException("Error: Field \"" +
2543 0 : name + "\": Unexpected end of string", tableName);
2544 0 : } catch (const TagFormatException &e) {
2545 0 : throw ConversionException("Error: Field \"" +
2546 0 : name + "\": " + e.getMessage(), tableName);
2547 0 : }
2548 0 : }
2549 :
2550 0 : vector< vector< vector< vector<unsigned char> > > >Parser::get4DCharacter(const string &name, const string &tableName, const string &xmlDoc)
2551 : {
2552 0 : string xmlField = Parser::getField(xmlDoc,name);
2553 0 : if (xmlField.length() == 0) {
2554 0 : throw ConversionException("Error: Field \"" +
2555 0 : name + "\": Invalid XML syntax", tableName);
2556 : }
2557 0 : StringTokenizer t(xmlField," ");
2558 : try {
2559 0 : int ndim = Integer::parseInt(t.nextToken());
2560 0 : if (ndim != 4) {
2561 0 : throw ConversionException("Error: Field \"" +
2562 0 : name + "\": Invalid array format", tableName);
2563 : }
2564 0 : int dim0 = Integer::parseInt(t.nextToken());
2565 0 : int dim1 = Integer::parseInt(t.nextToken());
2566 0 : int dim2 = Integer::parseInt(t.nextToken());
2567 0 : int dim3 = Integer::parseInt(t.nextToken());
2568 0 : vector<vector< vector< vector<unsigned char> > > >value;
2569 0 : if (dim0 == 0 || dim1 == 0 || dim2 == 0 || dim3 == 0)
2570 0 : return value;
2571 :
2572 0 : vector<vector<vector<unsigned char> > >vvv_aux;
2573 0 : vector<vector< unsigned char> > vv_aux;
2574 0 : vector<unsigned char> v_aux;
2575 0 : for (int i = 0; i < dim0; ++i) {
2576 0 : vvv_aux.clear();
2577 0 : for (int j = 0; j < dim1; ++j) {
2578 0 : vv_aux.clear();
2579 0 : for (int k = 0; k < dim2; ++k) {
2580 0 : v_aux.clear();
2581 0 : for (int l = 0; l < dim3; l++) {
2582 :
2583 0 : v_aux.push_back( t.nextToken().at(0));
2584 :
2585 : }
2586 0 : vv_aux.push_back(v_aux);
2587 : }
2588 0 : vvv_aux.push_back(vv_aux);
2589 : }
2590 0 : value.push_back(vvv_aux);
2591 : }
2592 0 : if (t.hasMoreTokens()) {
2593 0 : throw ConversionException("Error: Field \"" +
2594 0 : name + "\": Syntax error.", tableName);
2595 : }
2596 0 : return value;
2597 0 : } catch (const NumberFormatException &e) {
2598 0 : throw ConversionException("Error: Field \"" +
2599 0 : name + "\": " + e.getMessage(), tableName);
2600 0 : } catch (const OutOfBoundsException &e) {
2601 0 : throw ConversionException("Error: Field \"" +
2602 0 : name + "\": Unexpected end of string", tableName);
2603 0 : } catch (const TagFormatException &e) {
2604 0 : throw ConversionException("Error: Field \"" +
2605 0 : name + "\": " + e.getMessage(), tableName);
2606 0 : }
2607 0 : }
2608 :
2609 :
2610 :
2611 :
2612 :
2613 : // Field type: bool
2614 :
2615 0 : void Parser::toXML(bool data, const string &name, string &buf) {
2616 0 : buf.append("<" + name + "> ");
2617 :
2618 0 : buf.append(Boolean::toString(data));
2619 :
2620 0 : buf.append(" </" + name + "> ");
2621 0 : }
2622 :
2623 :
2624 :
2625 :
2626 0 : void Parser::toXML(vector<bool> data, const string &name, string &buf) {
2627 0 : buf.append("<" + name + "> ");
2628 0 : buf.append("1 ");
2629 0 : buf.append(Integer::toString(data.size()));
2630 0 : buf.append(" ");
2631 0 : for (unsigned int i = 0; i < data.size(); ++i) {
2632 :
2633 0 : buf.append(Boolean::toString(data[i]));
2634 :
2635 0 : buf.append(" ");
2636 : }
2637 0 : buf.append(" </" + name + "> ");
2638 0 : }
2639 :
2640 0 : void Parser::toXML(vector< vector<bool> > data, const string &name, string &buf) {
2641 0 : buf.append("<" + name + "> ");
2642 0 : buf.append("2 ");
2643 0 : buf.append(Integer::toString(data.size()));
2644 0 : buf.append(" ");
2645 0 : buf.append(Integer::toString(data[0].size()));
2646 0 : buf.append(" ");
2647 0 : for (unsigned int i = 0; i < data.size(); ++i) {
2648 0 : for (unsigned int j = 0; j < data[i].size(); ++j) {
2649 :
2650 0 : buf.append(Boolean::toString(data[i][j]));
2651 :
2652 0 : buf.append(" ");
2653 : }
2654 : }
2655 0 : buf.append(" </" + name + "> ");
2656 0 : }
2657 :
2658 0 : void Parser::toXML(vector< vector< vector<bool> > > data, const string &name, string &buf) {
2659 0 : buf.append("<" + name + "> ");
2660 0 : buf.append("3 ");
2661 0 : buf.append(Integer::toString(data.size()));
2662 0 : buf.append(" ");
2663 0 : buf.append(Integer::toString(data[0].size()));
2664 0 : buf.append(" ");
2665 0 : buf.append(Integer::toString(data[0][0].size()));
2666 0 : buf.append(" ");
2667 0 : for (unsigned int i = 0; i < data.size(); ++i) {
2668 0 : for (unsigned int j = 0; j < data[i].size(); ++j) {
2669 0 : for (unsigned int k = 0; k < data[i][j].size(); ++k) {
2670 :
2671 0 : buf.append(Boolean::toString(data[i][j][k]));
2672 :
2673 0 : buf.append(" ");
2674 : }
2675 : }
2676 : }
2677 0 : buf.append(" </" + name + "> ");
2678 0 : }
2679 :
2680 0 : void Parser::toXML(vector<vector< vector< vector<bool> > > >data, const string &name, string &buf) {
2681 0 : buf.append("<" + name + "> ");
2682 0 : buf.append("4 ");
2683 0 : buf.append(Integer::toString(data.size()));
2684 0 : buf.append(" ");
2685 0 : buf.append(Integer::toString(data[0].size()));
2686 0 : buf.append(" ");
2687 0 : buf.append(Integer::toString(data[0][0].size()));
2688 0 : buf.append(" ");
2689 0 : buf.append(Integer::toString(data[0][0][0].size()));
2690 0 : buf.append(" ");
2691 0 : for (unsigned int i = 0; i < data.size(); ++i) {
2692 0 : for (unsigned int j = 0; j < data[i].size(); ++j) {
2693 0 : for (unsigned int k = 0; k < data[i][j].size(); ++k) {
2694 0 : for (unsigned int l = 0; l < data[i][j][k].size(); l++) {
2695 :
2696 0 : buf.append(Boolean::toString(data[i][j][k][l]));
2697 :
2698 0 : buf.append(" ");
2699 : }
2700 : }
2701 : }
2702 : }
2703 0 : buf.append(" </" + name + "> ");
2704 0 : }
2705 :
2706 :
2707 :
2708 :
2709 :
2710 :
2711 0 : bool Parser::getBoolean(const string &name, const string &tableName, const string &xmlDoc)
2712 : {
2713 0 : string xmlField = Parser::getField(xmlDoc,name);
2714 0 : if (xmlField.length() == 0)
2715 0 : throw ConversionException("Error: Missing field \"" +
2716 0 : name + "\" or invalid syntax",tableName);
2717 :
2718 : try {
2719 0 : bool data = Boolean::parseBoolean(xmlField);
2720 0 : return data;
2721 0 : } catch (const NumberFormatException &e) {
2722 0 : throw ConversionException("Error: Field \"" +
2723 0 : name + "\": " + e.getMessage(), tableName);
2724 0 : }
2725 :
2726 0 : }
2727 :
2728 0 : vector<bool> Parser::get1DBoolean(const string &name, const string &tableName, const string &xmlDoc)
2729 : {
2730 0 : string xmlField = Parser::getField(xmlDoc,name);
2731 0 : if (xmlField.length() == 0) {
2732 0 : throw ConversionException("Error: Field \"" +
2733 0 : name + "\": Invalid XML syntax", tableName);
2734 : }
2735 0 : StringTokenizer t(xmlField," ");
2736 : try {
2737 0 : int ndim = Integer::parseInt(t.nextToken());
2738 0 : if (ndim != 1) {
2739 0 : throw ConversionException("Error: Field \"" +
2740 0 : name + "\": Invalid array format", tableName);
2741 : }
2742 0 : int dim0 = Integer::parseInt(t.nextToken());
2743 0 : vector<bool> value (dim0);
2744 0 : if (dim0 == 0)
2745 0 : return value;
2746 0 : for (int i = 0; i < dim0; ++i) {
2747 :
2748 0 : value[i] = Boolean::parseBoolean(t.nextToken());
2749 :
2750 : }
2751 0 : if (t.hasMoreTokens()) {
2752 0 : throw ConversionException("Error: Field \"" +
2753 0 : name + "\": Syntax error.", tableName);
2754 : }
2755 0 : return value;
2756 0 : } catch (const NumberFormatException &e) {
2757 0 : throw ConversionException("Error: Field \"" +
2758 0 : name + "\": " + e.getMessage(), tableName);
2759 0 : } catch (const OutOfBoundsException &e) {
2760 0 : throw ConversionException("Error: Field \"" +
2761 0 : name + "\": Unexpected end of string", tableName);
2762 0 : } catch (const TagFormatException &e) {
2763 0 : throw ConversionException("Error: Field \"" +
2764 0 : name + "\": " + e.getMessage(), tableName);
2765 0 : }
2766 0 : }
2767 :
2768 0 : vector< vector<bool> > Parser::get2DBoolean(const string &name, const string &tableName, const string &xmlDoc)
2769 : {
2770 0 : string xmlField = Parser::getField(xmlDoc,name);
2771 0 : if (xmlField.length() == 0) {
2772 0 : throw ConversionException("Error: Field \"" +
2773 0 : name + "\": Invalid XML syntax", tableName);
2774 : }
2775 0 : StringTokenizer t(xmlField," ");
2776 : try {
2777 0 : int ndim = Integer::parseInt(t.nextToken());
2778 0 : if (ndim != 2) {
2779 0 : throw ConversionException("Error: Field \"" +
2780 0 : name + "\": Invalid array format", tableName);
2781 : }
2782 0 : int dim0 = Integer::parseInt(t.nextToken());
2783 0 : int dim1 = Integer::parseInt(t.nextToken());
2784 0 : vector< vector<bool> > value;
2785 :
2786 0 : if (dim0 == 0 || dim1 == 0)
2787 0 : return value;
2788 :
2789 0 : vector<bool> v_aux;
2790 0 : for (int i = 0; i < dim0; ++i) {
2791 0 : v_aux.clear();
2792 0 : for (int j = 0; j < dim1; ++j) {
2793 :
2794 0 : v_aux.push_back(Boolean::parseBoolean(t.nextToken()));
2795 :
2796 : }
2797 0 : value.push_back(v_aux);
2798 : }
2799 0 : if (t.hasMoreTokens()) {
2800 0 : throw ConversionException("Error: Field \"" +
2801 0 : name + "\": Syntax error.", tableName);
2802 : }
2803 0 : return value;
2804 0 : } catch (const NumberFormatException &e) {
2805 0 : throw ConversionException("Error: Field \"" +
2806 0 : name + "\": " + e.getMessage(), tableName);
2807 0 : } catch (const OutOfBoundsException &e) {
2808 0 : throw ConversionException("Error: Field \"" +
2809 0 : name + "\": Unexpected end of string", tableName);
2810 0 : } catch (const TagFormatException &e) {
2811 0 : throw ConversionException("Error: Field \"" +
2812 0 : name + "\": " + e.getMessage(), tableName);
2813 0 : }
2814 0 : }
2815 :
2816 0 : vector< vector< vector<bool> > > Parser::get3DBoolean(const string &name, const string &tableName, const string &xmlDoc)
2817 : {
2818 0 : string xmlField = Parser::getField(xmlDoc,name);
2819 0 : if (xmlField.length() == 0) {
2820 0 : throw ConversionException("Error: Field \"" +
2821 0 : name + "\": Invalid XML syntax", tableName);
2822 : }
2823 0 : StringTokenizer t(xmlField," ");
2824 : try {
2825 0 : int ndim = Integer::parseInt(t.nextToken());
2826 0 : if (ndim != 3) {
2827 0 : throw ConversionException("Error: Field \"" +
2828 0 : name + "\": Invalid array format", tableName);
2829 : }
2830 0 : int dim0 = Integer::parseInt(t.nextToken());
2831 0 : int dim1 = Integer::parseInt(t.nextToken());
2832 0 : int dim2 = Integer::parseInt(t.nextToken());
2833 0 : vector< vector< vector<bool> > > value ;
2834 0 : if (dim0 == 0 || dim1 == 0 || dim2 == 0)
2835 0 : return value;
2836 :
2837 0 : vector<vector<bool> > vv_aux;
2838 0 : vector<bool> v_aux;
2839 0 : for (int i = 0; i < dim0; ++i) {
2840 0 : vv_aux.clear();
2841 0 : for (int j = 0; j < dim1; ++j) {
2842 0 : v_aux.clear();
2843 0 : for (int k = 0; k < dim2; ++k) {
2844 :
2845 0 : v_aux.push_back(Boolean::parseBoolean(t.nextToken()));
2846 :
2847 : }
2848 0 : vv_aux.push_back(v_aux);
2849 : }
2850 0 : value.push_back(vv_aux);
2851 : }
2852 0 : if (t.hasMoreTokens()) {
2853 0 : throw ConversionException("Error: Field \"" +
2854 0 : name + "\": Syntax error.", tableName);
2855 : }
2856 0 : return value;
2857 0 : } catch (const NumberFormatException &e) {
2858 0 : throw ConversionException("Error: Field \"" +
2859 0 : name + "\": " + e.getMessage(), tableName);
2860 0 : } catch (const OutOfBoundsException &e) {
2861 0 : throw ConversionException("Error: Field \"" +
2862 0 : name + "\": Unexpected end of string", tableName);
2863 0 : } catch (const TagFormatException &e) {
2864 0 : throw ConversionException("Error: Field \"" +
2865 0 : name + "\": " + e.getMessage(), tableName);
2866 0 : }
2867 0 : }
2868 :
2869 0 : vector< vector< vector< vector<bool> > > >Parser::get4DBoolean(const string &name, const string &tableName, const string &xmlDoc)
2870 : {
2871 0 : string xmlField = Parser::getField(xmlDoc,name);
2872 0 : if (xmlField.length() == 0) {
2873 0 : throw ConversionException("Error: Field \"" +
2874 0 : name + "\": Invalid XML syntax", tableName);
2875 : }
2876 0 : StringTokenizer t(xmlField," ");
2877 : try {
2878 0 : int ndim = Integer::parseInt(t.nextToken());
2879 0 : if (ndim != 4) {
2880 0 : throw ConversionException("Error: Field \"" +
2881 0 : name + "\": Invalid array format", tableName);
2882 : }
2883 0 : int dim0 = Integer::parseInt(t.nextToken());
2884 0 : int dim1 = Integer::parseInt(t.nextToken());
2885 0 : int dim2 = Integer::parseInt(t.nextToken());
2886 0 : int dim3 = Integer::parseInt(t.nextToken());
2887 0 : vector<vector< vector< vector<bool> > > >value;
2888 0 : if (dim0 == 0 || dim1 == 0 || dim2 == 0 || dim3 == 0)
2889 0 : return value;
2890 :
2891 0 : vector<vector<vector<bool> > >vvv_aux;
2892 0 : vector<vector< bool> > vv_aux;
2893 0 : vector<bool> v_aux;
2894 0 : for (int i = 0; i < dim0; ++i) {
2895 0 : vvv_aux.clear();
2896 0 : for (int j = 0; j < dim1; ++j) {
2897 0 : vv_aux.clear();
2898 0 : for (int k = 0; k < dim2; ++k) {
2899 0 : v_aux.clear();
2900 0 : for (int l = 0; l < dim3; l++) {
2901 :
2902 0 : v_aux.push_back(Boolean::parseBoolean(t.nextToken()));
2903 :
2904 : }
2905 0 : vv_aux.push_back(v_aux);
2906 : }
2907 0 : vvv_aux.push_back(vv_aux);
2908 : }
2909 0 : value.push_back(vvv_aux);
2910 : }
2911 0 : if (t.hasMoreTokens()) {
2912 0 : throw ConversionException("Error: Field \"" +
2913 0 : name + "\": Syntax error.", tableName);
2914 : }
2915 0 : return value;
2916 0 : } catch (const NumberFormatException &e) {
2917 0 : throw ConversionException("Error: Field \"" +
2918 0 : name + "\": " + e.getMessage(), tableName);
2919 0 : } catch (const OutOfBoundsException &e) {
2920 0 : throw ConversionException("Error: Field \"" +
2921 0 : name + "\": Unexpected end of string", tableName);
2922 0 : } catch (const TagFormatException &e) {
2923 0 : throw ConversionException("Error: Field \"" +
2924 0 : name + "\": " + e.getMessage(), tableName);
2925 0 : }
2926 0 : }
2927 :
2928 :
2929 :
2930 :
2931 :
2932 : // Field type: std::string
2933 :
2934 0 : void Parser::toXML(std::string data, const string &name, string &buf) {
2935 0 : buf.append("<" + name + "> ");
2936 :
2937 0 : if (data.size()>0)
2938 0 : buf.append(Parser::encode(data));
2939 :
2940 0 : buf.append(" </" + name + "> ");
2941 0 : }
2942 :
2943 :
2944 :
2945 :
2946 0 : void Parser::toXML(vector<std::string> data, const string &name, string &buf) {
2947 0 : buf.append("<" + name + "> ");
2948 0 : buf.append("1 ");
2949 0 : buf.append(Integer::toString(data.size()));
2950 0 : buf.append(" ");
2951 0 : for (unsigned int i = 0; i < data.size(); ++i) {
2952 :
2953 0 : buf.append("\"");
2954 0 : if (data[i].size()>0)
2955 0 : buf.append(Parser::encode(data[i]));
2956 0 : buf.append("\"");
2957 :
2958 0 : buf.append(" ");
2959 : }
2960 0 : buf.append(" </" + name + "> ");
2961 0 : }
2962 :
2963 0 : void Parser::toXML(vector< vector<std::string> > data, const string &name, string &buf) {
2964 0 : buf.append("<" + name + "> ");
2965 0 : buf.append("2 ");
2966 0 : buf.append(Integer::toString(data.size()));
2967 0 : buf.append(" ");
2968 0 : buf.append(Integer::toString(data[0].size()));
2969 0 : buf.append(" ");
2970 0 : for (unsigned int i = 0; i < data.size(); ++i) {
2971 0 : for (unsigned int j = 0; j < data[i].size(); ++j) {
2972 :
2973 0 : buf.append("\"");
2974 0 : if(data[i][j].size()>0)
2975 0 : buf.append(Parser::encode(data[i][j]));
2976 :
2977 0 : buf.append("\"");
2978 :
2979 0 : buf.append(" ");
2980 : }
2981 : }
2982 0 : buf.append(" </" + name + "> ");
2983 0 : }
2984 :
2985 0 : void Parser::toXML(vector< vector< vector<std::string> > > data, const string &name, string &buf) {
2986 0 : buf.append("<" + name + "> ");
2987 0 : buf.append("3 ");
2988 0 : buf.append(Integer::toString(data.size()));
2989 0 : buf.append(" ");
2990 0 : buf.append(Integer::toString(data[0].size()));
2991 0 : buf.append(" ");
2992 0 : buf.append(Integer::toString(data[0][0].size()));
2993 0 : buf.append(" ");
2994 0 : for (unsigned int i = 0; i < data.size(); ++i) {
2995 0 : for (unsigned int j = 0; j < data[i].size(); ++j) {
2996 0 : for (unsigned int k = 0; k < data[i][j].size(); ++k) {
2997 :
2998 0 : buf.append("\"");
2999 0 : if (data[i][j][k].size() > 0)
3000 0 : buf.append(Parser::encode(data[i][j][k]));
3001 :
3002 0 : buf.append("\"");
3003 :
3004 0 : buf.append(" ");
3005 : }
3006 : }
3007 : }
3008 0 : buf.append(" </" + name + "> ");
3009 0 : }
3010 :
3011 0 : void Parser::toXML(vector<vector< vector< vector<std::string> > > >data, const string &name, string &buf) {
3012 0 : buf.append("<" + name + "> ");
3013 0 : buf.append("4 ");
3014 0 : buf.append(Integer::toString(data.size()));
3015 0 : buf.append(" ");
3016 0 : buf.append(Integer::toString(data[0].size()));
3017 0 : buf.append(" ");
3018 0 : buf.append(Integer::toString(data[0][0].size()));
3019 0 : buf.append(" ");
3020 0 : buf.append(Integer::toString(data[0][0][0].size()));
3021 0 : buf.append(" ");
3022 0 : for (unsigned int i = 0; i < data.size(); ++i) {
3023 0 : for (unsigned int j = 0; j < data[i].size(); ++j) {
3024 0 : for (unsigned int k = 0; k < data[i][j].size(); ++k) {
3025 0 : for (unsigned int l = 0; l < data[i][j][k].size(); l++) {
3026 :
3027 0 : buf.append("\"");
3028 0 : if (data[i][j][k][l].size() > 0)
3029 0 : Parser::encode(data[i][j][k][l]);
3030 0 : buf.append("\"");
3031 :
3032 0 : buf.append(" ");
3033 : }
3034 : }
3035 : }
3036 : }
3037 0 : buf.append(" </" + name + "> ");
3038 0 : }
3039 :
3040 :
3041 :
3042 :
3043 : // Field type: Angle
3044 :
3045 0 : void Parser::toXML(Angle data, const string &name, string &buf) {
3046 0 : buf.append("<" + name + "> ");
3047 :
3048 0 : buf.append(data.toString());
3049 :
3050 0 : buf.append(" </" + name + "> ");
3051 0 : }
3052 :
3053 :
3054 :
3055 :
3056 0 : void Parser::toXML(vector<Angle> data, const string &name, string &buf) {
3057 0 : buf.append("<" + name + "> ");
3058 0 : buf.append("1 ");
3059 0 : buf.append(Integer::toString(data.size()));
3060 0 : buf.append(" ");
3061 0 : for (unsigned int i = 0; i < data.size(); ++i) {
3062 :
3063 0 : buf.append(data[i].toString());
3064 :
3065 0 : buf.append(" ");
3066 : }
3067 0 : buf.append(" </" + name + "> ");
3068 0 : }
3069 :
3070 0 : void Parser::toXML(vector< vector<Angle> > data, const string &name, string &buf) {
3071 0 : buf.append("<" + name + "> ");
3072 0 : buf.append("2 ");
3073 0 : buf.append(Integer::toString(data.size()));
3074 0 : buf.append(" ");
3075 0 : buf.append(Integer::toString(data[0].size()));
3076 0 : buf.append(" ");
3077 0 : for (unsigned int i = 0; i < data.size(); ++i) {
3078 0 : for (unsigned int j = 0; j < data[i].size(); ++j) {
3079 :
3080 0 : buf.append(data[i][j].toString());
3081 :
3082 0 : buf.append(" ");
3083 : }
3084 : }
3085 0 : buf.append(" </" + name + "> ");
3086 0 : }
3087 :
3088 0 : void Parser::toXML(vector< vector< vector<Angle> > > data, const string &name, string &buf) {
3089 0 : buf.append("<" + name + "> ");
3090 0 : buf.append("3 ");
3091 0 : buf.append(Integer::toString(data.size()));
3092 0 : buf.append(" ");
3093 0 : buf.append(Integer::toString(data[0].size()));
3094 0 : buf.append(" ");
3095 0 : buf.append(Integer::toString(data[0][0].size()));
3096 0 : buf.append(" ");
3097 0 : for (unsigned int i = 0; i < data.size(); ++i) {
3098 0 : for (unsigned int j = 0; j < data[i].size(); ++j) {
3099 0 : for (unsigned int k = 0; k < data[i][j].size(); ++k) {
3100 :
3101 0 : buf.append(data[i][j][k].toString());
3102 :
3103 0 : buf.append(" ");
3104 : }
3105 : }
3106 : }
3107 0 : buf.append(" </" + name + "> ");
3108 0 : }
3109 :
3110 0 : void Parser::toXML(vector<vector< vector< vector<Angle> > > >data, const string &name, string &buf) {
3111 0 : buf.append("<" + name + "> ");
3112 0 : buf.append("4 ");
3113 0 : buf.append(Integer::toString(data.size()));
3114 0 : buf.append(" ");
3115 0 : buf.append(Integer::toString(data[0].size()));
3116 0 : buf.append(" ");
3117 0 : buf.append(Integer::toString(data[0][0].size()));
3118 0 : buf.append(" ");
3119 0 : buf.append(Integer::toString(data[0][0][0].size()));
3120 0 : buf.append(" ");
3121 0 : for (unsigned int i = 0; i < data.size(); ++i) {
3122 0 : for (unsigned int j = 0; j < data[i].size(); ++j) {
3123 0 : for (unsigned int k = 0; k < data[i][j].size(); ++k) {
3124 0 : for (unsigned int l = 0; l < data[i][j][k].size(); l++) {
3125 :
3126 0 : buf.append(data[i][j][k][l].toString());
3127 :
3128 0 : buf.append(" ");
3129 : }
3130 : }
3131 : }
3132 : }
3133 0 : buf.append(" </" + name + "> ");
3134 0 : }
3135 :
3136 :
3137 :
3138 :
3139 :
3140 :
3141 0 : Angle Parser::getAngle(const string &name, const string &tableName, const string &xmlDoc)
3142 : {
3143 0 : string xmlField = Parser::getField(xmlDoc,name);
3144 0 : if (xmlField.length() == 0)
3145 0 : throw ConversionException("Error: Missing field \"" +
3146 0 : name + "\" or invalid syntax",tableName);
3147 :
3148 : try {
3149 0 : return Angle (xmlField);
3150 : }
3151 0 : catch (const InvalidArgumentException &e) {
3152 0 : throw ConversionException("Error: message was '"+
3153 0 : e.getMessage()+
3154 : "'",
3155 0 : tableName);
3156 0 : }
3157 :
3158 0 : }
3159 :
3160 0 : vector<Angle> Parser::get1DAngle(const string &name, const string &tableName, const string &xmlDoc)
3161 : {
3162 0 : string xmlField = Parser::getField(xmlDoc,name);
3163 0 : if (xmlField.length() == 0) {
3164 0 : throw ConversionException("Error: Field \"" +
3165 0 : name + "\": Invalid XML syntax", tableName);
3166 : }
3167 0 : StringTokenizer t(xmlField," ");
3168 : try {
3169 0 : int ndim = Integer::parseInt(t.nextToken());
3170 0 : if (ndim != 1) {
3171 0 : throw ConversionException("Error: Field \"" +
3172 0 : name + "\": Invalid array format", tableName);
3173 : }
3174 0 : int dim0 = Integer::parseInt(t.nextToken());
3175 0 : vector<Angle> value (dim0);
3176 0 : if (dim0 == 0)
3177 0 : return value;
3178 0 : for (int i = 0; i < dim0; ++i) {
3179 :
3180 0 : value[i] = Angle::getAngle(t);
3181 :
3182 : }
3183 0 : if (t.hasMoreTokens()) {
3184 0 : throw ConversionException("Error: Field \"" +
3185 0 : name + "\": Syntax error.", tableName);
3186 : }
3187 0 : return value;
3188 0 : } catch (const NumberFormatException &e) {
3189 0 : throw ConversionException("Error: Field \"" +
3190 0 : name + "\": " + e.getMessage(), tableName);
3191 0 : } catch (const OutOfBoundsException &e) {
3192 0 : throw ConversionException("Error: Field \"" +
3193 0 : name + "\": Unexpected end of string", tableName);
3194 0 : } catch (const TagFormatException &e) {
3195 0 : throw ConversionException("Error: Field \"" +
3196 0 : name + "\": " + e.getMessage(), tableName);
3197 0 : }
3198 0 : }
3199 :
3200 0 : vector< vector<Angle> > Parser::get2DAngle(const string &name, const string &tableName, const string &xmlDoc)
3201 : {
3202 0 : string xmlField = Parser::getField(xmlDoc,name);
3203 0 : if (xmlField.length() == 0) {
3204 0 : throw ConversionException("Error: Field \"" +
3205 0 : name + "\": Invalid XML syntax", tableName);
3206 : }
3207 0 : StringTokenizer t(xmlField," ");
3208 : try {
3209 0 : int ndim = Integer::parseInt(t.nextToken());
3210 0 : if (ndim != 2) {
3211 0 : throw ConversionException("Error: Field \"" +
3212 0 : name + "\": Invalid array format", tableName);
3213 : }
3214 0 : int dim0 = Integer::parseInt(t.nextToken());
3215 0 : int dim1 = Integer::parseInt(t.nextToken());
3216 0 : vector< vector<Angle> > value;
3217 :
3218 0 : if (dim0 == 0 || dim1 == 0)
3219 0 : return value;
3220 :
3221 0 : vector<Angle> v_aux;
3222 0 : for (int i = 0; i < dim0; ++i) {
3223 0 : v_aux.clear();
3224 0 : for (int j = 0; j < dim1; ++j) {
3225 :
3226 0 : v_aux.push_back(Angle::getAngle(t));
3227 :
3228 : }
3229 0 : value.push_back(v_aux);
3230 : }
3231 0 : if (t.hasMoreTokens()) {
3232 0 : throw ConversionException("Error: Field \"" +
3233 0 : name + "\": Syntax error.", tableName);
3234 : }
3235 0 : return value;
3236 0 : } catch (const NumberFormatException &e) {
3237 0 : throw ConversionException("Error: Field \"" +
3238 0 : name + "\": " + e.getMessage(), tableName);
3239 0 : } catch (const OutOfBoundsException &e) {
3240 0 : throw ConversionException("Error: Field \"" +
3241 0 : name + "\": Unexpected end of string", tableName);
3242 0 : } catch (const TagFormatException &e) {
3243 0 : throw ConversionException("Error: Field \"" +
3244 0 : name + "\": " + e.getMessage(), tableName);
3245 0 : }
3246 0 : }
3247 :
3248 0 : vector< vector< vector<Angle> > > Parser::get3DAngle(const string &name, const string &tableName, const string &xmlDoc)
3249 : {
3250 0 : string xmlField = Parser::getField(xmlDoc,name);
3251 0 : if (xmlField.length() == 0) {
3252 0 : throw ConversionException("Error: Field \"" +
3253 0 : name + "\": Invalid XML syntax", tableName);
3254 : }
3255 0 : StringTokenizer t(xmlField," ");
3256 : try {
3257 0 : int ndim = Integer::parseInt(t.nextToken());
3258 0 : if (ndim != 3) {
3259 0 : throw ConversionException("Error: Field \"" +
3260 0 : name + "\": Invalid array format", tableName);
3261 : }
3262 0 : int dim0 = Integer::parseInt(t.nextToken());
3263 0 : int dim1 = Integer::parseInt(t.nextToken());
3264 0 : int dim2 = Integer::parseInt(t.nextToken());
3265 0 : vector< vector< vector<Angle> > > value ;
3266 0 : if (dim0 == 0 || dim1 == 0 || dim2 == 0)
3267 0 : return value;
3268 :
3269 0 : vector<vector<Angle> > vv_aux;
3270 0 : vector<Angle> v_aux;
3271 0 : for (int i = 0; i < dim0; ++i) {
3272 0 : vv_aux.clear();
3273 0 : for (int j = 0; j < dim1; ++j) {
3274 0 : v_aux.clear();
3275 0 : for (int k = 0; k < dim2; ++k) {
3276 :
3277 0 : v_aux.push_back(Angle::getAngle(t));
3278 :
3279 : }
3280 0 : vv_aux.push_back(v_aux);
3281 : }
3282 0 : value.push_back(vv_aux);
3283 : }
3284 0 : if (t.hasMoreTokens()) {
3285 0 : throw ConversionException("Error: Field \"" +
3286 0 : name + "\": Syntax error.", tableName);
3287 : }
3288 0 : return value;
3289 0 : } catch (const NumberFormatException &e) {
3290 0 : throw ConversionException("Error: Field \"" +
3291 0 : name + "\": " + e.getMessage(), tableName);
3292 0 : } catch (const OutOfBoundsException &e) {
3293 0 : throw ConversionException("Error: Field \"" +
3294 0 : name + "\": Unexpected end of string", tableName);
3295 0 : } catch (const TagFormatException &e) {
3296 0 : throw ConversionException("Error: Field \"" +
3297 0 : name + "\": " + e.getMessage(), tableName);
3298 0 : }
3299 0 : }
3300 :
3301 0 : vector< vector< vector< vector<Angle> > > >Parser::get4DAngle(const string &name, const string &tableName, const string &xmlDoc)
3302 : {
3303 0 : string xmlField = Parser::getField(xmlDoc,name);
3304 0 : if (xmlField.length() == 0) {
3305 0 : throw ConversionException("Error: Field \"" +
3306 0 : name + "\": Invalid XML syntax", tableName);
3307 : }
3308 0 : StringTokenizer t(xmlField," ");
3309 : try {
3310 0 : int ndim = Integer::parseInt(t.nextToken());
3311 0 : if (ndim != 4) {
3312 0 : throw ConversionException("Error: Field \"" +
3313 0 : name + "\": Invalid array format", tableName);
3314 : }
3315 0 : int dim0 = Integer::parseInt(t.nextToken());
3316 0 : int dim1 = Integer::parseInt(t.nextToken());
3317 0 : int dim2 = Integer::parseInt(t.nextToken());
3318 0 : int dim3 = Integer::parseInt(t.nextToken());
3319 0 : vector<vector< vector< vector<Angle> > > >value;
3320 0 : if (dim0 == 0 || dim1 == 0 || dim2 == 0 || dim3 == 0)
3321 0 : return value;
3322 :
3323 0 : vector<vector<vector<Angle> > >vvv_aux;
3324 0 : vector<vector< Angle> > vv_aux;
3325 0 : vector<Angle> v_aux;
3326 0 : for (int i = 0; i < dim0; ++i) {
3327 0 : vvv_aux.clear();
3328 0 : for (int j = 0; j < dim1; ++j) {
3329 0 : vv_aux.clear();
3330 0 : for (int k = 0; k < dim2; ++k) {
3331 0 : v_aux.clear();
3332 0 : for (int l = 0; l < dim3; l++) {
3333 :
3334 0 : v_aux.push_back(Angle::getAngle(t));
3335 :
3336 : }
3337 0 : vv_aux.push_back(v_aux);
3338 : }
3339 0 : vvv_aux.push_back(vv_aux);
3340 : }
3341 0 : value.push_back(vvv_aux);
3342 : }
3343 0 : if (t.hasMoreTokens()) {
3344 0 : throw ConversionException("Error: Field \"" +
3345 0 : name + "\": Syntax error.", tableName);
3346 : }
3347 0 : return value;
3348 0 : } catch (const NumberFormatException &e) {
3349 0 : throw ConversionException("Error: Field \"" +
3350 0 : name + "\": " + e.getMessage(), tableName);
3351 0 : } catch (const OutOfBoundsException &e) {
3352 0 : throw ConversionException("Error: Field \"" +
3353 0 : name + "\": Unexpected end of string", tableName);
3354 0 : } catch (const TagFormatException &e) {
3355 0 : throw ConversionException("Error: Field \"" +
3356 0 : name + "\": " + e.getMessage(), tableName);
3357 0 : }
3358 0 : }
3359 :
3360 :
3361 :
3362 :
3363 :
3364 : // Field type: AngularRate
3365 :
3366 0 : void Parser::toXML(AngularRate data, const string &name, string &buf) {
3367 0 : buf.append("<" + name + "> ");
3368 :
3369 0 : buf.append(data.toString());
3370 :
3371 0 : buf.append(" </" + name + "> ");
3372 0 : }
3373 :
3374 :
3375 :
3376 :
3377 0 : void Parser::toXML(vector<AngularRate> data, const string &name, string &buf) {
3378 0 : buf.append("<" + name + "> ");
3379 0 : buf.append("1 ");
3380 0 : buf.append(Integer::toString(data.size()));
3381 0 : buf.append(" ");
3382 0 : for (unsigned int i = 0; i < data.size(); ++i) {
3383 :
3384 0 : buf.append(data[i].toString());
3385 :
3386 0 : buf.append(" ");
3387 : }
3388 0 : buf.append(" </" + name + "> ");
3389 0 : }
3390 :
3391 0 : void Parser::toXML(vector< vector<AngularRate> > data, const string &name, string &buf) {
3392 0 : buf.append("<" + name + "> ");
3393 0 : buf.append("2 ");
3394 0 : buf.append(Integer::toString(data.size()));
3395 0 : buf.append(" ");
3396 0 : buf.append(Integer::toString(data[0].size()));
3397 0 : buf.append(" ");
3398 0 : for (unsigned int i = 0; i < data.size(); ++i) {
3399 0 : for (unsigned int j = 0; j < data[i].size(); ++j) {
3400 :
3401 0 : buf.append(data[i][j].toString());
3402 :
3403 0 : buf.append(" ");
3404 : }
3405 : }
3406 0 : buf.append(" </" + name + "> ");
3407 0 : }
3408 :
3409 0 : void Parser::toXML(vector< vector< vector<AngularRate> > > data, const string &name, string &buf) {
3410 0 : buf.append("<" + name + "> ");
3411 0 : buf.append("3 ");
3412 0 : buf.append(Integer::toString(data.size()));
3413 0 : buf.append(" ");
3414 0 : buf.append(Integer::toString(data[0].size()));
3415 0 : buf.append(" ");
3416 0 : buf.append(Integer::toString(data[0][0].size()));
3417 0 : buf.append(" ");
3418 0 : for (unsigned int i = 0; i < data.size(); ++i) {
3419 0 : for (unsigned int j = 0; j < data[i].size(); ++j) {
3420 0 : for (unsigned int k = 0; k < data[i][j].size(); ++k) {
3421 :
3422 0 : buf.append(data[i][j][k].toString());
3423 :
3424 0 : buf.append(" ");
3425 : }
3426 : }
3427 : }
3428 0 : buf.append(" </" + name + "> ");
3429 0 : }
3430 :
3431 0 : void Parser::toXML(vector<vector< vector< vector<AngularRate> > > >data, const string &name, string &buf) {
3432 0 : buf.append("<" + name + "> ");
3433 0 : buf.append("4 ");
3434 0 : buf.append(Integer::toString(data.size()));
3435 0 : buf.append(" ");
3436 0 : buf.append(Integer::toString(data[0].size()));
3437 0 : buf.append(" ");
3438 0 : buf.append(Integer::toString(data[0][0].size()));
3439 0 : buf.append(" ");
3440 0 : buf.append(Integer::toString(data[0][0][0].size()));
3441 0 : buf.append(" ");
3442 0 : for (unsigned int i = 0; i < data.size(); ++i) {
3443 0 : for (unsigned int j = 0; j < data[i].size(); ++j) {
3444 0 : for (unsigned int k = 0; k < data[i][j].size(); ++k) {
3445 0 : for (unsigned int l = 0; l < data[i][j][k].size(); l++) {
3446 :
3447 0 : buf.append(data[i][j][k][l].toString());
3448 :
3449 0 : buf.append(" ");
3450 : }
3451 : }
3452 : }
3453 : }
3454 0 : buf.append(" </" + name + "> ");
3455 0 : }
3456 :
3457 :
3458 :
3459 :
3460 :
3461 :
3462 0 : AngularRate Parser::getAngularRate(const string &name, const string &tableName, const string &xmlDoc)
3463 : {
3464 0 : string xmlField = Parser::getField(xmlDoc,name);
3465 0 : if (xmlField.length() == 0)
3466 0 : throw ConversionException("Error: Missing field \"" +
3467 0 : name + "\" or invalid syntax",tableName);
3468 :
3469 : try {
3470 0 : return AngularRate (xmlField);
3471 : }
3472 0 : catch (const InvalidArgumentException &e) {
3473 0 : throw ConversionException("Error: message was '"+
3474 0 : e.getMessage()+
3475 : "'",
3476 0 : tableName);
3477 0 : }
3478 :
3479 0 : }
3480 :
3481 0 : vector<AngularRate> Parser::get1DAngularRate(const string &name, const string &tableName, const string &xmlDoc)
3482 : {
3483 0 : string xmlField = Parser::getField(xmlDoc,name);
3484 0 : if (xmlField.length() == 0) {
3485 0 : throw ConversionException("Error: Field \"" +
3486 0 : name + "\": Invalid XML syntax", tableName);
3487 : }
3488 0 : StringTokenizer t(xmlField," ");
3489 : try {
3490 0 : int ndim = Integer::parseInt(t.nextToken());
3491 0 : if (ndim != 1) {
3492 0 : throw ConversionException("Error: Field \"" +
3493 0 : name + "\": Invalid array format", tableName);
3494 : }
3495 0 : int dim0 = Integer::parseInt(t.nextToken());
3496 0 : vector<AngularRate> value (dim0);
3497 0 : if (dim0 == 0)
3498 0 : return value;
3499 0 : for (int i = 0; i < dim0; ++i) {
3500 :
3501 0 : value[i] = AngularRate::getAngularRate(t);
3502 :
3503 : }
3504 0 : if (t.hasMoreTokens()) {
3505 0 : throw ConversionException("Error: Field \"" +
3506 0 : name + "\": Syntax error.", tableName);
3507 : }
3508 0 : return value;
3509 0 : } catch (const NumberFormatException &e) {
3510 0 : throw ConversionException("Error: Field \"" +
3511 0 : name + "\": " + e.getMessage(), tableName);
3512 0 : } catch (const OutOfBoundsException &e) {
3513 0 : throw ConversionException("Error: Field \"" +
3514 0 : name + "\": Unexpected end of string", tableName);
3515 0 : } catch (const TagFormatException &e) {
3516 0 : throw ConversionException("Error: Field \"" +
3517 0 : name + "\": " + e.getMessage(), tableName);
3518 0 : }
3519 0 : }
3520 :
3521 0 : vector< vector<AngularRate> > Parser::get2DAngularRate(const string &name, const string &tableName, const string &xmlDoc)
3522 : {
3523 0 : string xmlField = Parser::getField(xmlDoc,name);
3524 0 : if (xmlField.length() == 0) {
3525 0 : throw ConversionException("Error: Field \"" +
3526 0 : name + "\": Invalid XML syntax", tableName);
3527 : }
3528 0 : StringTokenizer t(xmlField," ");
3529 : try {
3530 0 : int ndim = Integer::parseInt(t.nextToken());
3531 0 : if (ndim != 2) {
3532 0 : throw ConversionException("Error: Field \"" +
3533 0 : name + "\": Invalid array format", tableName);
3534 : }
3535 0 : int dim0 = Integer::parseInt(t.nextToken());
3536 0 : int dim1 = Integer::parseInt(t.nextToken());
3537 0 : vector< vector<AngularRate> > value;
3538 :
3539 0 : if (dim0 == 0 || dim1 == 0)
3540 0 : return value;
3541 :
3542 0 : vector<AngularRate> v_aux;
3543 0 : for (int i = 0; i < dim0; ++i) {
3544 0 : v_aux.clear();
3545 0 : for (int j = 0; j < dim1; ++j) {
3546 :
3547 0 : v_aux.push_back(AngularRate::getAngularRate(t));
3548 :
3549 : }
3550 0 : value.push_back(v_aux);
3551 : }
3552 0 : if (t.hasMoreTokens()) {
3553 0 : throw ConversionException("Error: Field \"" +
3554 0 : name + "\": Syntax error.", tableName);
3555 : }
3556 0 : return value;
3557 0 : } catch (const NumberFormatException &e) {
3558 0 : throw ConversionException("Error: Field \"" +
3559 0 : name + "\": " + e.getMessage(), tableName);
3560 0 : } catch (const OutOfBoundsException &e) {
3561 0 : throw ConversionException("Error: Field \"" +
3562 0 : name + "\": Unexpected end of string", tableName);
3563 0 : } catch (const TagFormatException &e) {
3564 0 : throw ConversionException("Error: Field \"" +
3565 0 : name + "\": " + e.getMessage(), tableName);
3566 0 : }
3567 0 : }
3568 :
3569 0 : vector< vector< vector<AngularRate> > > Parser::get3DAngularRate(const string &name, const string &tableName, const string &xmlDoc)
3570 : {
3571 0 : string xmlField = Parser::getField(xmlDoc,name);
3572 0 : if (xmlField.length() == 0) {
3573 0 : throw ConversionException("Error: Field \"" +
3574 0 : name + "\": Invalid XML syntax", tableName);
3575 : }
3576 0 : StringTokenizer t(xmlField," ");
3577 : try {
3578 0 : int ndim = Integer::parseInt(t.nextToken());
3579 0 : if (ndim != 3) {
3580 0 : throw ConversionException("Error: Field \"" +
3581 0 : name + "\": Invalid array format", tableName);
3582 : }
3583 0 : int dim0 = Integer::parseInt(t.nextToken());
3584 0 : int dim1 = Integer::parseInt(t.nextToken());
3585 0 : int dim2 = Integer::parseInt(t.nextToken());
3586 0 : vector< vector< vector<AngularRate> > > value ;
3587 0 : if (dim0 == 0 || dim1 == 0 || dim2 == 0)
3588 0 : return value;
3589 :
3590 0 : vector<vector<AngularRate> > vv_aux;
3591 0 : vector<AngularRate> v_aux;
3592 0 : for (int i = 0; i < dim0; ++i) {
3593 0 : vv_aux.clear();
3594 0 : for (int j = 0; j < dim1; ++j) {
3595 0 : v_aux.clear();
3596 0 : for (int k = 0; k < dim2; ++k) {
3597 :
3598 0 : v_aux.push_back(AngularRate::getAngularRate(t));
3599 :
3600 : }
3601 0 : vv_aux.push_back(v_aux);
3602 : }
3603 0 : value.push_back(vv_aux);
3604 : }
3605 0 : if (t.hasMoreTokens()) {
3606 0 : throw ConversionException("Error: Field \"" +
3607 0 : name + "\": Syntax error.", tableName);
3608 : }
3609 0 : return value;
3610 0 : } catch (const NumberFormatException &e) {
3611 0 : throw ConversionException("Error: Field \"" +
3612 0 : name + "\": " + e.getMessage(), tableName);
3613 0 : } catch (const OutOfBoundsException &e) {
3614 0 : throw ConversionException("Error: Field \"" +
3615 0 : name + "\": Unexpected end of string", tableName);
3616 0 : } catch (const TagFormatException &e) {
3617 0 : throw ConversionException("Error: Field \"" +
3618 0 : name + "\": " + e.getMessage(), tableName);
3619 0 : }
3620 0 : }
3621 :
3622 0 : vector< vector< vector< vector<AngularRate> > > >Parser::get4DAngularRate(const string &name, const string &tableName, const string &xmlDoc)
3623 : {
3624 0 : string xmlField = Parser::getField(xmlDoc,name);
3625 0 : if (xmlField.length() == 0) {
3626 0 : throw ConversionException("Error: Field \"" +
3627 0 : name + "\": Invalid XML syntax", tableName);
3628 : }
3629 0 : StringTokenizer t(xmlField," ");
3630 : try {
3631 0 : int ndim = Integer::parseInt(t.nextToken());
3632 0 : if (ndim != 4) {
3633 0 : throw ConversionException("Error: Field \"" +
3634 0 : name + "\": Invalid array format", tableName);
3635 : }
3636 0 : int dim0 = Integer::parseInt(t.nextToken());
3637 0 : int dim1 = Integer::parseInt(t.nextToken());
3638 0 : int dim2 = Integer::parseInt(t.nextToken());
3639 0 : int dim3 = Integer::parseInt(t.nextToken());
3640 0 : vector<vector< vector< vector<AngularRate> > > >value;
3641 0 : if (dim0 == 0 || dim1 == 0 || dim2 == 0 || dim3 == 0)
3642 0 : return value;
3643 :
3644 0 : vector<vector<vector<AngularRate> > >vvv_aux;
3645 0 : vector<vector< AngularRate> > vv_aux;
3646 0 : vector<AngularRate> v_aux;
3647 0 : for (int i = 0; i < dim0; ++i) {
3648 0 : vvv_aux.clear();
3649 0 : for (int j = 0; j < dim1; ++j) {
3650 0 : vv_aux.clear();
3651 0 : for (int k = 0; k < dim2; ++k) {
3652 0 : v_aux.clear();
3653 0 : for (int l = 0; l < dim3; l++) {
3654 :
3655 0 : v_aux.push_back(AngularRate::getAngularRate(t));
3656 :
3657 : }
3658 0 : vv_aux.push_back(v_aux);
3659 : }
3660 0 : vvv_aux.push_back(vv_aux);
3661 : }
3662 0 : value.push_back(vvv_aux);
3663 : }
3664 0 : if (t.hasMoreTokens()) {
3665 0 : throw ConversionException("Error: Field \"" +
3666 0 : name + "\": Syntax error.", tableName);
3667 : }
3668 0 : return value;
3669 0 : } catch (const NumberFormatException &e) {
3670 0 : throw ConversionException("Error: Field \"" +
3671 0 : name + "\": " + e.getMessage(), tableName);
3672 0 : } catch (const OutOfBoundsException &e) {
3673 0 : throw ConversionException("Error: Field \"" +
3674 0 : name + "\": Unexpected end of string", tableName);
3675 0 : } catch (const TagFormatException &e) {
3676 0 : throw ConversionException("Error: Field \"" +
3677 0 : name + "\": " + e.getMessage(), tableName);
3678 0 : }
3679 0 : }
3680 :
3681 :
3682 :
3683 :
3684 :
3685 : // Field type: ArrayTime
3686 :
3687 0 : void Parser::toXML(ArrayTime data, const string &name, string &buf) {
3688 0 : buf.append("<" + name + "> ");
3689 :
3690 0 : buf.append(data.toString());
3691 :
3692 0 : buf.append(" </" + name + "> ");
3693 0 : }
3694 :
3695 :
3696 :
3697 :
3698 0 : void Parser::toXML(vector<ArrayTime> data, const string &name, string &buf) {
3699 0 : buf.append("<" + name + "> ");
3700 0 : buf.append("1 ");
3701 0 : buf.append(Integer::toString(data.size()));
3702 0 : buf.append(" ");
3703 0 : for (unsigned int i = 0; i < data.size(); ++i) {
3704 :
3705 0 : buf.append(data[i].toString());
3706 :
3707 0 : buf.append(" ");
3708 : }
3709 0 : buf.append(" </" + name + "> ");
3710 0 : }
3711 :
3712 0 : void Parser::toXML(vector< vector<ArrayTime> > data, const string &name, string &buf) {
3713 0 : buf.append("<" + name + "> ");
3714 0 : buf.append("2 ");
3715 0 : buf.append(Integer::toString(data.size()));
3716 0 : buf.append(" ");
3717 0 : buf.append(Integer::toString(data[0].size()));
3718 0 : buf.append(" ");
3719 0 : for (unsigned int i = 0; i < data.size(); ++i) {
3720 0 : for (unsigned int j = 0; j < data[i].size(); ++j) {
3721 :
3722 0 : buf.append(data[i][j].toString());
3723 :
3724 0 : buf.append(" ");
3725 : }
3726 : }
3727 0 : buf.append(" </" + name + "> ");
3728 0 : }
3729 :
3730 0 : void Parser::toXML(vector< vector< vector<ArrayTime> > > data, const string &name, string &buf) {
3731 0 : buf.append("<" + name + "> ");
3732 0 : buf.append("3 ");
3733 0 : buf.append(Integer::toString(data.size()));
3734 0 : buf.append(" ");
3735 0 : buf.append(Integer::toString(data[0].size()));
3736 0 : buf.append(" ");
3737 0 : buf.append(Integer::toString(data[0][0].size()));
3738 0 : buf.append(" ");
3739 0 : for (unsigned int i = 0; i < data.size(); ++i) {
3740 0 : for (unsigned int j = 0; j < data[i].size(); ++j) {
3741 0 : for (unsigned int k = 0; k < data[i][j].size(); ++k) {
3742 :
3743 0 : buf.append(data[i][j][k].toString());
3744 :
3745 0 : buf.append(" ");
3746 : }
3747 : }
3748 : }
3749 0 : buf.append(" </" + name + "> ");
3750 0 : }
3751 :
3752 0 : void Parser::toXML(vector<vector< vector< vector<ArrayTime> > > >data, const string &name, string &buf) {
3753 0 : buf.append("<" + name + "> ");
3754 0 : buf.append("4 ");
3755 0 : buf.append(Integer::toString(data.size()));
3756 0 : buf.append(" ");
3757 0 : buf.append(Integer::toString(data[0].size()));
3758 0 : buf.append(" ");
3759 0 : buf.append(Integer::toString(data[0][0].size()));
3760 0 : buf.append(" ");
3761 0 : buf.append(Integer::toString(data[0][0][0].size()));
3762 0 : buf.append(" ");
3763 0 : for (unsigned int i = 0; i < data.size(); ++i) {
3764 0 : for (unsigned int j = 0; j < data[i].size(); ++j) {
3765 0 : for (unsigned int k = 0; k < data[i][j].size(); ++k) {
3766 0 : for (unsigned int l = 0; l < data[i][j][k].size(); l++) {
3767 :
3768 0 : buf.append(data[i][j][k][l].toString());
3769 :
3770 0 : buf.append(" ");
3771 : }
3772 : }
3773 : }
3774 : }
3775 0 : buf.append(" </" + name + "> ");
3776 0 : }
3777 :
3778 :
3779 :
3780 :
3781 :
3782 :
3783 0 : ArrayTime Parser::getArrayTime(const string &name, const string &tableName, const string &xmlDoc)
3784 : {
3785 0 : string xmlField = Parser::getField(xmlDoc,name);
3786 0 : if (xmlField.length() == 0)
3787 0 : throw ConversionException("Error: Missing field \"" +
3788 0 : name + "\" or invalid syntax",tableName);
3789 :
3790 : try {
3791 0 : return ArrayTime (xmlField);
3792 : }
3793 0 : catch (const InvalidArgumentException &e) {
3794 0 : throw ConversionException("Error: message was '"+
3795 0 : e.getMessage()+
3796 : "'",
3797 0 : tableName);
3798 0 : }
3799 :
3800 0 : }
3801 :
3802 0 : vector<ArrayTime> Parser::get1DArrayTime(const string &name, const string &tableName, const string &xmlDoc)
3803 : {
3804 0 : string xmlField = Parser::getField(xmlDoc,name);
3805 0 : if (xmlField.length() == 0) {
3806 0 : throw ConversionException("Error: Field \"" +
3807 0 : name + "\": Invalid XML syntax", tableName);
3808 : }
3809 0 : StringTokenizer t(xmlField," ");
3810 : try {
3811 0 : int ndim = Integer::parseInt(t.nextToken());
3812 0 : if (ndim != 1) {
3813 0 : throw ConversionException("Error: Field \"" +
3814 0 : name + "\": Invalid array format", tableName);
3815 : }
3816 0 : int dim0 = Integer::parseInt(t.nextToken());
3817 0 : vector<ArrayTime> value (dim0);
3818 0 : if (dim0 == 0)
3819 0 : return value;
3820 0 : for (int i = 0; i < dim0; ++i) {
3821 :
3822 0 : value[i] = ArrayTime::getArrayTime(t);
3823 :
3824 : }
3825 0 : if (t.hasMoreTokens()) {
3826 0 : throw ConversionException("Error: Field \"" +
3827 0 : name + "\": Syntax error.", tableName);
3828 : }
3829 0 : return value;
3830 0 : } catch (const NumberFormatException &e) {
3831 0 : throw ConversionException("Error: Field \"" +
3832 0 : name + "\": " + e.getMessage(), tableName);
3833 0 : } catch (const OutOfBoundsException &e) {
3834 0 : throw ConversionException("Error: Field \"" +
3835 0 : name + "\": Unexpected end of string", tableName);
3836 0 : } catch (const TagFormatException &e) {
3837 0 : throw ConversionException("Error: Field \"" +
3838 0 : name + "\": " + e.getMessage(), tableName);
3839 0 : }
3840 0 : }
3841 :
3842 0 : vector< vector<ArrayTime> > Parser::get2DArrayTime(const string &name, const string &tableName, const string &xmlDoc)
3843 : {
3844 0 : string xmlField = Parser::getField(xmlDoc,name);
3845 0 : if (xmlField.length() == 0) {
3846 0 : throw ConversionException("Error: Field \"" +
3847 0 : name + "\": Invalid XML syntax", tableName);
3848 : }
3849 0 : StringTokenizer t(xmlField," ");
3850 : try {
3851 0 : int ndim = Integer::parseInt(t.nextToken());
3852 0 : if (ndim != 2) {
3853 0 : throw ConversionException("Error: Field \"" +
3854 0 : name + "\": Invalid array format", tableName);
3855 : }
3856 0 : int dim0 = Integer::parseInt(t.nextToken());
3857 0 : int dim1 = Integer::parseInt(t.nextToken());
3858 0 : vector< vector<ArrayTime> > value;
3859 :
3860 0 : if (dim0 == 0 || dim1 == 0)
3861 0 : return value;
3862 :
3863 0 : vector<ArrayTime> v_aux;
3864 0 : for (int i = 0; i < dim0; ++i) {
3865 0 : v_aux.clear();
3866 0 : for (int j = 0; j < dim1; ++j) {
3867 :
3868 0 : v_aux.push_back(ArrayTime::getArrayTime(t));
3869 :
3870 : }
3871 0 : value.push_back(v_aux);
3872 : }
3873 0 : if (t.hasMoreTokens()) {
3874 0 : throw ConversionException("Error: Field \"" +
3875 0 : name + "\": Syntax error.", tableName);
3876 : }
3877 0 : return value;
3878 0 : } catch (const NumberFormatException &e) {
3879 0 : throw ConversionException("Error: Field \"" +
3880 0 : name + "\": " + e.getMessage(), tableName);
3881 0 : } catch (const OutOfBoundsException &e) {
3882 0 : throw ConversionException("Error: Field \"" +
3883 0 : name + "\": Unexpected end of string", tableName);
3884 0 : } catch (const TagFormatException &e) {
3885 0 : throw ConversionException("Error: Field \"" +
3886 0 : name + "\": " + e.getMessage(), tableName);
3887 0 : }
3888 0 : }
3889 :
3890 0 : vector< vector< vector<ArrayTime> > > Parser::get3DArrayTime(const string &name, const string &tableName, const string &xmlDoc)
3891 : {
3892 0 : string xmlField = Parser::getField(xmlDoc,name);
3893 0 : if (xmlField.length() == 0) {
3894 0 : throw ConversionException("Error: Field \"" +
3895 0 : name + "\": Invalid XML syntax", tableName);
3896 : }
3897 0 : StringTokenizer t(xmlField," ");
3898 : try {
3899 0 : int ndim = Integer::parseInt(t.nextToken());
3900 0 : if (ndim != 3) {
3901 0 : throw ConversionException("Error: Field \"" +
3902 0 : name + "\": Invalid array format", tableName);
3903 : }
3904 0 : int dim0 = Integer::parseInt(t.nextToken());
3905 0 : int dim1 = Integer::parseInt(t.nextToken());
3906 0 : int dim2 = Integer::parseInt(t.nextToken());
3907 0 : vector< vector< vector<ArrayTime> > > value ;
3908 0 : if (dim0 == 0 || dim1 == 0 || dim2 == 0)
3909 0 : return value;
3910 :
3911 0 : vector<vector<ArrayTime> > vv_aux;
3912 0 : vector<ArrayTime> v_aux;
3913 0 : for (int i = 0; i < dim0; ++i) {
3914 0 : vv_aux.clear();
3915 0 : for (int j = 0; j < dim1; ++j) {
3916 0 : v_aux.clear();
3917 0 : for (int k = 0; k < dim2; ++k) {
3918 :
3919 0 : v_aux.push_back(ArrayTime::getArrayTime(t));
3920 :
3921 : }
3922 0 : vv_aux.push_back(v_aux);
3923 : }
3924 0 : value.push_back(vv_aux);
3925 : }
3926 0 : if (t.hasMoreTokens()) {
3927 0 : throw ConversionException("Error: Field \"" +
3928 0 : name + "\": Syntax error.", tableName);
3929 : }
3930 0 : return value;
3931 0 : } catch (const NumberFormatException &e) {
3932 0 : throw ConversionException("Error: Field \"" +
3933 0 : name + "\": " + e.getMessage(), tableName);
3934 0 : } catch (const OutOfBoundsException &e) {
3935 0 : throw ConversionException("Error: Field \"" +
3936 0 : name + "\": Unexpected end of string", tableName);
3937 0 : } catch (const TagFormatException &e) {
3938 0 : throw ConversionException("Error: Field \"" +
3939 0 : name + "\": " + e.getMessage(), tableName);
3940 0 : }
3941 0 : }
3942 :
3943 0 : vector< vector< vector< vector<ArrayTime> > > >Parser::get4DArrayTime(const string &name, const string &tableName, const string &xmlDoc)
3944 : {
3945 0 : string xmlField = Parser::getField(xmlDoc,name);
3946 0 : if (xmlField.length() == 0) {
3947 0 : throw ConversionException("Error: Field \"" +
3948 0 : name + "\": Invalid XML syntax", tableName);
3949 : }
3950 0 : StringTokenizer t(xmlField," ");
3951 : try {
3952 0 : int ndim = Integer::parseInt(t.nextToken());
3953 0 : if (ndim != 4) {
3954 0 : throw ConversionException("Error: Field \"" +
3955 0 : name + "\": Invalid array format", tableName);
3956 : }
3957 0 : int dim0 = Integer::parseInt(t.nextToken());
3958 0 : int dim1 = Integer::parseInt(t.nextToken());
3959 0 : int dim2 = Integer::parseInt(t.nextToken());
3960 0 : int dim3 = Integer::parseInt(t.nextToken());
3961 0 : vector<vector< vector< vector<ArrayTime> > > >value;
3962 0 : if (dim0 == 0 || dim1 == 0 || dim2 == 0 || dim3 == 0)
3963 0 : return value;
3964 :
3965 0 : vector<vector<vector<ArrayTime> > >vvv_aux;
3966 0 : vector<vector< ArrayTime> > vv_aux;
3967 0 : vector<ArrayTime> v_aux;
3968 0 : for (int i = 0; i < dim0; ++i) {
3969 0 : vvv_aux.clear();
3970 0 : for (int j = 0; j < dim1; ++j) {
3971 0 : vv_aux.clear();
3972 0 : for (int k = 0; k < dim2; ++k) {
3973 0 : v_aux.clear();
3974 0 : for (int l = 0; l < dim3; l++) {
3975 :
3976 0 : v_aux.push_back(ArrayTime::getArrayTime(t));
3977 :
3978 : }
3979 0 : vv_aux.push_back(v_aux);
3980 : }
3981 0 : vvv_aux.push_back(vv_aux);
3982 : }
3983 0 : value.push_back(vvv_aux);
3984 : }
3985 0 : if (t.hasMoreTokens()) {
3986 0 : throw ConversionException("Error: Field \"" +
3987 0 : name + "\": Syntax error.", tableName);
3988 : }
3989 0 : return value;
3990 0 : } catch (const NumberFormatException &e) {
3991 0 : throw ConversionException("Error: Field \"" +
3992 0 : name + "\": " + e.getMessage(), tableName);
3993 0 : } catch (const OutOfBoundsException &e) {
3994 0 : throw ConversionException("Error: Field \"" +
3995 0 : name + "\": Unexpected end of string", tableName);
3996 0 : } catch (const TagFormatException &e) {
3997 0 : throw ConversionException("Error: Field \"" +
3998 0 : name + "\": " + e.getMessage(), tableName);
3999 0 : }
4000 0 : }
4001 :
4002 :
4003 :
4004 :
4005 :
4006 : // Field type: ArrayTimeInterval
4007 :
4008 0 : void Parser::toXML(ArrayTimeInterval data, const string &name, string &buf) {
4009 0 : buf.append("<" + name + "> ");
4010 :
4011 : //buf.append(data.getStart().toString()+" "+data.getDuration().toString());
4012 0 : buf.append(data.getMidPoint().toString()+" "+data.getDuration().toString());
4013 :
4014 0 : buf.append(" </" + name + "> ");
4015 0 : }
4016 :
4017 :
4018 :
4019 :
4020 0 : void Parser::toXML(vector<ArrayTimeInterval> data, const string &name, string &buf) {
4021 0 : buf.append("<" + name + "> ");
4022 0 : buf.append("1 ");
4023 0 : buf.append(Integer::toString(data.size()));
4024 0 : buf.append(" ");
4025 0 : for (unsigned int i = 0; i < data.size(); ++i) {
4026 :
4027 : //buf.append(data[i].getStart().toString()+" "+data[i].getDuration().toString()+" ");
4028 0 : buf.append(data[i].getMidPoint().toString()+" "+data[i].getDuration().toString()+" ");
4029 :
4030 0 : buf.append(" ");
4031 : }
4032 0 : buf.append(" </" + name + "> ");
4033 0 : }
4034 :
4035 0 : void Parser::toXML(vector< vector<ArrayTimeInterval> > data, const string &name, string &buf) {
4036 0 : buf.append("<" + name + "> ");
4037 0 : buf.append("2 ");
4038 0 : buf.append(Integer::toString(data.size()));
4039 0 : buf.append(" ");
4040 0 : buf.append(Integer::toString(data[0].size()));
4041 0 : buf.append(" ");
4042 0 : for (unsigned int i = 0; i < data.size(); ++i) {
4043 0 : for (unsigned int j = 0; j < data[i].size(); ++j) {
4044 :
4045 : //buf.append(data[i][j].getStart().toString()+" "+data[i][j].getDuration().toString()+" ");
4046 0 : buf.append(data[i][j].getMidPoint().toString()+" "+data[i][j].getDuration().toString()+" ");
4047 :
4048 0 : buf.append(" ");
4049 : }
4050 : }
4051 0 : buf.append(" </" + name + "> ");
4052 0 : }
4053 :
4054 0 : void Parser::toXML(vector< vector< vector<ArrayTimeInterval> > > data, const string &name, string &buf) {
4055 0 : buf.append("<" + name + "> ");
4056 0 : buf.append("3 ");
4057 0 : buf.append(Integer::toString(data.size()));
4058 0 : buf.append(" ");
4059 0 : buf.append(Integer::toString(data[0].size()));
4060 0 : buf.append(" ");
4061 0 : buf.append(Integer::toString(data[0][0].size()));
4062 0 : buf.append(" ");
4063 0 : for (unsigned int i = 0; i < data.size(); ++i) {
4064 0 : for (unsigned int j = 0; j < data[i].size(); ++j) {
4065 0 : for (unsigned int k = 0; k < data[i][j].size(); ++k) {
4066 :
4067 : //buf.append(data[i][j][k].getStart().toString()+" "+data[i][j][k].getDuration().toString()+" ");
4068 0 : buf.append(data[i][j][k].getMidPoint().toString()+" "+data[i][j][k].getDuration().toString()+" ");
4069 :
4070 0 : buf.append(" ");
4071 : }
4072 : }
4073 : }
4074 0 : buf.append(" </" + name + "> ");
4075 0 : }
4076 :
4077 0 : void Parser::toXML(vector<vector< vector< vector<ArrayTimeInterval> > > >data, const string &name, string &buf) {
4078 0 : buf.append("<" + name + "> ");
4079 0 : buf.append("4 ");
4080 0 : buf.append(Integer::toString(data.size()));
4081 0 : buf.append(" ");
4082 0 : buf.append(Integer::toString(data[0].size()));
4083 0 : buf.append(" ");
4084 0 : buf.append(Integer::toString(data[0][0].size()));
4085 0 : buf.append(" ");
4086 0 : buf.append(Integer::toString(data[0][0][0].size()));
4087 0 : buf.append(" ");
4088 0 : for (unsigned int i = 0; i < data.size(); ++i) {
4089 0 : for (unsigned int j = 0; j < data[i].size(); ++j) {
4090 0 : for (unsigned int k = 0; k < data[i][j].size(); ++k) {
4091 0 : for (unsigned int l = 0; l < data[i][j][k].size(); l++) {
4092 :
4093 : //buf.append(data[i][j][k][l].getStart().toString()+" "+data[i][j][k][l].getDuration().toString()+" ");
4094 0 : buf.append(data[i][j][k][l].getMidPoint().toString()+" "+data[i][j][k][l].getDuration().toString()+" ");
4095 :
4096 0 : buf.append(" ");
4097 : }
4098 : }
4099 : }
4100 : }
4101 0 : buf.append(" </" + name + "> ");
4102 0 : }
4103 :
4104 :
4105 :
4106 :
4107 :
4108 :
4109 0 : ArrayTimeInterval Parser::getArrayTimeInterval(const string &name, const string &tableName, const string &xmlDoc)
4110 : {
4111 0 : string xmlField = Parser::getField(xmlDoc,name);
4112 0 : if (xmlField.length() == 0)
4113 0 : throw ConversionException("Error: Missing field \"" +
4114 0 : name + "\" or invalid syntax",tableName);
4115 :
4116 0 : StringTokenizer t(xmlField," ");
4117 : //int64_t start = Long::parseLong(t.nextToken());
4118 0 : int64_t l1 = Long::parseLong(t.nextToken());
4119 0 : int64_t l2 = Long::parseLong(t.nextToken());
4120 0 : if ( ArrayTimeInterval::readStartTimeDurationInXML() )
4121 0 : return ArrayTimeInterval (l1, l2);
4122 : else
4123 0 : return ArrayTimeInterval (l1 - l2 / 2, l2);
4124 :
4125 0 : }
4126 :
4127 0 : vector<ArrayTimeInterval> Parser::get1DArrayTimeInterval(const string &name, const string &tableName, const string &xmlDoc)
4128 : {
4129 0 : string xmlField = Parser::getField(xmlDoc,name);
4130 0 : if (xmlField.length() == 0) {
4131 0 : throw ConversionException("Error: Field \"" +
4132 0 : name + "\": Invalid XML syntax", tableName);
4133 : }
4134 0 : StringTokenizer t(xmlField," ");
4135 : try {
4136 0 : int ndim = Integer::parseInt(t.nextToken());
4137 0 : if (ndim != 1) {
4138 0 : throw ConversionException("Error: Field \"" +
4139 0 : name + "\": Invalid array format", tableName);
4140 : }
4141 0 : int dim0 = Integer::parseInt(t.nextToken());
4142 0 : vector<ArrayTimeInterval> value (dim0);
4143 0 : if (dim0 == 0)
4144 0 : return value;
4145 0 : for (int i = 0; i < dim0; ++i) {
4146 :
4147 0 : int64_t l1 = Long::parseLong(t.nextToken());
4148 0 : int64_t l2 = Long::parseLong(t.nextToken());
4149 0 : if ( ArrayTimeInterval::readStartTimeDurationInXML() )
4150 0 : value[i] = ArrayTimeInterval (l1, l2);
4151 : else
4152 0 : value[i] = ArrayTimeInterval (l1 - l2 / 2, l2);
4153 :
4154 :
4155 : }
4156 0 : if (t.hasMoreTokens()) {
4157 0 : throw ConversionException("Error: Field \"" +
4158 0 : name + "\": Syntax error.", tableName);
4159 : }
4160 0 : return value;
4161 0 : } catch (const NumberFormatException &e) {
4162 0 : throw ConversionException("Error: Field \"" +
4163 0 : name + "\": " + e.getMessage(), tableName);
4164 0 : } catch (const OutOfBoundsException &e) {
4165 0 : throw ConversionException("Error: Field \"" +
4166 0 : name + "\": Unexpected end of string", tableName);
4167 0 : } catch (const TagFormatException &e) {
4168 0 : throw ConversionException("Error: Field \"" +
4169 0 : name + "\": " + e.getMessage(), tableName);
4170 0 : }
4171 0 : }
4172 :
4173 0 : vector< vector<ArrayTimeInterval> > Parser::get2DArrayTimeInterval(const string &name, const string &tableName, const string &xmlDoc)
4174 : {
4175 0 : string xmlField = Parser::getField(xmlDoc,name);
4176 0 : if (xmlField.length() == 0) {
4177 0 : throw ConversionException("Error: Field \"" +
4178 0 : name + "\": Invalid XML syntax", tableName);
4179 : }
4180 0 : StringTokenizer t(xmlField," ");
4181 : try {
4182 0 : int ndim = Integer::parseInt(t.nextToken());
4183 0 : if (ndim != 2) {
4184 0 : throw ConversionException("Error: Field \"" +
4185 0 : name + "\": Invalid array format", tableName);
4186 : }
4187 0 : int dim0 = Integer::parseInt(t.nextToken());
4188 0 : int dim1 = Integer::parseInt(t.nextToken());
4189 0 : vector< vector<ArrayTimeInterval> > value;
4190 :
4191 0 : if (dim0 == 0 || dim1 == 0)
4192 0 : return value;
4193 :
4194 0 : vector<ArrayTimeInterval> v_aux;
4195 0 : for (int i = 0; i < dim0; ++i) {
4196 0 : v_aux.clear();
4197 0 : for (int j = 0; j < dim1; ++j) {
4198 :
4199 0 : int64_t l1 = Long::parseLong(t.nextToken());
4200 0 : int64_t l2 = Long::parseLong(t.nextToken());
4201 0 : if ( ArrayTimeInterval::readStartTimeDurationInXML() )
4202 0 : v_aux.push_back(ArrayTimeInterval (l1, l2));
4203 : else
4204 0 : v_aux.push_back(ArrayTimeInterval (l1 - l2 / 2, l2));
4205 :
4206 :
4207 : }
4208 0 : value.push_back(v_aux);
4209 : }
4210 0 : if (t.hasMoreTokens()) {
4211 0 : throw ConversionException("Error: Field \"" +
4212 0 : name + "\": Syntax error.", tableName);
4213 : }
4214 0 : return value;
4215 0 : } catch (const NumberFormatException &e) {
4216 0 : throw ConversionException("Error: Field \"" +
4217 0 : name + "\": " + e.getMessage(), tableName);
4218 0 : } catch (const OutOfBoundsException &e) {
4219 0 : throw ConversionException("Error: Field \"" +
4220 0 : name + "\": Unexpected end of string", tableName);
4221 0 : } catch (const TagFormatException &e) {
4222 0 : throw ConversionException("Error: Field \"" +
4223 0 : name + "\": " + e.getMessage(), tableName);
4224 0 : }
4225 0 : }
4226 :
4227 0 : vector< vector< vector<ArrayTimeInterval> > > Parser::get3DArrayTimeInterval(const string &name, const string &tableName, const string &xmlDoc)
4228 : {
4229 0 : string xmlField = Parser::getField(xmlDoc,name);
4230 0 : if (xmlField.length() == 0) {
4231 0 : throw ConversionException("Error: Field \"" +
4232 0 : name + "\": Invalid XML syntax", tableName);
4233 : }
4234 0 : StringTokenizer t(xmlField," ");
4235 : try {
4236 0 : int ndim = Integer::parseInt(t.nextToken());
4237 0 : if (ndim != 3) {
4238 0 : throw ConversionException("Error: Field \"" +
4239 0 : name + "\": Invalid array format", tableName);
4240 : }
4241 0 : int dim0 = Integer::parseInt(t.nextToken());
4242 0 : int dim1 = Integer::parseInt(t.nextToken());
4243 0 : int dim2 = Integer::parseInt(t.nextToken());
4244 0 : vector< vector< vector<ArrayTimeInterval> > > value ;
4245 0 : if (dim0 == 0 || dim1 == 0 || dim2 == 0)
4246 0 : return value;
4247 :
4248 0 : vector<vector<ArrayTimeInterval> > vv_aux;
4249 0 : vector<ArrayTimeInterval> v_aux;
4250 0 : for (int i = 0; i < dim0; ++i) {
4251 0 : vv_aux.clear();
4252 0 : for (int j = 0; j < dim1; ++j) {
4253 0 : v_aux.clear();
4254 0 : for (int k = 0; k < dim2; ++k) {
4255 :
4256 0 : int64_t l1 = Long::parseLong(t.nextToken());
4257 0 : int64_t l2 = Long::parseLong(t.nextToken());
4258 0 : if ( ArrayTimeInterval::readStartTimeDurationInXML() )
4259 0 : v_aux.push_back(ArrayTimeInterval (l1, l2));
4260 : else
4261 0 : v_aux.push_back(ArrayTimeInterval (l1 - l2 / 2, l2));
4262 :
4263 : }
4264 0 : vv_aux.push_back(v_aux);
4265 : }
4266 0 : value.push_back(vv_aux);
4267 : }
4268 0 : if (t.hasMoreTokens()) {
4269 0 : throw ConversionException("Error: Field \"" +
4270 0 : name + "\": Syntax error.", tableName);
4271 : }
4272 0 : return value;
4273 0 : } catch (const NumberFormatException &e) {
4274 0 : throw ConversionException("Error: Field \"" +
4275 0 : name + "\": " + e.getMessage(), tableName);
4276 0 : } catch (const OutOfBoundsException &e) {
4277 0 : throw ConversionException("Error: Field \"" +
4278 0 : name + "\": Unexpected end of string", tableName);
4279 0 : } catch (const TagFormatException &e) {
4280 0 : throw ConversionException("Error: Field \"" +
4281 0 : name + "\": " + e.getMessage(), tableName);
4282 0 : }
4283 0 : }
4284 :
4285 0 : vector< vector< vector< vector<ArrayTimeInterval> > > >Parser::get4DArrayTimeInterval(const string &name, const string &tableName, const string &xmlDoc)
4286 : {
4287 0 : string xmlField = Parser::getField(xmlDoc,name);
4288 0 : if (xmlField.length() == 0) {
4289 0 : throw ConversionException("Error: Field \"" +
4290 0 : name + "\": Invalid XML syntax", tableName);
4291 : }
4292 0 : StringTokenizer t(xmlField," ");
4293 : try {
4294 0 : int ndim = Integer::parseInt(t.nextToken());
4295 0 : if (ndim != 4) {
4296 0 : throw ConversionException("Error: Field \"" +
4297 0 : name + "\": Invalid array format", tableName);
4298 : }
4299 0 : int dim0 = Integer::parseInt(t.nextToken());
4300 0 : int dim1 = Integer::parseInt(t.nextToken());
4301 0 : int dim2 = Integer::parseInt(t.nextToken());
4302 0 : int dim3 = Integer::parseInt(t.nextToken());
4303 0 : vector<vector< vector< vector<ArrayTimeInterval> > > >value;
4304 0 : if (dim0 == 0 || dim1 == 0 || dim2 == 0 || dim3 == 0)
4305 0 : return value;
4306 :
4307 0 : vector<vector<vector<ArrayTimeInterval> > >vvv_aux;
4308 0 : vector<vector< ArrayTimeInterval> > vv_aux;
4309 0 : vector<ArrayTimeInterval> v_aux;
4310 0 : for (int i = 0; i < dim0; ++i) {
4311 0 : vvv_aux.clear();
4312 0 : for (int j = 0; j < dim1; ++j) {
4313 0 : vv_aux.clear();
4314 0 : for (int k = 0; k < dim2; ++k) {
4315 0 : v_aux.clear();
4316 0 : for (int l = 0; l < dim3; l++) {
4317 :
4318 0 : int64_t l1 = Long::parseLong(t.nextToken());
4319 0 : int64_t l2 = Long::parseLong(t.nextToken());
4320 0 : if ( ArrayTimeInterval::readStartTimeDurationInXML() )
4321 0 : v_aux.push_back(ArrayTimeInterval (l1, l2));
4322 : else
4323 0 : v_aux.push_back(ArrayTimeInterval (l1 - l2 / 2, l2));
4324 :
4325 : }
4326 0 : vv_aux.push_back(v_aux);
4327 : }
4328 0 : vvv_aux.push_back(vv_aux);
4329 : }
4330 0 : value.push_back(vvv_aux);
4331 : }
4332 0 : if (t.hasMoreTokens()) {
4333 0 : throw ConversionException("Error: Field \"" +
4334 0 : name + "\": Syntax error.", tableName);
4335 : }
4336 0 : return value;
4337 0 : } catch (const NumberFormatException &e) {
4338 0 : throw ConversionException("Error: Field \"" +
4339 0 : name + "\": " + e.getMessage(), tableName);
4340 0 : } catch (const OutOfBoundsException &e) {
4341 0 : throw ConversionException("Error: Field \"" +
4342 0 : name + "\": Unexpected end of string", tableName);
4343 0 : } catch (const TagFormatException &e) {
4344 0 : throw ConversionException("Error: Field \"" +
4345 0 : name + "\": " + e.getMessage(), tableName);
4346 0 : }
4347 0 : }
4348 :
4349 :
4350 :
4351 :
4352 :
4353 : // Field type: Complex
4354 :
4355 0 : void Parser::toXML(Complex data, const string &name, string &buf) {
4356 0 : buf.append("<" + name + "> ");
4357 :
4358 0 : buf.append(data.toString());
4359 :
4360 0 : buf.append(" </" + name + "> ");
4361 0 : }
4362 :
4363 :
4364 :
4365 :
4366 0 : void Parser::toXML(vector<Complex> data, const string &name, string &buf) {
4367 0 : buf.append("<" + name + "> ");
4368 0 : buf.append("1 ");
4369 0 : buf.append(Integer::toString(data.size()));
4370 0 : buf.append(" ");
4371 0 : for (unsigned int i = 0; i < data.size(); ++i) {
4372 :
4373 0 : buf.append(data[i].toString());
4374 :
4375 0 : buf.append(" ");
4376 : }
4377 0 : buf.append(" </" + name + "> ");
4378 0 : }
4379 :
4380 0 : void Parser::toXML(vector< vector<Complex> > data, const string &name, string &buf) {
4381 0 : buf.append("<" + name + "> ");
4382 0 : buf.append("2 ");
4383 0 : buf.append(Integer::toString(data.size()));
4384 0 : buf.append(" ");
4385 0 : buf.append(Integer::toString(data[0].size()));
4386 0 : buf.append(" ");
4387 0 : for (unsigned int i = 0; i < data.size(); ++i) {
4388 0 : for (unsigned int j = 0; j < data[i].size(); ++j) {
4389 :
4390 0 : buf.append(data[i][j].toString());
4391 :
4392 0 : buf.append(" ");
4393 : }
4394 : }
4395 0 : buf.append(" </" + name + "> ");
4396 0 : }
4397 :
4398 0 : void Parser::toXML(vector< vector< vector<Complex> > > data, const string &name, string &buf) {
4399 0 : buf.append("<" + name + "> ");
4400 0 : buf.append("3 ");
4401 0 : buf.append(Integer::toString(data.size()));
4402 0 : buf.append(" ");
4403 0 : buf.append(Integer::toString(data[0].size()));
4404 0 : buf.append(" ");
4405 0 : buf.append(Integer::toString(data[0][0].size()));
4406 0 : buf.append(" ");
4407 0 : for (unsigned int i = 0; i < data.size(); ++i) {
4408 0 : for (unsigned int j = 0; j < data[i].size(); ++j) {
4409 0 : for (unsigned int k = 0; k < data[i][j].size(); ++k) {
4410 :
4411 0 : buf.append(data[i][j][k].toString());
4412 :
4413 0 : buf.append(" ");
4414 : }
4415 : }
4416 : }
4417 0 : buf.append(" </" + name + "> ");
4418 0 : }
4419 :
4420 0 : void Parser::toXML(vector<vector< vector< vector<Complex> > > >data, const string &name, string &buf) {
4421 0 : buf.append("<" + name + "> ");
4422 0 : buf.append("4 ");
4423 0 : buf.append(Integer::toString(data.size()));
4424 0 : buf.append(" ");
4425 0 : buf.append(Integer::toString(data[0].size()));
4426 0 : buf.append(" ");
4427 0 : buf.append(Integer::toString(data[0][0].size()));
4428 0 : buf.append(" ");
4429 0 : buf.append(Integer::toString(data[0][0][0].size()));
4430 0 : buf.append(" ");
4431 0 : for (unsigned int i = 0; i < data.size(); ++i) {
4432 0 : for (unsigned int j = 0; j < data[i].size(); ++j) {
4433 0 : for (unsigned int k = 0; k < data[i][j].size(); ++k) {
4434 0 : for (unsigned int l = 0; l < data[i][j][k].size(); l++) {
4435 :
4436 0 : buf.append(data[i][j][k][l].toString());
4437 :
4438 0 : buf.append(" ");
4439 : }
4440 : }
4441 : }
4442 : }
4443 0 : buf.append(" </" + name + "> ");
4444 0 : }
4445 :
4446 :
4447 :
4448 :
4449 :
4450 :
4451 0 : Complex Parser::getComplex(const string &name, const string &tableName, const string &xmlDoc)
4452 : {
4453 0 : string xmlField = Parser::getField(xmlDoc,name);
4454 0 : if (xmlField.length() == 0)
4455 0 : throw ConversionException("Error: Missing field \"" +
4456 0 : name + "\" or invalid syntax",tableName);
4457 :
4458 : try {
4459 0 : return Complex (xmlField);
4460 : }
4461 0 : catch (const InvalidArgumentException &e) {
4462 0 : throw ConversionException("Error: message was '"+
4463 0 : e.getMessage()+
4464 : "'",
4465 0 : tableName);
4466 0 : }
4467 :
4468 0 : }
4469 :
4470 0 : vector<Complex> Parser::get1DComplex(const string &name, const string &tableName, const string &xmlDoc)
4471 : {
4472 0 : string xmlField = Parser::getField(xmlDoc,name);
4473 0 : if (xmlField.length() == 0) {
4474 0 : throw ConversionException("Error: Field \"" +
4475 0 : name + "\": Invalid XML syntax", tableName);
4476 : }
4477 0 : StringTokenizer t(xmlField," ");
4478 : try {
4479 0 : int ndim = Integer::parseInt(t.nextToken());
4480 0 : if (ndim != 1) {
4481 0 : throw ConversionException("Error: Field \"" +
4482 0 : name + "\": Invalid array format", tableName);
4483 : }
4484 0 : int dim0 = Integer::parseInt(t.nextToken());
4485 0 : vector<Complex> value (dim0);
4486 0 : if (dim0 == 0)
4487 0 : return value;
4488 0 : for (int i = 0; i < dim0; ++i) {
4489 :
4490 0 : value[i] = Complex::getComplex(t);
4491 :
4492 : }
4493 0 : if (t.hasMoreTokens()) {
4494 0 : throw ConversionException("Error: Field \"" +
4495 0 : name + "\": Syntax error.", tableName);
4496 : }
4497 0 : return value;
4498 0 : } catch (const NumberFormatException &e) {
4499 0 : throw ConversionException("Error: Field \"" +
4500 0 : name + "\": " + e.getMessage(), tableName);
4501 0 : } catch (const OutOfBoundsException &e) {
4502 0 : throw ConversionException("Error: Field \"" +
4503 0 : name + "\": Unexpected end of string", tableName);
4504 0 : } catch (const TagFormatException &e) {
4505 0 : throw ConversionException("Error: Field \"" +
4506 0 : name + "\": " + e.getMessage(), tableName);
4507 0 : }
4508 0 : }
4509 :
4510 0 : vector< vector<Complex> > Parser::get2DComplex(const string &name, const string &tableName, const string &xmlDoc)
4511 : {
4512 0 : string xmlField = Parser::getField(xmlDoc,name);
4513 0 : if (xmlField.length() == 0) {
4514 0 : throw ConversionException("Error: Field \"" +
4515 0 : name + "\": Invalid XML syntax", tableName);
4516 : }
4517 0 : StringTokenizer t(xmlField," ");
4518 : try {
4519 0 : int ndim = Integer::parseInt(t.nextToken());
4520 0 : if (ndim != 2) {
4521 0 : throw ConversionException("Error: Field \"" +
4522 0 : name + "\": Invalid array format", tableName);
4523 : }
4524 0 : int dim0 = Integer::parseInt(t.nextToken());
4525 0 : int dim1 = Integer::parseInt(t.nextToken());
4526 0 : vector< vector<Complex> > value;
4527 :
4528 0 : if (dim0 == 0 || dim1 == 0)
4529 0 : return value;
4530 :
4531 0 : vector<Complex> v_aux;
4532 0 : for (int i = 0; i < dim0; ++i) {
4533 0 : v_aux.clear();
4534 0 : for (int j = 0; j < dim1; ++j) {
4535 :
4536 0 : v_aux.push_back(Complex::getComplex(t));
4537 :
4538 : }
4539 0 : value.push_back(v_aux);
4540 : }
4541 0 : if (t.hasMoreTokens()) {
4542 0 : throw ConversionException("Error: Field \"" +
4543 0 : name + "\": Syntax error.", tableName);
4544 : }
4545 0 : return value;
4546 0 : } catch (const NumberFormatException &e) {
4547 0 : throw ConversionException("Error: Field \"" +
4548 0 : name + "\": " + e.getMessage(), tableName);
4549 0 : } catch (const OutOfBoundsException &e) {
4550 0 : throw ConversionException("Error: Field \"" +
4551 0 : name + "\": Unexpected end of string", tableName);
4552 0 : } catch (const TagFormatException &e) {
4553 0 : throw ConversionException("Error: Field \"" +
4554 0 : name + "\": " + e.getMessage(), tableName);
4555 0 : }
4556 0 : }
4557 :
4558 0 : vector< vector< vector<Complex> > > Parser::get3DComplex(const string &name, const string &tableName, const string &xmlDoc)
4559 : {
4560 0 : string xmlField = Parser::getField(xmlDoc,name);
4561 0 : if (xmlField.length() == 0) {
4562 0 : throw ConversionException("Error: Field \"" +
4563 0 : name + "\": Invalid XML syntax", tableName);
4564 : }
4565 0 : StringTokenizer t(xmlField," ");
4566 : try {
4567 0 : int ndim = Integer::parseInt(t.nextToken());
4568 0 : if (ndim != 3) {
4569 0 : throw ConversionException("Error: Field \"" +
4570 0 : name + "\": Invalid array format", tableName);
4571 : }
4572 0 : int dim0 = Integer::parseInt(t.nextToken());
4573 0 : int dim1 = Integer::parseInt(t.nextToken());
4574 0 : int dim2 = Integer::parseInt(t.nextToken());
4575 0 : vector< vector< vector<Complex> > > value ;
4576 0 : if (dim0 == 0 || dim1 == 0 || dim2 == 0)
4577 0 : return value;
4578 :
4579 0 : vector<vector<Complex> > vv_aux;
4580 0 : vector<Complex> v_aux;
4581 0 : for (int i = 0; i < dim0; ++i) {
4582 0 : vv_aux.clear();
4583 0 : for (int j = 0; j < dim1; ++j) {
4584 0 : v_aux.clear();
4585 0 : for (int k = 0; k < dim2; ++k) {
4586 :
4587 0 : v_aux.push_back(Complex::getComplex(t));
4588 :
4589 : }
4590 0 : vv_aux.push_back(v_aux);
4591 : }
4592 0 : value.push_back(vv_aux);
4593 : }
4594 0 : if (t.hasMoreTokens()) {
4595 0 : throw ConversionException("Error: Field \"" +
4596 0 : name + "\": Syntax error.", tableName);
4597 : }
4598 0 : return value;
4599 0 : } catch (const NumberFormatException &e) {
4600 0 : throw ConversionException("Error: Field \"" +
4601 0 : name + "\": " + e.getMessage(), tableName);
4602 0 : } catch (const OutOfBoundsException &e) {
4603 0 : throw ConversionException("Error: Field \"" +
4604 0 : name + "\": Unexpected end of string", tableName);
4605 0 : } catch (const TagFormatException &e) {
4606 0 : throw ConversionException("Error: Field \"" +
4607 0 : name + "\": " + e.getMessage(), tableName);
4608 0 : }
4609 0 : }
4610 :
4611 0 : vector< vector< vector< vector<Complex> > > >Parser::get4DComplex(const string &name, const string &tableName, const string &xmlDoc)
4612 : {
4613 0 : string xmlField = Parser::getField(xmlDoc,name);
4614 0 : if (xmlField.length() == 0) {
4615 0 : throw ConversionException("Error: Field \"" +
4616 0 : name + "\": Invalid XML syntax", tableName);
4617 : }
4618 0 : StringTokenizer t(xmlField," ");
4619 : try {
4620 0 : int ndim = Integer::parseInt(t.nextToken());
4621 0 : if (ndim != 4) {
4622 0 : throw ConversionException("Error: Field \"" +
4623 0 : name + "\": Invalid array format", tableName);
4624 : }
4625 0 : int dim0 = Integer::parseInt(t.nextToken());
4626 0 : int dim1 = Integer::parseInt(t.nextToken());
4627 0 : int dim2 = Integer::parseInt(t.nextToken());
4628 0 : int dim3 = Integer::parseInt(t.nextToken());
4629 0 : vector<vector< vector< vector<Complex> > > >value;
4630 0 : if (dim0 == 0 || dim1 == 0 || dim2 == 0 || dim3 == 0)
4631 0 : return value;
4632 :
4633 0 : vector<vector<vector<Complex> > >vvv_aux;
4634 0 : vector<vector< Complex> > vv_aux;
4635 0 : vector<Complex> v_aux;
4636 0 : for (int i = 0; i < dim0; ++i) {
4637 0 : vvv_aux.clear();
4638 0 : for (int j = 0; j < dim1; ++j) {
4639 0 : vv_aux.clear();
4640 0 : for (int k = 0; k < dim2; ++k) {
4641 0 : v_aux.clear();
4642 0 : for (int l = 0; l < dim3; l++) {
4643 :
4644 0 : v_aux.push_back(Complex::getComplex(t));
4645 :
4646 : }
4647 0 : vv_aux.push_back(v_aux);
4648 : }
4649 0 : vvv_aux.push_back(vv_aux);
4650 : }
4651 0 : value.push_back(vvv_aux);
4652 : }
4653 0 : if (t.hasMoreTokens()) {
4654 0 : throw ConversionException("Error: Field \"" +
4655 0 : name + "\": Syntax error.", tableName);
4656 : }
4657 0 : return value;
4658 0 : } catch (const NumberFormatException &e) {
4659 0 : throw ConversionException("Error: Field \"" +
4660 0 : name + "\": " + e.getMessage(), tableName);
4661 0 : } catch (const OutOfBoundsException &e) {
4662 0 : throw ConversionException("Error: Field \"" +
4663 0 : name + "\": Unexpected end of string", tableName);
4664 0 : } catch (const TagFormatException &e) {
4665 0 : throw ConversionException("Error: Field \"" +
4666 0 : name + "\": " + e.getMessage(), tableName);
4667 0 : }
4668 0 : }
4669 :
4670 :
4671 :
4672 :
4673 :
4674 : // Field type: Entity
4675 :
4676 0 : void Parser::toXML(Entity data, const string &name, string &buf) {
4677 0 : buf.append("<" + name + "> ");
4678 :
4679 0 : buf.append(data.toString());
4680 :
4681 0 : buf.append(" </" + name + "> ");
4682 0 : }
4683 :
4684 :
4685 :
4686 :
4687 0 : void Parser::toXML(vector<Entity> data, const string &name, string &buf) {
4688 0 : buf.append("<" + name + "> ");
4689 0 : buf.append("1 ");
4690 0 : buf.append(Integer::toString(data.size()));
4691 0 : buf.append(" ");
4692 0 : for (unsigned int i = 0; i < data.size(); ++i) {
4693 :
4694 0 : buf.append(data[i].toString());
4695 :
4696 0 : buf.append(" ");
4697 : }
4698 0 : buf.append(" </" + name + "> ");
4699 0 : }
4700 :
4701 0 : void Parser::toXML(vector< vector<Entity> > data, const string &name, string &buf) {
4702 0 : buf.append("<" + name + "> ");
4703 0 : buf.append("2 ");
4704 0 : buf.append(Integer::toString(data.size()));
4705 0 : buf.append(" ");
4706 0 : buf.append(Integer::toString(data[0].size()));
4707 0 : buf.append(" ");
4708 0 : for (unsigned int i = 0; i < data.size(); ++i) {
4709 0 : for (unsigned int j = 0; j < data[i].size(); ++j) {
4710 :
4711 0 : buf.append(data[i][j].toString());
4712 :
4713 0 : buf.append(" ");
4714 : }
4715 : }
4716 0 : buf.append(" </" + name + "> ");
4717 0 : }
4718 :
4719 0 : void Parser::toXML(vector< vector< vector<Entity> > > data, const string &name, string &buf) {
4720 0 : buf.append("<" + name + "> ");
4721 0 : buf.append("3 ");
4722 0 : buf.append(Integer::toString(data.size()));
4723 0 : buf.append(" ");
4724 0 : buf.append(Integer::toString(data[0].size()));
4725 0 : buf.append(" ");
4726 0 : buf.append(Integer::toString(data[0][0].size()));
4727 0 : buf.append(" ");
4728 0 : for (unsigned int i = 0; i < data.size(); ++i) {
4729 0 : for (unsigned int j = 0; j < data[i].size(); ++j) {
4730 0 : for (unsigned int k = 0; k < data[i][j].size(); ++k) {
4731 :
4732 0 : buf.append(data[i][j][k].toString());
4733 :
4734 0 : buf.append(" ");
4735 : }
4736 : }
4737 : }
4738 0 : buf.append(" </" + name + "> ");
4739 0 : }
4740 :
4741 0 : void Parser::toXML(vector<vector< vector< vector<Entity> > > >data, const string &name, string &buf) {
4742 0 : buf.append("<" + name + "> ");
4743 0 : buf.append("4 ");
4744 0 : buf.append(Integer::toString(data.size()));
4745 0 : buf.append(" ");
4746 0 : buf.append(Integer::toString(data[0].size()));
4747 0 : buf.append(" ");
4748 0 : buf.append(Integer::toString(data[0][0].size()));
4749 0 : buf.append(" ");
4750 0 : buf.append(Integer::toString(data[0][0][0].size()));
4751 0 : buf.append(" ");
4752 0 : for (unsigned int i = 0; i < data.size(); ++i) {
4753 0 : for (unsigned int j = 0; j < data[i].size(); ++j) {
4754 0 : for (unsigned int k = 0; k < data[i][j].size(); ++k) {
4755 0 : for (unsigned int l = 0; l < data[i][j][k].size(); l++) {
4756 :
4757 0 : buf.append(data[i][j][k][l].toString());
4758 :
4759 0 : buf.append(" ");
4760 : }
4761 : }
4762 : }
4763 : }
4764 0 : buf.append(" </" + name + "> ");
4765 0 : }
4766 :
4767 :
4768 :
4769 :
4770 :
4771 :
4772 0 : Entity Parser::getEntity(const string &name, const string &tableName, const string &xmlDoc)
4773 : {
4774 0 : string xmlField = Parser::getField(xmlDoc,name);
4775 0 : if (xmlField.length() == 0)
4776 0 : throw ConversionException("Error: Missing field \"" +
4777 0 : name + "\" or invalid syntax",tableName);
4778 :
4779 : try {
4780 0 : return Entity (xmlField);
4781 : }
4782 0 : catch (const InvalidArgumentException &e) {
4783 0 : throw ConversionException("Error: message was '"+
4784 0 : e.getMessage()+
4785 : "'",
4786 0 : tableName);
4787 0 : }
4788 :
4789 0 : }
4790 :
4791 0 : vector<Entity> Parser::get1DEntity(const string &name, const string &tableName, const string &xmlDoc)
4792 : {
4793 0 : string xmlField = Parser::getField(xmlDoc,name);
4794 0 : if (xmlField.length() == 0) {
4795 0 : throw ConversionException("Error: Field \"" +
4796 0 : name + "\": Invalid XML syntax", tableName);
4797 : }
4798 0 : StringTokenizer t(xmlField," ");
4799 : try {
4800 0 : int ndim = Integer::parseInt(t.nextToken());
4801 0 : if (ndim != 1) {
4802 0 : throw ConversionException("Error: Field \"" +
4803 0 : name + "\": Invalid array format", tableName);
4804 : }
4805 0 : int dim0 = Integer::parseInt(t.nextToken());
4806 0 : vector<Entity> value (dim0);
4807 0 : if (dim0 == 0)
4808 0 : return value;
4809 0 : for (int i = 0; i < dim0; ++i) {
4810 :
4811 0 : value[i] = Entity::getEntity(t);
4812 :
4813 : }
4814 0 : if (t.hasMoreTokens()) {
4815 0 : throw ConversionException("Error: Field \"" +
4816 0 : name + "\": Syntax error.", tableName);
4817 : }
4818 0 : return value;
4819 0 : } catch (const NumberFormatException &e) {
4820 0 : throw ConversionException("Error: Field \"" +
4821 0 : name + "\": " + e.getMessage(), tableName);
4822 0 : } catch (const OutOfBoundsException &e) {
4823 0 : throw ConversionException("Error: Field \"" +
4824 0 : name + "\": Unexpected end of string", tableName);
4825 0 : } catch (const TagFormatException &e) {
4826 0 : throw ConversionException("Error: Field \"" +
4827 0 : name + "\": " + e.getMessage(), tableName);
4828 0 : }
4829 0 : }
4830 :
4831 0 : vector< vector<Entity> > Parser::get2DEntity(const string &name, const string &tableName, const string &xmlDoc)
4832 : {
4833 0 : string xmlField = Parser::getField(xmlDoc,name);
4834 0 : if (xmlField.length() == 0) {
4835 0 : throw ConversionException("Error: Field \"" +
4836 0 : name + "\": Invalid XML syntax", tableName);
4837 : }
4838 0 : StringTokenizer t(xmlField," ");
4839 : try {
4840 0 : int ndim = Integer::parseInt(t.nextToken());
4841 0 : if (ndim != 2) {
4842 0 : throw ConversionException("Error: Field \"" +
4843 0 : name + "\": Invalid array format", tableName);
4844 : }
4845 0 : int dim0 = Integer::parseInt(t.nextToken());
4846 0 : int dim1 = Integer::parseInt(t.nextToken());
4847 0 : vector< vector<Entity> > value;
4848 :
4849 0 : if (dim0 == 0 || dim1 == 0)
4850 0 : return value;
4851 :
4852 0 : vector<Entity> v_aux;
4853 0 : for (int i = 0; i < dim0; ++i) {
4854 0 : v_aux.clear();
4855 0 : for (int j = 0; j < dim1; ++j) {
4856 :
4857 0 : v_aux.push_back(Entity::getEntity(t));
4858 :
4859 : }
4860 0 : value.push_back(v_aux);
4861 : }
4862 0 : if (t.hasMoreTokens()) {
4863 0 : throw ConversionException("Error: Field \"" +
4864 0 : name + "\": Syntax error.", tableName);
4865 : }
4866 0 : return value;
4867 0 : } catch (const NumberFormatException &e) {
4868 0 : throw ConversionException("Error: Field \"" +
4869 0 : name + "\": " + e.getMessage(), tableName);
4870 0 : } catch (const OutOfBoundsException &e) {
4871 0 : throw ConversionException("Error: Field \"" +
4872 0 : name + "\": Unexpected end of string", tableName);
4873 0 : } catch (const TagFormatException &e) {
4874 0 : throw ConversionException("Error: Field \"" +
4875 0 : name + "\": " + e.getMessage(), tableName);
4876 0 : }
4877 0 : }
4878 :
4879 0 : vector< vector< vector<Entity> > > Parser::get3DEntity(const string &name, const string &tableName, const string &xmlDoc)
4880 : {
4881 0 : string xmlField = Parser::getField(xmlDoc,name);
4882 0 : if (xmlField.length() == 0) {
4883 0 : throw ConversionException("Error: Field \"" +
4884 0 : name + "\": Invalid XML syntax", tableName);
4885 : }
4886 0 : StringTokenizer t(xmlField," ");
4887 : try {
4888 0 : int ndim = Integer::parseInt(t.nextToken());
4889 0 : if (ndim != 3) {
4890 0 : throw ConversionException("Error: Field \"" +
4891 0 : name + "\": Invalid array format", tableName);
4892 : }
4893 0 : int dim0 = Integer::parseInt(t.nextToken());
4894 0 : int dim1 = Integer::parseInt(t.nextToken());
4895 0 : int dim2 = Integer::parseInt(t.nextToken());
4896 0 : vector< vector< vector<Entity> > > value ;
4897 0 : if (dim0 == 0 || dim1 == 0 || dim2 == 0)
4898 0 : return value;
4899 :
4900 0 : vector<vector<Entity> > vv_aux;
4901 0 : vector<Entity> v_aux;
4902 0 : for (int i = 0; i < dim0; ++i) {
4903 0 : vv_aux.clear();
4904 0 : for (int j = 0; j < dim1; ++j) {
4905 0 : v_aux.clear();
4906 0 : for (int k = 0; k < dim2; ++k) {
4907 :
4908 0 : v_aux.push_back(Entity::getEntity(t));
4909 :
4910 : }
4911 0 : vv_aux.push_back(v_aux);
4912 : }
4913 0 : value.push_back(vv_aux);
4914 : }
4915 0 : if (t.hasMoreTokens()) {
4916 0 : throw ConversionException("Error: Field \"" +
4917 0 : name + "\": Syntax error.", tableName);
4918 : }
4919 0 : return value;
4920 0 : } catch (const NumberFormatException &e) {
4921 0 : throw ConversionException("Error: Field \"" +
4922 0 : name + "\": " + e.getMessage(), tableName);
4923 0 : } catch (const OutOfBoundsException &e) {
4924 0 : throw ConversionException("Error: Field \"" +
4925 0 : name + "\": Unexpected end of string", tableName);
4926 0 : } catch (const TagFormatException &e) {
4927 0 : throw ConversionException("Error: Field \"" +
4928 0 : name + "\": " + e.getMessage(), tableName);
4929 0 : }
4930 0 : }
4931 :
4932 0 : vector< vector< vector< vector<Entity> > > >Parser::get4DEntity(const string &name, const string &tableName, const string &xmlDoc)
4933 : {
4934 0 : string xmlField = Parser::getField(xmlDoc,name);
4935 0 : if (xmlField.length() == 0) {
4936 0 : throw ConversionException("Error: Field \"" +
4937 0 : name + "\": Invalid XML syntax", tableName);
4938 : }
4939 0 : StringTokenizer t(xmlField," ");
4940 : try {
4941 0 : int ndim = Integer::parseInt(t.nextToken());
4942 0 : if (ndim != 4) {
4943 0 : throw ConversionException("Error: Field \"" +
4944 0 : name + "\": Invalid array format", tableName);
4945 : }
4946 0 : int dim0 = Integer::parseInt(t.nextToken());
4947 0 : int dim1 = Integer::parseInt(t.nextToken());
4948 0 : int dim2 = Integer::parseInt(t.nextToken());
4949 0 : int dim3 = Integer::parseInt(t.nextToken());
4950 0 : vector<vector< vector< vector<Entity> > > >value;
4951 0 : if (dim0 == 0 || dim1 == 0 || dim2 == 0 || dim3 == 0)
4952 0 : return value;
4953 :
4954 0 : vector<vector<vector<Entity> > >vvv_aux;
4955 0 : vector<vector< Entity> > vv_aux;
4956 0 : vector<Entity> v_aux;
4957 0 : for (int i = 0; i < dim0; ++i) {
4958 0 : vvv_aux.clear();
4959 0 : for (int j = 0; j < dim1; ++j) {
4960 0 : vv_aux.clear();
4961 0 : for (int k = 0; k < dim2; ++k) {
4962 0 : v_aux.clear();
4963 0 : for (int l = 0; l < dim3; l++) {
4964 :
4965 0 : v_aux.push_back(Entity::getEntity(t));
4966 :
4967 : }
4968 0 : vv_aux.push_back(v_aux);
4969 : }
4970 0 : vvv_aux.push_back(vv_aux);
4971 : }
4972 0 : value.push_back(vvv_aux);
4973 : }
4974 0 : if (t.hasMoreTokens()) {
4975 0 : throw ConversionException("Error: Field \"" +
4976 0 : name + "\": Syntax error.", tableName);
4977 : }
4978 0 : return value;
4979 0 : } catch (const NumberFormatException &e) {
4980 0 : throw ConversionException("Error: Field \"" +
4981 0 : name + "\": " + e.getMessage(), tableName);
4982 0 : } catch (const OutOfBoundsException &e) {
4983 0 : throw ConversionException("Error: Field \"" +
4984 0 : name + "\": Unexpected end of string", tableName);
4985 0 : } catch (const TagFormatException &e) {
4986 0 : throw ConversionException("Error: Field \"" +
4987 0 : name + "\": " + e.getMessage(), tableName);
4988 0 : }
4989 0 : }
4990 :
4991 :
4992 :
4993 :
4994 :
4995 : // Field type: EntityId
4996 :
4997 0 : void Parser::toXML(EntityId data, const string &name, string &buf) {
4998 0 : buf.append("<" + name + "> ");
4999 :
5000 0 : buf.append(data.toString());
5001 :
5002 0 : buf.append(" </" + name + "> ");
5003 0 : }
5004 :
5005 :
5006 :
5007 :
5008 0 : void Parser::toXML(vector<EntityId> data, const string &name, string &buf) {
5009 0 : buf.append("<" + name + "> ");
5010 0 : buf.append("1 ");
5011 0 : buf.append(Integer::toString(data.size()));
5012 0 : buf.append(" ");
5013 0 : for (unsigned int i = 0; i < data.size(); ++i) {
5014 :
5015 0 : buf.append(data[i].toString());
5016 :
5017 0 : buf.append(" ");
5018 : }
5019 0 : buf.append(" </" + name + "> ");
5020 0 : }
5021 :
5022 0 : void Parser::toXML(vector< vector<EntityId> > data, const string &name, string &buf) {
5023 0 : buf.append("<" + name + "> ");
5024 0 : buf.append("2 ");
5025 0 : buf.append(Integer::toString(data.size()));
5026 0 : buf.append(" ");
5027 0 : buf.append(Integer::toString(data[0].size()));
5028 0 : buf.append(" ");
5029 0 : for (unsigned int i = 0; i < data.size(); ++i) {
5030 0 : for (unsigned int j = 0; j < data[i].size(); ++j) {
5031 :
5032 0 : buf.append(data[i][j].toString());
5033 :
5034 0 : buf.append(" ");
5035 : }
5036 : }
5037 0 : buf.append(" </" + name + "> ");
5038 0 : }
5039 :
5040 0 : void Parser::toXML(vector< vector< vector<EntityId> > > data, const string &name, string &buf) {
5041 0 : buf.append("<" + name + "> ");
5042 0 : buf.append("3 ");
5043 0 : buf.append(Integer::toString(data.size()));
5044 0 : buf.append(" ");
5045 0 : buf.append(Integer::toString(data[0].size()));
5046 0 : buf.append(" ");
5047 0 : buf.append(Integer::toString(data[0][0].size()));
5048 0 : buf.append(" ");
5049 0 : for (unsigned int i = 0; i < data.size(); ++i) {
5050 0 : for (unsigned int j = 0; j < data[i].size(); ++j) {
5051 0 : for (unsigned int k = 0; k < data[i][j].size(); ++k) {
5052 :
5053 0 : buf.append(data[i][j][k].toString());
5054 :
5055 0 : buf.append(" ");
5056 : }
5057 : }
5058 : }
5059 0 : buf.append(" </" + name + "> ");
5060 0 : }
5061 :
5062 0 : void Parser::toXML(vector<vector< vector< vector<EntityId> > > >data, const string &name, string &buf) {
5063 0 : buf.append("<" + name + "> ");
5064 0 : buf.append("4 ");
5065 0 : buf.append(Integer::toString(data.size()));
5066 0 : buf.append(" ");
5067 0 : buf.append(Integer::toString(data[0].size()));
5068 0 : buf.append(" ");
5069 0 : buf.append(Integer::toString(data[0][0].size()));
5070 0 : buf.append(" ");
5071 0 : buf.append(Integer::toString(data[0][0][0].size()));
5072 0 : buf.append(" ");
5073 0 : for (unsigned int i = 0; i < data.size(); ++i) {
5074 0 : for (unsigned int j = 0; j < data[i].size(); ++j) {
5075 0 : for (unsigned int k = 0; k < data[i][j].size(); ++k) {
5076 0 : for (unsigned int l = 0; l < data[i][j][k].size(); l++) {
5077 :
5078 0 : buf.append(data[i][j][k][l].toString());
5079 :
5080 0 : buf.append(" ");
5081 : }
5082 : }
5083 : }
5084 : }
5085 0 : buf.append(" </" + name + "> ");
5086 0 : }
5087 :
5088 :
5089 :
5090 :
5091 :
5092 :
5093 0 : EntityId Parser::getEntityId(const string &name, const string &tableName, const string &xmlDoc)
5094 : {
5095 0 : string xmlField = Parser::getField(xmlDoc,name);
5096 0 : if (xmlField.length() == 0)
5097 0 : throw ConversionException("Error: Missing field \"" +
5098 0 : name + "\" or invalid syntax",tableName);
5099 :
5100 : try {
5101 0 : return EntityId (xmlField);
5102 : }
5103 0 : catch (const InvalidArgumentException &e) {
5104 0 : throw ConversionException("Error: message was '"+
5105 0 : e.getMessage()+
5106 : "'",
5107 0 : tableName);
5108 0 : }
5109 :
5110 0 : }
5111 :
5112 0 : vector<EntityId> Parser::get1DEntityId(const string &name, const string &tableName, const string &xmlDoc)
5113 : {
5114 0 : string xmlField = Parser::getField(xmlDoc,name);
5115 0 : if (xmlField.length() == 0) {
5116 0 : throw ConversionException("Error: Field \"" +
5117 0 : name + "\": Invalid XML syntax", tableName);
5118 : }
5119 0 : StringTokenizer t(xmlField," ");
5120 : try {
5121 0 : int ndim = Integer::parseInt(t.nextToken());
5122 0 : if (ndim != 1) {
5123 0 : throw ConversionException("Error: Field \"" +
5124 0 : name + "\": Invalid array format", tableName);
5125 : }
5126 0 : int dim0 = Integer::parseInt(t.nextToken());
5127 0 : vector<EntityId> value (dim0);
5128 0 : if (dim0 == 0)
5129 0 : return value;
5130 0 : for (int i = 0; i < dim0; ++i) {
5131 :
5132 0 : value[i] = EntityId::getEntityId(t);
5133 :
5134 : }
5135 0 : if (t.hasMoreTokens()) {
5136 0 : throw ConversionException("Error: Field \"" +
5137 0 : name + "\": Syntax error.", tableName);
5138 : }
5139 0 : return value;
5140 0 : } catch (const NumberFormatException &e) {
5141 0 : throw ConversionException("Error: Field \"" +
5142 0 : name + "\": " + e.getMessage(), tableName);
5143 0 : } catch (const OutOfBoundsException &e) {
5144 0 : throw ConversionException("Error: Field \"" +
5145 0 : name + "\": Unexpected end of string", tableName);
5146 0 : } catch (const TagFormatException &e) {
5147 0 : throw ConversionException("Error: Field \"" +
5148 0 : name + "\": " + e.getMessage(), tableName);
5149 0 : }
5150 0 : }
5151 :
5152 0 : vector< vector<EntityId> > Parser::get2DEntityId(const string &name, const string &tableName, const string &xmlDoc)
5153 : {
5154 0 : string xmlField = Parser::getField(xmlDoc,name);
5155 0 : if (xmlField.length() == 0) {
5156 0 : throw ConversionException("Error: Field \"" +
5157 0 : name + "\": Invalid XML syntax", tableName);
5158 : }
5159 0 : StringTokenizer t(xmlField," ");
5160 : try {
5161 0 : int ndim = Integer::parseInt(t.nextToken());
5162 0 : if (ndim != 2) {
5163 0 : throw ConversionException("Error: Field \"" +
5164 0 : name + "\": Invalid array format", tableName);
5165 : }
5166 0 : int dim0 = Integer::parseInt(t.nextToken());
5167 0 : int dim1 = Integer::parseInt(t.nextToken());
5168 0 : vector< vector<EntityId> > value;
5169 :
5170 0 : if (dim0 == 0 || dim1 == 0)
5171 0 : return value;
5172 :
5173 0 : vector<EntityId> v_aux;
5174 0 : for (int i = 0; i < dim0; ++i) {
5175 0 : v_aux.clear();
5176 0 : for (int j = 0; j < dim1; ++j) {
5177 :
5178 0 : v_aux.push_back(EntityId::getEntityId(t));
5179 :
5180 : }
5181 0 : value.push_back(v_aux);
5182 : }
5183 0 : if (t.hasMoreTokens()) {
5184 0 : throw ConversionException("Error: Field \"" +
5185 0 : name + "\": Syntax error.", tableName);
5186 : }
5187 0 : return value;
5188 0 : } catch (const NumberFormatException &e) {
5189 0 : throw ConversionException("Error: Field \"" +
5190 0 : name + "\": " + e.getMessage(), tableName);
5191 0 : } catch (const OutOfBoundsException &e) {
5192 0 : throw ConversionException("Error: Field \"" +
5193 0 : name + "\": Unexpected end of string", tableName);
5194 0 : } catch (const TagFormatException &e) {
5195 0 : throw ConversionException("Error: Field \"" +
5196 0 : name + "\": " + e.getMessage(), tableName);
5197 0 : }
5198 0 : }
5199 :
5200 0 : vector< vector< vector<EntityId> > > Parser::get3DEntityId(const string &name, const string &tableName, const string &xmlDoc)
5201 : {
5202 0 : string xmlField = Parser::getField(xmlDoc,name);
5203 0 : if (xmlField.length() == 0) {
5204 0 : throw ConversionException("Error: Field \"" +
5205 0 : name + "\": Invalid XML syntax", tableName);
5206 : }
5207 0 : StringTokenizer t(xmlField," ");
5208 : try {
5209 0 : int ndim = Integer::parseInt(t.nextToken());
5210 0 : if (ndim != 3) {
5211 0 : throw ConversionException("Error: Field \"" +
5212 0 : name + "\": Invalid array format", tableName);
5213 : }
5214 0 : int dim0 = Integer::parseInt(t.nextToken());
5215 0 : int dim1 = Integer::parseInt(t.nextToken());
5216 0 : int dim2 = Integer::parseInt(t.nextToken());
5217 0 : vector< vector< vector<EntityId> > > value ;
5218 0 : if (dim0 == 0 || dim1 == 0 || dim2 == 0)
5219 0 : return value;
5220 :
5221 0 : vector<vector<EntityId> > vv_aux;
5222 0 : vector<EntityId> v_aux;
5223 0 : for (int i = 0; i < dim0; ++i) {
5224 0 : vv_aux.clear();
5225 0 : for (int j = 0; j < dim1; ++j) {
5226 0 : v_aux.clear();
5227 0 : for (int k = 0; k < dim2; ++k) {
5228 :
5229 0 : v_aux.push_back(EntityId::getEntityId(t));
5230 :
5231 : }
5232 0 : vv_aux.push_back(v_aux);
5233 : }
5234 0 : value.push_back(vv_aux);
5235 : }
5236 0 : if (t.hasMoreTokens()) {
5237 0 : throw ConversionException("Error: Field \"" +
5238 0 : name + "\": Syntax error.", tableName);
5239 : }
5240 0 : return value;
5241 0 : } catch (const NumberFormatException &e) {
5242 0 : throw ConversionException("Error: Field \"" +
5243 0 : name + "\": " + e.getMessage(), tableName);
5244 0 : } catch (const OutOfBoundsException &e) {
5245 0 : throw ConversionException("Error: Field \"" +
5246 0 : name + "\": Unexpected end of string", tableName);
5247 0 : } catch (const TagFormatException &e) {
5248 0 : throw ConversionException("Error: Field \"" +
5249 0 : name + "\": " + e.getMessage(), tableName);
5250 0 : }
5251 0 : }
5252 :
5253 0 : vector< vector< vector< vector<EntityId> > > >Parser::get4DEntityId(const string &name, const string &tableName, const string &xmlDoc)
5254 : {
5255 0 : string xmlField = Parser::getField(xmlDoc,name);
5256 0 : if (xmlField.length() == 0) {
5257 0 : throw ConversionException("Error: Field \"" +
5258 0 : name + "\": Invalid XML syntax", tableName);
5259 : }
5260 0 : StringTokenizer t(xmlField," ");
5261 : try {
5262 0 : int ndim = Integer::parseInt(t.nextToken());
5263 0 : if (ndim != 4) {
5264 0 : throw ConversionException("Error: Field \"" +
5265 0 : name + "\": Invalid array format", tableName);
5266 : }
5267 0 : int dim0 = Integer::parseInt(t.nextToken());
5268 0 : int dim1 = Integer::parseInt(t.nextToken());
5269 0 : int dim2 = Integer::parseInt(t.nextToken());
5270 0 : int dim3 = Integer::parseInt(t.nextToken());
5271 0 : vector<vector< vector< vector<EntityId> > > >value;
5272 0 : if (dim0 == 0 || dim1 == 0 || dim2 == 0 || dim3 == 0)
5273 0 : return value;
5274 :
5275 0 : vector<vector<vector<EntityId> > >vvv_aux;
5276 0 : vector<vector< EntityId> > vv_aux;
5277 0 : vector<EntityId> v_aux;
5278 0 : for (int i = 0; i < dim0; ++i) {
5279 0 : vvv_aux.clear();
5280 0 : for (int j = 0; j < dim1; ++j) {
5281 0 : vv_aux.clear();
5282 0 : for (int k = 0; k < dim2; ++k) {
5283 0 : v_aux.clear();
5284 0 : for (int l = 0; l < dim3; l++) {
5285 :
5286 0 : v_aux.push_back(EntityId::getEntityId(t));
5287 :
5288 : }
5289 0 : vv_aux.push_back(v_aux);
5290 : }
5291 0 : vvv_aux.push_back(vv_aux);
5292 : }
5293 0 : value.push_back(vvv_aux);
5294 : }
5295 0 : if (t.hasMoreTokens()) {
5296 0 : throw ConversionException("Error: Field \"" +
5297 0 : name + "\": Syntax error.", tableName);
5298 : }
5299 0 : return value;
5300 0 : } catch (const NumberFormatException &e) {
5301 0 : throw ConversionException("Error: Field \"" +
5302 0 : name + "\": " + e.getMessage(), tableName);
5303 0 : } catch (const OutOfBoundsException &e) {
5304 0 : throw ConversionException("Error: Field \"" +
5305 0 : name + "\": Unexpected end of string", tableName);
5306 0 : } catch (const TagFormatException &e) {
5307 0 : throw ConversionException("Error: Field \"" +
5308 0 : name + "\": " + e.getMessage(), tableName);
5309 0 : }
5310 0 : }
5311 :
5312 :
5313 :
5314 :
5315 :
5316 : // Field type: EntityRef
5317 :
5318 0 : void Parser::toXML(EntityRef data, const string &name, string &buf) {
5319 0 : buf.append("<" + name + "> ");
5320 :
5321 0 : buf.append(data.toString());
5322 :
5323 0 : buf.append(" </" + name + "> ");
5324 0 : }
5325 :
5326 :
5327 :
5328 :
5329 0 : void Parser::toXML(vector<EntityRef> data, const string &name, string &buf) {
5330 0 : buf.append("<" + name + "> ");
5331 0 : buf.append("1 ");
5332 0 : buf.append(Integer::toString(data.size()));
5333 0 : buf.append(" ");
5334 0 : for (unsigned int i = 0; i < data.size(); ++i) {
5335 :
5336 0 : buf.append(data[i].toString());
5337 :
5338 0 : buf.append(" ");
5339 : }
5340 0 : buf.append(" </" + name + "> ");
5341 0 : }
5342 :
5343 0 : void Parser::toXML(vector< vector<EntityRef> > data, const string &name, string &buf) {
5344 0 : buf.append("<" + name + "> ");
5345 0 : buf.append("2 ");
5346 0 : buf.append(Integer::toString(data.size()));
5347 0 : buf.append(" ");
5348 0 : buf.append(Integer::toString(data[0].size()));
5349 0 : buf.append(" ");
5350 0 : for (unsigned int i = 0; i < data.size(); ++i) {
5351 0 : for (unsigned int j = 0; j < data[i].size(); ++j) {
5352 :
5353 0 : buf.append(data[i][j].toString());
5354 :
5355 0 : buf.append(" ");
5356 : }
5357 : }
5358 0 : buf.append(" </" + name + "> ");
5359 0 : }
5360 :
5361 0 : void Parser::toXML(vector< vector< vector<EntityRef> > > data, const string &name, string &buf) {
5362 0 : buf.append("<" + name + "> ");
5363 0 : buf.append("3 ");
5364 0 : buf.append(Integer::toString(data.size()));
5365 0 : buf.append(" ");
5366 0 : buf.append(Integer::toString(data[0].size()));
5367 0 : buf.append(" ");
5368 0 : buf.append(Integer::toString(data[0][0].size()));
5369 0 : buf.append(" ");
5370 0 : for (unsigned int i = 0; i < data.size(); ++i) {
5371 0 : for (unsigned int j = 0; j < data[i].size(); ++j) {
5372 0 : for (unsigned int k = 0; k < data[i][j].size(); ++k) {
5373 :
5374 0 : buf.append(data[i][j][k].toString());
5375 :
5376 0 : buf.append(" ");
5377 : }
5378 : }
5379 : }
5380 0 : buf.append(" </" + name + "> ");
5381 0 : }
5382 :
5383 0 : void Parser::toXML(vector<vector< vector< vector<EntityRef> > > >data, const string &name, string &buf) {
5384 0 : buf.append("<" + name + "> ");
5385 0 : buf.append("4 ");
5386 0 : buf.append(Integer::toString(data.size()));
5387 0 : buf.append(" ");
5388 0 : buf.append(Integer::toString(data[0].size()));
5389 0 : buf.append(" ");
5390 0 : buf.append(Integer::toString(data[0][0].size()));
5391 0 : buf.append(" ");
5392 0 : buf.append(Integer::toString(data[0][0][0].size()));
5393 0 : buf.append(" ");
5394 0 : for (unsigned int i = 0; i < data.size(); ++i) {
5395 0 : for (unsigned int j = 0; j < data[i].size(); ++j) {
5396 0 : for (unsigned int k = 0; k < data[i][j].size(); ++k) {
5397 0 : for (unsigned int l = 0; l < data[i][j][k].size(); l++) {
5398 :
5399 0 : buf.append(data[i][j][k][l].toString());
5400 :
5401 0 : buf.append(" ");
5402 : }
5403 : }
5404 : }
5405 : }
5406 0 : buf.append(" </" + name + "> ");
5407 0 : }
5408 :
5409 :
5410 :
5411 :
5412 :
5413 :
5414 0 : EntityRef Parser::getEntityRef(const string &name, const string &tableName, const string &xmlDoc)
5415 : {
5416 0 : string xmlField = Parser::getField(xmlDoc,name);
5417 0 : if (xmlField.length() == 0)
5418 0 : throw ConversionException("Error: Missing field \"" +
5419 0 : name + "\" or invalid syntax",tableName);
5420 :
5421 : try {
5422 0 : return EntityRef (xmlField);
5423 : }
5424 0 : catch (const InvalidArgumentException &e) {
5425 0 : throw ConversionException("Error: message was '"+
5426 0 : e.getMessage()+
5427 : "'",
5428 0 : tableName);
5429 0 : }
5430 :
5431 0 : }
5432 :
5433 0 : vector<EntityRef> Parser::get1DEntityRef(const string &name, const string &tableName, const string &xmlDoc)
5434 : {
5435 0 : string xmlField = Parser::getField(xmlDoc,name);
5436 0 : if (xmlField.length() == 0) {
5437 0 : throw ConversionException("Error: Field \"" +
5438 0 : name + "\": Invalid XML syntax", tableName);
5439 : }
5440 0 : StringTokenizer t(xmlField," ");
5441 : try {
5442 0 : int ndim = Integer::parseInt(t.nextToken());
5443 0 : if (ndim != 1) {
5444 0 : throw ConversionException("Error: Field \"" +
5445 0 : name + "\": Invalid array format", tableName);
5446 : }
5447 0 : int dim0 = Integer::parseInt(t.nextToken());
5448 0 : vector<EntityRef> value (dim0);
5449 0 : if (dim0 == 0)
5450 0 : return value;
5451 0 : for (int i = 0; i < dim0; ++i) {
5452 :
5453 0 : value[i] = EntityRef::getEntityRef(t);
5454 :
5455 : }
5456 0 : if (t.hasMoreTokens()) {
5457 0 : throw ConversionException("Error: Field \"" +
5458 0 : name + "\": Syntax error.", tableName);
5459 : }
5460 0 : return value;
5461 0 : } catch (const NumberFormatException &e) {
5462 0 : throw ConversionException("Error: Field \"" +
5463 0 : name + "\": " + e.getMessage(), tableName);
5464 0 : } catch (const OutOfBoundsException &e) {
5465 0 : throw ConversionException("Error: Field \"" +
5466 0 : name + "\": Unexpected end of string", tableName);
5467 0 : } catch (const TagFormatException &e) {
5468 0 : throw ConversionException("Error: Field \"" +
5469 0 : name + "\": " + e.getMessage(), tableName);
5470 0 : }
5471 0 : }
5472 :
5473 0 : vector< vector<EntityRef> > Parser::get2DEntityRef(const string &name, const string &tableName, const string &xmlDoc)
5474 : {
5475 0 : string xmlField = Parser::getField(xmlDoc,name);
5476 0 : if (xmlField.length() == 0) {
5477 0 : throw ConversionException("Error: Field \"" +
5478 0 : name + "\": Invalid XML syntax", tableName);
5479 : }
5480 0 : StringTokenizer t(xmlField," ");
5481 : try {
5482 0 : int ndim = Integer::parseInt(t.nextToken());
5483 0 : if (ndim != 2) {
5484 0 : throw ConversionException("Error: Field \"" +
5485 0 : name + "\": Invalid array format", tableName);
5486 : }
5487 0 : int dim0 = Integer::parseInt(t.nextToken());
5488 0 : int dim1 = Integer::parseInt(t.nextToken());
5489 0 : vector< vector<EntityRef> > value;
5490 :
5491 0 : if (dim0 == 0 || dim1 == 0)
5492 0 : return value;
5493 :
5494 0 : vector<EntityRef> v_aux;
5495 0 : for (int i = 0; i < dim0; ++i) {
5496 0 : v_aux.clear();
5497 0 : for (int j = 0; j < dim1; ++j) {
5498 :
5499 0 : v_aux.push_back(EntityRef::getEntityRef(t));
5500 :
5501 : }
5502 0 : value.push_back(v_aux);
5503 : }
5504 0 : if (t.hasMoreTokens()) {
5505 0 : throw ConversionException("Error: Field \"" +
5506 0 : name + "\": Syntax error.", tableName);
5507 : }
5508 0 : return value;
5509 0 : } catch (const NumberFormatException &e) {
5510 0 : throw ConversionException("Error: Field \"" +
5511 0 : name + "\": " + e.getMessage(), tableName);
5512 0 : } catch (const OutOfBoundsException &e) {
5513 0 : throw ConversionException("Error: Field \"" +
5514 0 : name + "\": Unexpected end of string", tableName);
5515 0 : } catch (const TagFormatException &e) {
5516 0 : throw ConversionException("Error: Field \"" +
5517 0 : name + "\": " + e.getMessage(), tableName);
5518 0 : }
5519 0 : }
5520 :
5521 0 : vector< vector< vector<EntityRef> > > Parser::get3DEntityRef(const string &name, const string &tableName, const string &xmlDoc)
5522 : {
5523 0 : string xmlField = Parser::getField(xmlDoc,name);
5524 0 : if (xmlField.length() == 0) {
5525 0 : throw ConversionException("Error: Field \"" +
5526 0 : name + "\": Invalid XML syntax", tableName);
5527 : }
5528 0 : StringTokenizer t(xmlField," ");
5529 : try {
5530 0 : int ndim = Integer::parseInt(t.nextToken());
5531 0 : if (ndim != 3) {
5532 0 : throw ConversionException("Error: Field \"" +
5533 0 : name + "\": Invalid array format", tableName);
5534 : }
5535 0 : int dim0 = Integer::parseInt(t.nextToken());
5536 0 : int dim1 = Integer::parseInt(t.nextToken());
5537 0 : int dim2 = Integer::parseInt(t.nextToken());
5538 0 : vector< vector< vector<EntityRef> > > value ;
5539 0 : if (dim0 == 0 || dim1 == 0 || dim2 == 0)
5540 0 : return value;
5541 :
5542 0 : vector<vector<EntityRef> > vv_aux;
5543 0 : vector<EntityRef> v_aux;
5544 0 : for (int i = 0; i < dim0; ++i) {
5545 0 : vv_aux.clear();
5546 0 : for (int j = 0; j < dim1; ++j) {
5547 0 : v_aux.clear();
5548 0 : for (int k = 0; k < dim2; ++k) {
5549 :
5550 0 : v_aux.push_back(EntityRef::getEntityRef(t));
5551 :
5552 : }
5553 0 : vv_aux.push_back(v_aux);
5554 : }
5555 0 : value.push_back(vv_aux);
5556 : }
5557 0 : if (t.hasMoreTokens()) {
5558 0 : throw ConversionException("Error: Field \"" +
5559 0 : name + "\": Syntax error.", tableName);
5560 : }
5561 0 : return value;
5562 0 : } catch (const NumberFormatException &e) {
5563 0 : throw ConversionException("Error: Field \"" +
5564 0 : name + "\": " + e.getMessage(), tableName);
5565 0 : } catch (const OutOfBoundsException &e) {
5566 0 : throw ConversionException("Error: Field \"" +
5567 0 : name + "\": Unexpected end of string", tableName);
5568 0 : } catch (const TagFormatException &e) {
5569 0 : throw ConversionException("Error: Field \"" +
5570 0 : name + "\": " + e.getMessage(), tableName);
5571 0 : }
5572 0 : }
5573 :
5574 0 : vector< vector< vector< vector<EntityRef> > > >Parser::get4DEntityRef(const string &name, const string &tableName, const string &xmlDoc)
5575 : {
5576 0 : string xmlField = Parser::getField(xmlDoc,name);
5577 0 : if (xmlField.length() == 0) {
5578 0 : throw ConversionException("Error: Field \"" +
5579 0 : name + "\": Invalid XML syntax", tableName);
5580 : }
5581 0 : StringTokenizer t(xmlField," ");
5582 : try {
5583 0 : int ndim = Integer::parseInt(t.nextToken());
5584 0 : if (ndim != 4) {
5585 0 : throw ConversionException("Error: Field \"" +
5586 0 : name + "\": Invalid array format", tableName);
5587 : }
5588 0 : int dim0 = Integer::parseInt(t.nextToken());
5589 0 : int dim1 = Integer::parseInt(t.nextToken());
5590 0 : int dim2 = Integer::parseInt(t.nextToken());
5591 0 : int dim3 = Integer::parseInt(t.nextToken());
5592 0 : vector<vector< vector< vector<EntityRef> > > >value;
5593 0 : if (dim0 == 0 || dim1 == 0 || dim2 == 0 || dim3 == 0)
5594 0 : return value;
5595 :
5596 0 : vector<vector<vector<EntityRef> > >vvv_aux;
5597 0 : vector<vector< EntityRef> > vv_aux;
5598 0 : vector<EntityRef> v_aux;
5599 0 : for (int i = 0; i < dim0; ++i) {
5600 0 : vvv_aux.clear();
5601 0 : for (int j = 0; j < dim1; ++j) {
5602 0 : vv_aux.clear();
5603 0 : for (int k = 0; k < dim2; ++k) {
5604 0 : v_aux.clear();
5605 0 : for (int l = 0; l < dim3; l++) {
5606 :
5607 0 : v_aux.push_back(EntityRef::getEntityRef(t));
5608 :
5609 : }
5610 0 : vv_aux.push_back(v_aux);
5611 : }
5612 0 : vvv_aux.push_back(vv_aux);
5613 : }
5614 0 : value.push_back(vvv_aux);
5615 : }
5616 0 : if (t.hasMoreTokens()) {
5617 0 : throw ConversionException("Error: Field \"" +
5618 0 : name + "\": Syntax error.", tableName);
5619 : }
5620 0 : return value;
5621 0 : } catch (const NumberFormatException &e) {
5622 0 : throw ConversionException("Error: Field \"" +
5623 0 : name + "\": " + e.getMessage(), tableName);
5624 0 : } catch (const OutOfBoundsException &e) {
5625 0 : throw ConversionException("Error: Field \"" +
5626 0 : name + "\": Unexpected end of string", tableName);
5627 0 : } catch (const TagFormatException &e) {
5628 0 : throw ConversionException("Error: Field \"" +
5629 0 : name + "\": " + e.getMessage(), tableName);
5630 0 : }
5631 0 : }
5632 :
5633 :
5634 :
5635 :
5636 :
5637 : // Field type: Flux
5638 :
5639 0 : void Parser::toXML(Flux data, const string &name, string &buf) {
5640 0 : buf.append("<" + name + "> ");
5641 :
5642 0 : buf.append(data.toString());
5643 :
5644 0 : buf.append(" </" + name + "> ");
5645 0 : }
5646 :
5647 :
5648 :
5649 :
5650 0 : void Parser::toXML(vector<Flux> data, const string &name, string &buf) {
5651 0 : buf.append("<" + name + "> ");
5652 0 : buf.append("1 ");
5653 0 : buf.append(Integer::toString(data.size()));
5654 0 : buf.append(" ");
5655 0 : for (unsigned int i = 0; i < data.size(); ++i) {
5656 :
5657 0 : buf.append(data[i].toString());
5658 :
5659 0 : buf.append(" ");
5660 : }
5661 0 : buf.append(" </" + name + "> ");
5662 0 : }
5663 :
5664 0 : void Parser::toXML(vector< vector<Flux> > data, const string &name, string &buf) {
5665 0 : buf.append("<" + name + "> ");
5666 0 : buf.append("2 ");
5667 0 : buf.append(Integer::toString(data.size()));
5668 0 : buf.append(" ");
5669 0 : buf.append(Integer::toString(data[0].size()));
5670 0 : buf.append(" ");
5671 0 : for (unsigned int i = 0; i < data.size(); ++i) {
5672 0 : for (unsigned int j = 0; j < data[i].size(); ++j) {
5673 :
5674 0 : buf.append(data[i][j].toString());
5675 :
5676 0 : buf.append(" ");
5677 : }
5678 : }
5679 0 : buf.append(" </" + name + "> ");
5680 0 : }
5681 :
5682 0 : void Parser::toXML(vector< vector< vector<Flux> > > data, const string &name, string &buf) {
5683 0 : buf.append("<" + name + "> ");
5684 0 : buf.append("3 ");
5685 0 : buf.append(Integer::toString(data.size()));
5686 0 : buf.append(" ");
5687 0 : buf.append(Integer::toString(data[0].size()));
5688 0 : buf.append(" ");
5689 0 : buf.append(Integer::toString(data[0][0].size()));
5690 0 : buf.append(" ");
5691 0 : for (unsigned int i = 0; i < data.size(); ++i) {
5692 0 : for (unsigned int j = 0; j < data[i].size(); ++j) {
5693 0 : for (unsigned int k = 0; k < data[i][j].size(); ++k) {
5694 :
5695 0 : buf.append(data[i][j][k].toString());
5696 :
5697 0 : buf.append(" ");
5698 : }
5699 : }
5700 : }
5701 0 : buf.append(" </" + name + "> ");
5702 0 : }
5703 :
5704 0 : void Parser::toXML(vector<vector< vector< vector<Flux> > > >data, const string &name, string &buf) {
5705 0 : buf.append("<" + name + "> ");
5706 0 : buf.append("4 ");
5707 0 : buf.append(Integer::toString(data.size()));
5708 0 : buf.append(" ");
5709 0 : buf.append(Integer::toString(data[0].size()));
5710 0 : buf.append(" ");
5711 0 : buf.append(Integer::toString(data[0][0].size()));
5712 0 : buf.append(" ");
5713 0 : buf.append(Integer::toString(data[0][0][0].size()));
5714 0 : buf.append(" ");
5715 0 : for (unsigned int i = 0; i < data.size(); ++i) {
5716 0 : for (unsigned int j = 0; j < data[i].size(); ++j) {
5717 0 : for (unsigned int k = 0; k < data[i][j].size(); ++k) {
5718 0 : for (unsigned int l = 0; l < data[i][j][k].size(); l++) {
5719 :
5720 0 : buf.append(data[i][j][k][l].toString());
5721 :
5722 0 : buf.append(" ");
5723 : }
5724 : }
5725 : }
5726 : }
5727 0 : buf.append(" </" + name + "> ");
5728 0 : }
5729 :
5730 :
5731 :
5732 :
5733 :
5734 :
5735 0 : Flux Parser::getFlux(const string &name, const string &tableName, const string &xmlDoc)
5736 : {
5737 0 : string xmlField = Parser::getField(xmlDoc,name);
5738 0 : if (xmlField.length() == 0)
5739 0 : throw ConversionException("Error: Missing field \"" +
5740 0 : name + "\" or invalid syntax",tableName);
5741 :
5742 : try {
5743 0 : return Flux (xmlField);
5744 : }
5745 0 : catch (const InvalidArgumentException &e) {
5746 0 : throw ConversionException("Error: message was '"+
5747 0 : e.getMessage()+
5748 : "'",
5749 0 : tableName);
5750 0 : }
5751 :
5752 0 : }
5753 :
5754 0 : vector<Flux> Parser::get1DFlux(const string &name, const string &tableName, const string &xmlDoc)
5755 : {
5756 0 : string xmlField = Parser::getField(xmlDoc,name);
5757 0 : if (xmlField.length() == 0) {
5758 0 : throw ConversionException("Error: Field \"" +
5759 0 : name + "\": Invalid XML syntax", tableName);
5760 : }
5761 0 : StringTokenizer t(xmlField," ");
5762 : try {
5763 0 : int ndim = Integer::parseInt(t.nextToken());
5764 0 : if (ndim != 1) {
5765 0 : throw ConversionException("Error: Field \"" +
5766 0 : name + "\": Invalid array format", tableName);
5767 : }
5768 0 : int dim0 = Integer::parseInt(t.nextToken());
5769 0 : vector<Flux> value (dim0);
5770 0 : if (dim0 == 0)
5771 0 : return value;
5772 0 : for (int i = 0; i < dim0; ++i) {
5773 :
5774 0 : value[i] = Flux::getFlux(t);
5775 :
5776 : }
5777 0 : if (t.hasMoreTokens()) {
5778 0 : throw ConversionException("Error: Field \"" +
5779 0 : name + "\": Syntax error.", tableName);
5780 : }
5781 0 : return value;
5782 0 : } catch (const NumberFormatException &e) {
5783 0 : throw ConversionException("Error: Field \"" +
5784 0 : name + "\": " + e.getMessage(), tableName);
5785 0 : } catch (const OutOfBoundsException &e) {
5786 0 : throw ConversionException("Error: Field \"" +
5787 0 : name + "\": Unexpected end of string", tableName);
5788 0 : } catch (const TagFormatException &e) {
5789 0 : throw ConversionException("Error: Field \"" +
5790 0 : name + "\": " + e.getMessage(), tableName);
5791 0 : }
5792 0 : }
5793 :
5794 0 : vector< vector<Flux> > Parser::get2DFlux(const string &name, const string &tableName, const string &xmlDoc)
5795 : {
5796 0 : string xmlField = Parser::getField(xmlDoc,name);
5797 0 : if (xmlField.length() == 0) {
5798 0 : throw ConversionException("Error: Field \"" +
5799 0 : name + "\": Invalid XML syntax", tableName);
5800 : }
5801 0 : StringTokenizer t(xmlField," ");
5802 : try {
5803 0 : int ndim = Integer::parseInt(t.nextToken());
5804 0 : if (ndim != 2) {
5805 0 : throw ConversionException("Error: Field \"" +
5806 0 : name + "\": Invalid array format", tableName);
5807 : }
5808 0 : int dim0 = Integer::parseInt(t.nextToken());
5809 0 : int dim1 = Integer::parseInt(t.nextToken());
5810 0 : vector< vector<Flux> > value;
5811 :
5812 0 : if (dim0 == 0 || dim1 == 0)
5813 0 : return value;
5814 :
5815 0 : vector<Flux> v_aux;
5816 0 : for (int i = 0; i < dim0; ++i) {
5817 0 : v_aux.clear();
5818 0 : for (int j = 0; j < dim1; ++j) {
5819 :
5820 0 : v_aux.push_back(Flux::getFlux(t));
5821 :
5822 : }
5823 0 : value.push_back(v_aux);
5824 : }
5825 0 : if (t.hasMoreTokens()) {
5826 0 : throw ConversionException("Error: Field \"" +
5827 0 : name + "\": Syntax error.", tableName);
5828 : }
5829 0 : return value;
5830 0 : } catch (const NumberFormatException &e) {
5831 0 : throw ConversionException("Error: Field \"" +
5832 0 : name + "\": " + e.getMessage(), tableName);
5833 0 : } catch (const OutOfBoundsException &e) {
5834 0 : throw ConversionException("Error: Field \"" +
5835 0 : name + "\": Unexpected end of string", tableName);
5836 0 : } catch (const TagFormatException &e) {
5837 0 : throw ConversionException("Error: Field \"" +
5838 0 : name + "\": " + e.getMessage(), tableName);
5839 0 : }
5840 0 : }
5841 :
5842 0 : vector< vector< vector<Flux> > > Parser::get3DFlux(const string &name, const string &tableName, const string &xmlDoc)
5843 : {
5844 0 : string xmlField = Parser::getField(xmlDoc,name);
5845 0 : if (xmlField.length() == 0) {
5846 0 : throw ConversionException("Error: Field \"" +
5847 0 : name + "\": Invalid XML syntax", tableName);
5848 : }
5849 0 : StringTokenizer t(xmlField," ");
5850 : try {
5851 0 : int ndim = Integer::parseInt(t.nextToken());
5852 0 : if (ndim != 3) {
5853 0 : throw ConversionException("Error: Field \"" +
5854 0 : name + "\": Invalid array format", tableName);
5855 : }
5856 0 : int dim0 = Integer::parseInt(t.nextToken());
5857 0 : int dim1 = Integer::parseInt(t.nextToken());
5858 0 : int dim2 = Integer::parseInt(t.nextToken());
5859 0 : vector< vector< vector<Flux> > > value ;
5860 0 : if (dim0 == 0 || dim1 == 0 || dim2 == 0)
5861 0 : return value;
5862 :
5863 0 : vector<vector<Flux> > vv_aux;
5864 0 : vector<Flux> v_aux;
5865 0 : for (int i = 0; i < dim0; ++i) {
5866 0 : vv_aux.clear();
5867 0 : for (int j = 0; j < dim1; ++j) {
5868 0 : v_aux.clear();
5869 0 : for (int k = 0; k < dim2; ++k) {
5870 :
5871 0 : v_aux.push_back(Flux::getFlux(t));
5872 :
5873 : }
5874 0 : vv_aux.push_back(v_aux);
5875 : }
5876 0 : value.push_back(vv_aux);
5877 : }
5878 0 : if (t.hasMoreTokens()) {
5879 0 : throw ConversionException("Error: Field \"" +
5880 0 : name + "\": Syntax error.", tableName);
5881 : }
5882 0 : return value;
5883 0 : } catch (const NumberFormatException &e) {
5884 0 : throw ConversionException("Error: Field \"" +
5885 0 : name + "\": " + e.getMessage(), tableName);
5886 0 : } catch (const OutOfBoundsException &e) {
5887 0 : throw ConversionException("Error: Field \"" +
5888 0 : name + "\": Unexpected end of string", tableName);
5889 0 : } catch (const TagFormatException &e) {
5890 0 : throw ConversionException("Error: Field \"" +
5891 0 : name + "\": " + e.getMessage(), tableName);
5892 0 : }
5893 0 : }
5894 :
5895 0 : vector< vector< vector< vector<Flux> > > >Parser::get4DFlux(const string &name, const string &tableName, const string &xmlDoc)
5896 : {
5897 0 : string xmlField = Parser::getField(xmlDoc,name);
5898 0 : if (xmlField.length() == 0) {
5899 0 : throw ConversionException("Error: Field \"" +
5900 0 : name + "\": Invalid XML syntax", tableName);
5901 : }
5902 0 : StringTokenizer t(xmlField," ");
5903 : try {
5904 0 : int ndim = Integer::parseInt(t.nextToken());
5905 0 : if (ndim != 4) {
5906 0 : throw ConversionException("Error: Field \"" +
5907 0 : name + "\": Invalid array format", tableName);
5908 : }
5909 0 : int dim0 = Integer::parseInt(t.nextToken());
5910 0 : int dim1 = Integer::parseInt(t.nextToken());
5911 0 : int dim2 = Integer::parseInt(t.nextToken());
5912 0 : int dim3 = Integer::parseInt(t.nextToken());
5913 0 : vector<vector< vector< vector<Flux> > > >value;
5914 0 : if (dim0 == 0 || dim1 == 0 || dim2 == 0 || dim3 == 0)
5915 0 : return value;
5916 :
5917 0 : vector<vector<vector<Flux> > >vvv_aux;
5918 0 : vector<vector< Flux> > vv_aux;
5919 0 : vector<Flux> v_aux;
5920 0 : for (int i = 0; i < dim0; ++i) {
5921 0 : vvv_aux.clear();
5922 0 : for (int j = 0; j < dim1; ++j) {
5923 0 : vv_aux.clear();
5924 0 : for (int k = 0; k < dim2; ++k) {
5925 0 : v_aux.clear();
5926 0 : for (int l = 0; l < dim3; l++) {
5927 :
5928 0 : v_aux.push_back(Flux::getFlux(t));
5929 :
5930 : }
5931 0 : vv_aux.push_back(v_aux);
5932 : }
5933 0 : vvv_aux.push_back(vv_aux);
5934 : }
5935 0 : value.push_back(vvv_aux);
5936 : }
5937 0 : if (t.hasMoreTokens()) {
5938 0 : throw ConversionException("Error: Field \"" +
5939 0 : name + "\": Syntax error.", tableName);
5940 : }
5941 0 : return value;
5942 0 : } catch (const NumberFormatException &e) {
5943 0 : throw ConversionException("Error: Field \"" +
5944 0 : name + "\": " + e.getMessage(), tableName);
5945 0 : } catch (const OutOfBoundsException &e) {
5946 0 : throw ConversionException("Error: Field \"" +
5947 0 : name + "\": Unexpected end of string", tableName);
5948 0 : } catch (const TagFormatException &e) {
5949 0 : throw ConversionException("Error: Field \"" +
5950 0 : name + "\": " + e.getMessage(), tableName);
5951 0 : }
5952 0 : }
5953 :
5954 :
5955 :
5956 :
5957 :
5958 : // Field type: Frequency
5959 :
5960 0 : void Parser::toXML(Frequency data, const string &name, string &buf) {
5961 0 : buf.append("<" + name + "> ");
5962 :
5963 0 : buf.append(data.toString());
5964 :
5965 0 : buf.append(" </" + name + "> ");
5966 0 : }
5967 :
5968 :
5969 :
5970 :
5971 0 : void Parser::toXML(vector<Frequency> data, const string &name, string &buf) {
5972 0 : buf.append("<" + name + "> ");
5973 0 : buf.append("1 ");
5974 0 : buf.append(Integer::toString(data.size()));
5975 0 : buf.append(" ");
5976 0 : for (unsigned int i = 0; i < data.size(); ++i) {
5977 :
5978 0 : buf.append(data[i].toString());
5979 :
5980 0 : buf.append(" ");
5981 : }
5982 0 : buf.append(" </" + name + "> ");
5983 0 : }
5984 :
5985 0 : void Parser::toXML(vector< vector<Frequency> > data, const string &name, string &buf) {
5986 0 : buf.append("<" + name + "> ");
5987 0 : buf.append("2 ");
5988 0 : buf.append(Integer::toString(data.size()));
5989 0 : buf.append(" ");
5990 0 : buf.append(Integer::toString(data[0].size()));
5991 0 : buf.append(" ");
5992 0 : for (unsigned int i = 0; i < data.size(); ++i) {
5993 0 : for (unsigned int j = 0; j < data[i].size(); ++j) {
5994 :
5995 0 : buf.append(data[i][j].toString());
5996 :
5997 0 : buf.append(" ");
5998 : }
5999 : }
6000 0 : buf.append(" </" + name + "> ");
6001 0 : }
6002 :
6003 0 : void Parser::toXML(vector< vector< vector<Frequency> > > data, const string &name, string &buf) {
6004 0 : buf.append("<" + name + "> ");
6005 0 : buf.append("3 ");
6006 0 : buf.append(Integer::toString(data.size()));
6007 0 : buf.append(" ");
6008 0 : buf.append(Integer::toString(data[0].size()));
6009 0 : buf.append(" ");
6010 0 : buf.append(Integer::toString(data[0][0].size()));
6011 0 : buf.append(" ");
6012 0 : for (unsigned int i = 0; i < data.size(); ++i) {
6013 0 : for (unsigned int j = 0; j < data[i].size(); ++j) {
6014 0 : for (unsigned int k = 0; k < data[i][j].size(); ++k) {
6015 :
6016 0 : buf.append(data[i][j][k].toString());
6017 :
6018 0 : buf.append(" ");
6019 : }
6020 : }
6021 : }
6022 0 : buf.append(" </" + name + "> ");
6023 0 : }
6024 :
6025 0 : void Parser::toXML(vector<vector< vector< vector<Frequency> > > >data, const string &name, string &buf) {
6026 0 : buf.append("<" + name + "> ");
6027 0 : buf.append("4 ");
6028 0 : buf.append(Integer::toString(data.size()));
6029 0 : buf.append(" ");
6030 0 : buf.append(Integer::toString(data[0].size()));
6031 0 : buf.append(" ");
6032 0 : buf.append(Integer::toString(data[0][0].size()));
6033 0 : buf.append(" ");
6034 0 : buf.append(Integer::toString(data[0][0][0].size()));
6035 0 : buf.append(" ");
6036 0 : for (unsigned int i = 0; i < data.size(); ++i) {
6037 0 : for (unsigned int j = 0; j < data[i].size(); ++j) {
6038 0 : for (unsigned int k = 0; k < data[i][j].size(); ++k) {
6039 0 : for (unsigned int l = 0; l < data[i][j][k].size(); l++) {
6040 :
6041 0 : buf.append(data[i][j][k][l].toString());
6042 :
6043 0 : buf.append(" ");
6044 : }
6045 : }
6046 : }
6047 : }
6048 0 : buf.append(" </" + name + "> ");
6049 0 : }
6050 :
6051 :
6052 :
6053 :
6054 :
6055 :
6056 0 : Frequency Parser::getFrequency(const string &name, const string &tableName, const string &xmlDoc)
6057 : {
6058 0 : string xmlField = Parser::getField(xmlDoc,name);
6059 0 : if (xmlField.length() == 0)
6060 0 : throw ConversionException("Error: Missing field \"" +
6061 0 : name + "\" or invalid syntax",tableName);
6062 :
6063 : try {
6064 0 : return Frequency (xmlField);
6065 : }
6066 0 : catch (const InvalidArgumentException &e) {
6067 0 : throw ConversionException("Error: message was '"+
6068 0 : e.getMessage()+
6069 : "'",
6070 0 : tableName);
6071 0 : }
6072 :
6073 0 : }
6074 :
6075 0 : vector<Frequency> Parser::get1DFrequency(const string &name, const string &tableName, const string &xmlDoc)
6076 : {
6077 0 : string xmlField = Parser::getField(xmlDoc,name);
6078 0 : if (xmlField.length() == 0) {
6079 0 : throw ConversionException("Error: Field \"" +
6080 0 : name + "\": Invalid XML syntax", tableName);
6081 : }
6082 0 : StringTokenizer t(xmlField," ");
6083 : try {
6084 0 : int ndim = Integer::parseInt(t.nextToken());
6085 0 : if (ndim != 1) {
6086 0 : throw ConversionException("Error: Field \"" +
6087 0 : name + "\": Invalid array format", tableName);
6088 : }
6089 0 : int dim0 = Integer::parseInt(t.nextToken());
6090 0 : vector<Frequency> value (dim0);
6091 0 : if (dim0 == 0)
6092 0 : return value;
6093 0 : for (int i = 0; i < dim0; ++i) {
6094 :
6095 0 : value[i] = Frequency::getFrequency(t);
6096 :
6097 : }
6098 0 : if (t.hasMoreTokens()) {
6099 0 : throw ConversionException("Error: Field \"" +
6100 0 : name + "\": Syntax error.", tableName);
6101 : }
6102 0 : return value;
6103 0 : } catch (const NumberFormatException &e) {
6104 0 : throw ConversionException("Error: Field \"" +
6105 0 : name + "\": " + e.getMessage(), tableName);
6106 0 : } catch (const OutOfBoundsException &e) {
6107 0 : throw ConversionException("Error: Field \"" +
6108 0 : name + "\": Unexpected end of string", tableName);
6109 0 : } catch (const TagFormatException &e) {
6110 0 : throw ConversionException("Error: Field \"" +
6111 0 : name + "\": " + e.getMessage(), tableName);
6112 0 : }
6113 0 : }
6114 :
6115 0 : vector< vector<Frequency> > Parser::get2DFrequency(const string &name, const string &tableName, const string &xmlDoc)
6116 : {
6117 0 : string xmlField = Parser::getField(xmlDoc,name);
6118 0 : if (xmlField.length() == 0) {
6119 0 : throw ConversionException("Error: Field \"" +
6120 0 : name + "\": Invalid XML syntax", tableName);
6121 : }
6122 0 : StringTokenizer t(xmlField," ");
6123 : try {
6124 0 : int ndim = Integer::parseInt(t.nextToken());
6125 0 : if (ndim != 2) {
6126 0 : throw ConversionException("Error: Field \"" +
6127 0 : name + "\": Invalid array format", tableName);
6128 : }
6129 0 : int dim0 = Integer::parseInt(t.nextToken());
6130 0 : int dim1 = Integer::parseInt(t.nextToken());
6131 0 : vector< vector<Frequency> > value;
6132 :
6133 0 : if (dim0 == 0 || dim1 == 0)
6134 0 : return value;
6135 :
6136 0 : vector<Frequency> v_aux;
6137 0 : for (int i = 0; i < dim0; ++i) {
6138 0 : v_aux.clear();
6139 0 : for (int j = 0; j < dim1; ++j) {
6140 :
6141 0 : v_aux.push_back(Frequency::getFrequency(t));
6142 :
6143 : }
6144 0 : value.push_back(v_aux);
6145 : }
6146 0 : if (t.hasMoreTokens()) {
6147 0 : throw ConversionException("Error: Field \"" +
6148 0 : name + "\": Syntax error.", tableName);
6149 : }
6150 0 : return value;
6151 0 : } catch (const NumberFormatException &e) {
6152 0 : throw ConversionException("Error: Field \"" +
6153 0 : name + "\": " + e.getMessage(), tableName);
6154 0 : } catch (const OutOfBoundsException &e) {
6155 0 : throw ConversionException("Error: Field \"" +
6156 0 : name + "\": Unexpected end of string", tableName);
6157 0 : } catch (const TagFormatException &e) {
6158 0 : throw ConversionException("Error: Field \"" +
6159 0 : name + "\": " + e.getMessage(), tableName);
6160 0 : }
6161 0 : }
6162 :
6163 0 : vector< vector< vector<Frequency> > > Parser::get3DFrequency(const string &name, const string &tableName, const string &xmlDoc)
6164 : {
6165 0 : string xmlField = Parser::getField(xmlDoc,name);
6166 0 : if (xmlField.length() == 0) {
6167 0 : throw ConversionException("Error: Field \"" +
6168 0 : name + "\": Invalid XML syntax", tableName);
6169 : }
6170 0 : StringTokenizer t(xmlField," ");
6171 : try {
6172 0 : int ndim = Integer::parseInt(t.nextToken());
6173 0 : if (ndim != 3) {
6174 0 : throw ConversionException("Error: Field \"" +
6175 0 : name + "\": Invalid array format", tableName);
6176 : }
6177 0 : int dim0 = Integer::parseInt(t.nextToken());
6178 0 : int dim1 = Integer::parseInt(t.nextToken());
6179 0 : int dim2 = Integer::parseInt(t.nextToken());
6180 0 : vector< vector< vector<Frequency> > > value ;
6181 0 : if (dim0 == 0 || dim1 == 0 || dim2 == 0)
6182 0 : return value;
6183 :
6184 0 : vector<vector<Frequency> > vv_aux;
6185 0 : vector<Frequency> v_aux;
6186 0 : for (int i = 0; i < dim0; ++i) {
6187 0 : vv_aux.clear();
6188 0 : for (int j = 0; j < dim1; ++j) {
6189 0 : v_aux.clear();
6190 0 : for (int k = 0; k < dim2; ++k) {
6191 :
6192 0 : v_aux.push_back(Frequency::getFrequency(t));
6193 :
6194 : }
6195 0 : vv_aux.push_back(v_aux);
6196 : }
6197 0 : value.push_back(vv_aux);
6198 : }
6199 0 : if (t.hasMoreTokens()) {
6200 0 : throw ConversionException("Error: Field \"" +
6201 0 : name + "\": Syntax error.", tableName);
6202 : }
6203 0 : return value;
6204 0 : } catch (const NumberFormatException &e) {
6205 0 : throw ConversionException("Error: Field \"" +
6206 0 : name + "\": " + e.getMessage(), tableName);
6207 0 : } catch (const OutOfBoundsException &e) {
6208 0 : throw ConversionException("Error: Field \"" +
6209 0 : name + "\": Unexpected end of string", tableName);
6210 0 : } catch (const TagFormatException &e) {
6211 0 : throw ConversionException("Error: Field \"" +
6212 0 : name + "\": " + e.getMessage(), tableName);
6213 0 : }
6214 0 : }
6215 :
6216 0 : vector< vector< vector< vector<Frequency> > > >Parser::get4DFrequency(const string &name, const string &tableName, const string &xmlDoc)
6217 : {
6218 0 : string xmlField = Parser::getField(xmlDoc,name);
6219 0 : if (xmlField.length() == 0) {
6220 0 : throw ConversionException("Error: Field \"" +
6221 0 : name + "\": Invalid XML syntax", tableName);
6222 : }
6223 0 : StringTokenizer t(xmlField," ");
6224 : try {
6225 0 : int ndim = Integer::parseInt(t.nextToken());
6226 0 : if (ndim != 4) {
6227 0 : throw ConversionException("Error: Field \"" +
6228 0 : name + "\": Invalid array format", tableName);
6229 : }
6230 0 : int dim0 = Integer::parseInt(t.nextToken());
6231 0 : int dim1 = Integer::parseInt(t.nextToken());
6232 0 : int dim2 = Integer::parseInt(t.nextToken());
6233 0 : int dim3 = Integer::parseInt(t.nextToken());
6234 0 : vector<vector< vector< vector<Frequency> > > >value;
6235 0 : if (dim0 == 0 || dim1 == 0 || dim2 == 0 || dim3 == 0)
6236 0 : return value;
6237 :
6238 0 : vector<vector<vector<Frequency> > >vvv_aux;
6239 0 : vector<vector< Frequency> > vv_aux;
6240 0 : vector<Frequency> v_aux;
6241 0 : for (int i = 0; i < dim0; ++i) {
6242 0 : vvv_aux.clear();
6243 0 : for (int j = 0; j < dim1; ++j) {
6244 0 : vv_aux.clear();
6245 0 : for (int k = 0; k < dim2; ++k) {
6246 0 : v_aux.clear();
6247 0 : for (int l = 0; l < dim3; l++) {
6248 :
6249 0 : v_aux.push_back(Frequency::getFrequency(t));
6250 :
6251 : }
6252 0 : vv_aux.push_back(v_aux);
6253 : }
6254 0 : vvv_aux.push_back(vv_aux);
6255 : }
6256 0 : value.push_back(vvv_aux);
6257 : }
6258 0 : if (t.hasMoreTokens()) {
6259 0 : throw ConversionException("Error: Field \"" +
6260 0 : name + "\": Syntax error.", tableName);
6261 : }
6262 0 : return value;
6263 0 : } catch (const NumberFormatException &e) {
6264 0 : throw ConversionException("Error: Field \"" +
6265 0 : name + "\": " + e.getMessage(), tableName);
6266 0 : } catch (const OutOfBoundsException &e) {
6267 0 : throw ConversionException("Error: Field \"" +
6268 0 : name + "\": Unexpected end of string", tableName);
6269 0 : } catch (const TagFormatException &e) {
6270 0 : throw ConversionException("Error: Field \"" +
6271 0 : name + "\": " + e.getMessage(), tableName);
6272 0 : }
6273 0 : }
6274 :
6275 :
6276 :
6277 :
6278 :
6279 : // Field type: Humidity
6280 :
6281 0 : void Parser::toXML(Humidity data, const string &name, string &buf) {
6282 0 : buf.append("<" + name + "> ");
6283 :
6284 0 : buf.append(data.toString());
6285 :
6286 0 : buf.append(" </" + name + "> ");
6287 0 : }
6288 :
6289 :
6290 :
6291 :
6292 0 : void Parser::toXML(vector<Humidity> data, const string &name, string &buf) {
6293 0 : buf.append("<" + name + "> ");
6294 0 : buf.append("1 ");
6295 0 : buf.append(Integer::toString(data.size()));
6296 0 : buf.append(" ");
6297 0 : for (unsigned int i = 0; i < data.size(); ++i) {
6298 :
6299 0 : buf.append(data[i].toString());
6300 :
6301 0 : buf.append(" ");
6302 : }
6303 0 : buf.append(" </" + name + "> ");
6304 0 : }
6305 :
6306 0 : void Parser::toXML(vector< vector<Humidity> > data, const string &name, string &buf) {
6307 0 : buf.append("<" + name + "> ");
6308 0 : buf.append("2 ");
6309 0 : buf.append(Integer::toString(data.size()));
6310 0 : buf.append(" ");
6311 0 : buf.append(Integer::toString(data[0].size()));
6312 0 : buf.append(" ");
6313 0 : for (unsigned int i = 0; i < data.size(); ++i) {
6314 0 : for (unsigned int j = 0; j < data[i].size(); ++j) {
6315 :
6316 0 : buf.append(data[i][j].toString());
6317 :
6318 0 : buf.append(" ");
6319 : }
6320 : }
6321 0 : buf.append(" </" + name + "> ");
6322 0 : }
6323 :
6324 0 : void Parser::toXML(vector< vector< vector<Humidity> > > data, const string &name, string &buf) {
6325 0 : buf.append("<" + name + "> ");
6326 0 : buf.append("3 ");
6327 0 : buf.append(Integer::toString(data.size()));
6328 0 : buf.append(" ");
6329 0 : buf.append(Integer::toString(data[0].size()));
6330 0 : buf.append(" ");
6331 0 : buf.append(Integer::toString(data[0][0].size()));
6332 0 : buf.append(" ");
6333 0 : for (unsigned int i = 0; i < data.size(); ++i) {
6334 0 : for (unsigned int j = 0; j < data[i].size(); ++j) {
6335 0 : for (unsigned int k = 0; k < data[i][j].size(); ++k) {
6336 :
6337 0 : buf.append(data[i][j][k].toString());
6338 :
6339 0 : buf.append(" ");
6340 : }
6341 : }
6342 : }
6343 0 : buf.append(" </" + name + "> ");
6344 0 : }
6345 :
6346 0 : void Parser::toXML(vector<vector< vector< vector<Humidity> > > >data, const string &name, string &buf) {
6347 0 : buf.append("<" + name + "> ");
6348 0 : buf.append("4 ");
6349 0 : buf.append(Integer::toString(data.size()));
6350 0 : buf.append(" ");
6351 0 : buf.append(Integer::toString(data[0].size()));
6352 0 : buf.append(" ");
6353 0 : buf.append(Integer::toString(data[0][0].size()));
6354 0 : buf.append(" ");
6355 0 : buf.append(Integer::toString(data[0][0][0].size()));
6356 0 : buf.append(" ");
6357 0 : for (unsigned int i = 0; i < data.size(); ++i) {
6358 0 : for (unsigned int j = 0; j < data[i].size(); ++j) {
6359 0 : for (unsigned int k = 0; k < data[i][j].size(); ++k) {
6360 0 : for (unsigned int l = 0; l < data[i][j][k].size(); l++) {
6361 :
6362 0 : buf.append(data[i][j][k][l].toString());
6363 :
6364 0 : buf.append(" ");
6365 : }
6366 : }
6367 : }
6368 : }
6369 0 : buf.append(" </" + name + "> ");
6370 0 : }
6371 :
6372 :
6373 :
6374 :
6375 :
6376 :
6377 0 : Humidity Parser::getHumidity(const string &name, const string &tableName, const string &xmlDoc)
6378 : {
6379 0 : string xmlField = Parser::getField(xmlDoc,name);
6380 0 : if (xmlField.length() == 0)
6381 0 : throw ConversionException("Error: Missing field \"" +
6382 0 : name + "\" or invalid syntax",tableName);
6383 :
6384 : try {
6385 0 : return Humidity (xmlField);
6386 : }
6387 0 : catch (const InvalidArgumentException &e) {
6388 0 : throw ConversionException("Error: message was '"+
6389 0 : e.getMessage()+
6390 : "'",
6391 0 : tableName);
6392 0 : }
6393 :
6394 0 : }
6395 :
6396 0 : vector<Humidity> Parser::get1DHumidity(const string &name, const string &tableName, const string &xmlDoc)
6397 : {
6398 0 : string xmlField = Parser::getField(xmlDoc,name);
6399 0 : if (xmlField.length() == 0) {
6400 0 : throw ConversionException("Error: Field \"" +
6401 0 : name + "\": Invalid XML syntax", tableName);
6402 : }
6403 0 : StringTokenizer t(xmlField," ");
6404 : try {
6405 0 : int ndim = Integer::parseInt(t.nextToken());
6406 0 : if (ndim != 1) {
6407 0 : throw ConversionException("Error: Field \"" +
6408 0 : name + "\": Invalid array format", tableName);
6409 : }
6410 0 : int dim0 = Integer::parseInt(t.nextToken());
6411 0 : vector<Humidity> value (dim0);
6412 0 : if (dim0 == 0)
6413 0 : return value;
6414 0 : for (int i = 0; i < dim0; ++i) {
6415 :
6416 0 : value[i] = Humidity::getHumidity(t);
6417 :
6418 : }
6419 0 : if (t.hasMoreTokens()) {
6420 0 : throw ConversionException("Error: Field \"" +
6421 0 : name + "\": Syntax error.", tableName);
6422 : }
6423 0 : return value;
6424 0 : } catch (const NumberFormatException &e) {
6425 0 : throw ConversionException("Error: Field \"" +
6426 0 : name + "\": " + e.getMessage(), tableName);
6427 0 : } catch (const OutOfBoundsException &e) {
6428 0 : throw ConversionException("Error: Field \"" +
6429 0 : name + "\": Unexpected end of string", tableName);
6430 0 : } catch (const TagFormatException &e) {
6431 0 : throw ConversionException("Error: Field \"" +
6432 0 : name + "\": " + e.getMessage(), tableName);
6433 0 : }
6434 0 : }
6435 :
6436 0 : vector< vector<Humidity> > Parser::get2DHumidity(const string &name, const string &tableName, const string &xmlDoc)
6437 : {
6438 0 : string xmlField = Parser::getField(xmlDoc,name);
6439 0 : if (xmlField.length() == 0) {
6440 0 : throw ConversionException("Error: Field \"" +
6441 0 : name + "\": Invalid XML syntax", tableName);
6442 : }
6443 0 : StringTokenizer t(xmlField," ");
6444 : try {
6445 0 : int ndim = Integer::parseInt(t.nextToken());
6446 0 : if (ndim != 2) {
6447 0 : throw ConversionException("Error: Field \"" +
6448 0 : name + "\": Invalid array format", tableName);
6449 : }
6450 0 : int dim0 = Integer::parseInt(t.nextToken());
6451 0 : int dim1 = Integer::parseInt(t.nextToken());
6452 0 : vector< vector<Humidity> > value;
6453 :
6454 0 : if (dim0 == 0 || dim1 == 0)
6455 0 : return value;
6456 :
6457 0 : vector<Humidity> v_aux;
6458 0 : for (int i = 0; i < dim0; ++i) {
6459 0 : v_aux.clear();
6460 0 : for (int j = 0; j < dim1; ++j) {
6461 :
6462 0 : v_aux.push_back(Humidity::getHumidity(t));
6463 :
6464 : }
6465 0 : value.push_back(v_aux);
6466 : }
6467 0 : if (t.hasMoreTokens()) {
6468 0 : throw ConversionException("Error: Field \"" +
6469 0 : name + "\": Syntax error.", tableName);
6470 : }
6471 0 : return value;
6472 0 : } catch (const NumberFormatException &e) {
6473 0 : throw ConversionException("Error: Field \"" +
6474 0 : name + "\": " + e.getMessage(), tableName);
6475 0 : } catch (const OutOfBoundsException &e) {
6476 0 : throw ConversionException("Error: Field \"" +
6477 0 : name + "\": Unexpected end of string", tableName);
6478 0 : } catch (const TagFormatException &e) {
6479 0 : throw ConversionException("Error: Field \"" +
6480 0 : name + "\": " + e.getMessage(), tableName);
6481 0 : }
6482 0 : }
6483 :
6484 0 : vector< vector< vector<Humidity> > > Parser::get3DHumidity(const string &name, const string &tableName, const string &xmlDoc)
6485 : {
6486 0 : string xmlField = Parser::getField(xmlDoc,name);
6487 0 : if (xmlField.length() == 0) {
6488 0 : throw ConversionException("Error: Field \"" +
6489 0 : name + "\": Invalid XML syntax", tableName);
6490 : }
6491 0 : StringTokenizer t(xmlField," ");
6492 : try {
6493 0 : int ndim = Integer::parseInt(t.nextToken());
6494 0 : if (ndim != 3) {
6495 0 : throw ConversionException("Error: Field \"" +
6496 0 : name + "\": Invalid array format", tableName);
6497 : }
6498 0 : int dim0 = Integer::parseInt(t.nextToken());
6499 0 : int dim1 = Integer::parseInt(t.nextToken());
6500 0 : int dim2 = Integer::parseInt(t.nextToken());
6501 0 : vector< vector< vector<Humidity> > > value ;
6502 0 : if (dim0 == 0 || dim1 == 0 || dim2 == 0)
6503 0 : return value;
6504 :
6505 0 : vector<vector<Humidity> > vv_aux;
6506 0 : vector<Humidity> v_aux;
6507 0 : for (int i = 0; i < dim0; ++i) {
6508 0 : vv_aux.clear();
6509 0 : for (int j = 0; j < dim1; ++j) {
6510 0 : v_aux.clear();
6511 0 : for (int k = 0; k < dim2; ++k) {
6512 :
6513 0 : v_aux.push_back(Humidity::getHumidity(t));
6514 :
6515 : }
6516 0 : vv_aux.push_back(v_aux);
6517 : }
6518 0 : value.push_back(vv_aux);
6519 : }
6520 0 : if (t.hasMoreTokens()) {
6521 0 : throw ConversionException("Error: Field \"" +
6522 0 : name + "\": Syntax error.", tableName);
6523 : }
6524 0 : return value;
6525 0 : } catch (const NumberFormatException &e) {
6526 0 : throw ConversionException("Error: Field \"" +
6527 0 : name + "\": " + e.getMessage(), tableName);
6528 0 : } catch (const OutOfBoundsException &e) {
6529 0 : throw ConversionException("Error: Field \"" +
6530 0 : name + "\": Unexpected end of string", tableName);
6531 0 : } catch (const TagFormatException &e) {
6532 0 : throw ConversionException("Error: Field \"" +
6533 0 : name + "\": " + e.getMessage(), tableName);
6534 0 : }
6535 0 : }
6536 :
6537 0 : vector< vector< vector< vector<Humidity> > > >Parser::get4DHumidity(const string &name, const string &tableName, const string &xmlDoc)
6538 : {
6539 0 : string xmlField = Parser::getField(xmlDoc,name);
6540 0 : if (xmlField.length() == 0) {
6541 0 : throw ConversionException("Error: Field \"" +
6542 0 : name + "\": Invalid XML syntax", tableName);
6543 : }
6544 0 : StringTokenizer t(xmlField," ");
6545 : try {
6546 0 : int ndim = Integer::parseInt(t.nextToken());
6547 0 : if (ndim != 4) {
6548 0 : throw ConversionException("Error: Field \"" +
6549 0 : name + "\": Invalid array format", tableName);
6550 : }
6551 0 : int dim0 = Integer::parseInt(t.nextToken());
6552 0 : int dim1 = Integer::parseInt(t.nextToken());
6553 0 : int dim2 = Integer::parseInt(t.nextToken());
6554 0 : int dim3 = Integer::parseInt(t.nextToken());
6555 0 : vector<vector< vector< vector<Humidity> > > >value;
6556 0 : if (dim0 == 0 || dim1 == 0 || dim2 == 0 || dim3 == 0)
6557 0 : return value;
6558 :
6559 0 : vector<vector<vector<Humidity> > >vvv_aux;
6560 0 : vector<vector< Humidity> > vv_aux;
6561 0 : vector<Humidity> v_aux;
6562 0 : for (int i = 0; i < dim0; ++i) {
6563 0 : vvv_aux.clear();
6564 0 : for (int j = 0; j < dim1; ++j) {
6565 0 : vv_aux.clear();
6566 0 : for (int k = 0; k < dim2; ++k) {
6567 0 : v_aux.clear();
6568 0 : for (int l = 0; l < dim3; l++) {
6569 :
6570 0 : v_aux.push_back(Humidity::getHumidity(t));
6571 :
6572 : }
6573 0 : vv_aux.push_back(v_aux);
6574 : }
6575 0 : vvv_aux.push_back(vv_aux);
6576 : }
6577 0 : value.push_back(vvv_aux);
6578 : }
6579 0 : if (t.hasMoreTokens()) {
6580 0 : throw ConversionException("Error: Field \"" +
6581 0 : name + "\": Syntax error.", tableName);
6582 : }
6583 0 : return value;
6584 0 : } catch (const NumberFormatException &e) {
6585 0 : throw ConversionException("Error: Field \"" +
6586 0 : name + "\": " + e.getMessage(), tableName);
6587 0 : } catch (const OutOfBoundsException &e) {
6588 0 : throw ConversionException("Error: Field \"" +
6589 0 : name + "\": Unexpected end of string", tableName);
6590 0 : } catch (const TagFormatException &e) {
6591 0 : throw ConversionException("Error: Field \"" +
6592 0 : name + "\": " + e.getMessage(), tableName);
6593 0 : }
6594 0 : }
6595 :
6596 :
6597 :
6598 :
6599 :
6600 : // Field type: Interval
6601 :
6602 0 : void Parser::toXML(Interval data, const string &name, string &buf) {
6603 0 : buf.append("<" + name + "> ");
6604 :
6605 0 : buf.append(data.toString());
6606 :
6607 0 : buf.append(" </" + name + "> ");
6608 0 : }
6609 :
6610 :
6611 :
6612 :
6613 0 : void Parser::toXML(vector<Interval> data, const string &name, string &buf) {
6614 0 : buf.append("<" + name + "> ");
6615 0 : buf.append("1 ");
6616 0 : buf.append(Integer::toString(data.size()));
6617 0 : buf.append(" ");
6618 0 : for (unsigned int i = 0; i < data.size(); ++i) {
6619 :
6620 0 : buf.append(data[i].toString());
6621 :
6622 0 : buf.append(" ");
6623 : }
6624 0 : buf.append(" </" + name + "> ");
6625 0 : }
6626 :
6627 0 : void Parser::toXML(vector< vector<Interval> > data, const string &name, string &buf) {
6628 0 : buf.append("<" + name + "> ");
6629 0 : buf.append("2 ");
6630 0 : buf.append(Integer::toString(data.size()));
6631 0 : buf.append(" ");
6632 0 : buf.append(Integer::toString(data[0].size()));
6633 0 : buf.append(" ");
6634 0 : for (unsigned int i = 0; i < data.size(); ++i) {
6635 0 : for (unsigned int j = 0; j < data[i].size(); ++j) {
6636 :
6637 0 : buf.append(data[i][j].toString());
6638 :
6639 0 : buf.append(" ");
6640 : }
6641 : }
6642 0 : buf.append(" </" + name + "> ");
6643 0 : }
6644 :
6645 0 : void Parser::toXML(vector< vector< vector<Interval> > > data, const string &name, string &buf) {
6646 0 : buf.append("<" + name + "> ");
6647 0 : buf.append("3 ");
6648 0 : buf.append(Integer::toString(data.size()));
6649 0 : buf.append(" ");
6650 0 : buf.append(Integer::toString(data[0].size()));
6651 0 : buf.append(" ");
6652 0 : buf.append(Integer::toString(data[0][0].size()));
6653 0 : buf.append(" ");
6654 0 : for (unsigned int i = 0; i < data.size(); ++i) {
6655 0 : for (unsigned int j = 0; j < data[i].size(); ++j) {
6656 0 : for (unsigned int k = 0; k < data[i][j].size(); ++k) {
6657 :
6658 0 : buf.append(data[i][j][k].toString());
6659 :
6660 0 : buf.append(" ");
6661 : }
6662 : }
6663 : }
6664 0 : buf.append(" </" + name + "> ");
6665 0 : }
6666 :
6667 0 : void Parser::toXML(vector<vector< vector< vector<Interval> > > >data, const string &name, string &buf) {
6668 0 : buf.append("<" + name + "> ");
6669 0 : buf.append("4 ");
6670 0 : buf.append(Integer::toString(data.size()));
6671 0 : buf.append(" ");
6672 0 : buf.append(Integer::toString(data[0].size()));
6673 0 : buf.append(" ");
6674 0 : buf.append(Integer::toString(data[0][0].size()));
6675 0 : buf.append(" ");
6676 0 : buf.append(Integer::toString(data[0][0][0].size()));
6677 0 : buf.append(" ");
6678 0 : for (unsigned int i = 0; i < data.size(); ++i) {
6679 0 : for (unsigned int j = 0; j < data[i].size(); ++j) {
6680 0 : for (unsigned int k = 0; k < data[i][j].size(); ++k) {
6681 0 : for (unsigned int l = 0; l < data[i][j][k].size(); l++) {
6682 :
6683 0 : buf.append(data[i][j][k][l].toString());
6684 :
6685 0 : buf.append(" ");
6686 : }
6687 : }
6688 : }
6689 : }
6690 0 : buf.append(" </" + name + "> ");
6691 0 : }
6692 :
6693 :
6694 :
6695 :
6696 :
6697 :
6698 0 : Interval Parser::getInterval(const string &name, const string &tableName, const string &xmlDoc)
6699 : {
6700 0 : string xmlField = Parser::getField(xmlDoc,name);
6701 0 : if (xmlField.length() == 0)
6702 0 : throw ConversionException("Error: Missing field \"" +
6703 0 : name + "\" or invalid syntax",tableName);
6704 :
6705 : try {
6706 0 : return Interval (xmlField);
6707 : }
6708 0 : catch (const InvalidArgumentException &e) {
6709 0 : throw ConversionException("Error: message was '"+
6710 0 : e.getMessage()+
6711 : "'",
6712 0 : tableName);
6713 0 : }
6714 :
6715 0 : }
6716 :
6717 0 : vector<Interval> Parser::get1DInterval(const string &name, const string &tableName, const string &xmlDoc)
6718 : {
6719 0 : string xmlField = Parser::getField(xmlDoc,name);
6720 0 : if (xmlField.length() == 0) {
6721 0 : throw ConversionException("Error: Field \"" +
6722 0 : name + "\": Invalid XML syntax", tableName);
6723 : }
6724 0 : StringTokenizer t(xmlField," ");
6725 : try {
6726 0 : int ndim = Integer::parseInt(t.nextToken());
6727 0 : if (ndim != 1) {
6728 0 : throw ConversionException("Error: Field \"" +
6729 0 : name + "\": Invalid array format", tableName);
6730 : }
6731 0 : int dim0 = Integer::parseInt(t.nextToken());
6732 0 : vector<Interval> value (dim0);
6733 0 : if (dim0 == 0)
6734 0 : return value;
6735 0 : for (int i = 0; i < dim0; ++i) {
6736 :
6737 0 : value[i] = Interval::getInterval(t);
6738 :
6739 : }
6740 0 : if (t.hasMoreTokens()) {
6741 0 : throw ConversionException("Error: Field \"" +
6742 0 : name + "\": Syntax error.", tableName);
6743 : }
6744 0 : return value;
6745 0 : } catch (const NumberFormatException &e) {
6746 0 : throw ConversionException("Error: Field \"" +
6747 0 : name + "\": " + e.getMessage(), tableName);
6748 0 : } catch (const OutOfBoundsException &e) {
6749 0 : throw ConversionException("Error: Field \"" +
6750 0 : name + "\": Unexpected end of string", tableName);
6751 0 : } catch (const TagFormatException &e) {
6752 0 : throw ConversionException("Error: Field \"" +
6753 0 : name + "\": " + e.getMessage(), tableName);
6754 0 : }
6755 0 : }
6756 :
6757 0 : vector< vector<Interval> > Parser::get2DInterval(const string &name, const string &tableName, const string &xmlDoc)
6758 : {
6759 0 : string xmlField = Parser::getField(xmlDoc,name);
6760 0 : if (xmlField.length() == 0) {
6761 0 : throw ConversionException("Error: Field \"" +
6762 0 : name + "\": Invalid XML syntax", tableName);
6763 : }
6764 0 : StringTokenizer t(xmlField," ");
6765 : try {
6766 0 : int ndim = Integer::parseInt(t.nextToken());
6767 0 : if (ndim != 2) {
6768 0 : throw ConversionException("Error: Field \"" +
6769 0 : name + "\": Invalid array format", tableName);
6770 : }
6771 0 : int dim0 = Integer::parseInt(t.nextToken());
6772 0 : int dim1 = Integer::parseInt(t.nextToken());
6773 0 : vector< vector<Interval> > value;
6774 :
6775 0 : if (dim0 == 0 || dim1 == 0)
6776 0 : return value;
6777 :
6778 0 : vector<Interval> v_aux;
6779 0 : for (int i = 0; i < dim0; ++i) {
6780 0 : v_aux.clear();
6781 0 : for (int j = 0; j < dim1; ++j) {
6782 :
6783 0 : v_aux.push_back(Interval::getInterval(t));
6784 :
6785 : }
6786 0 : value.push_back(v_aux);
6787 : }
6788 0 : if (t.hasMoreTokens()) {
6789 0 : throw ConversionException("Error: Field \"" +
6790 0 : name + "\": Syntax error.", tableName);
6791 : }
6792 0 : return value;
6793 0 : } catch (const NumberFormatException &e) {
6794 0 : throw ConversionException("Error: Field \"" +
6795 0 : name + "\": " + e.getMessage(), tableName);
6796 0 : } catch (const OutOfBoundsException &e) {
6797 0 : throw ConversionException("Error: Field \"" +
6798 0 : name + "\": Unexpected end of string", tableName);
6799 0 : } catch (const TagFormatException &e) {
6800 0 : throw ConversionException("Error: Field \"" +
6801 0 : name + "\": " + e.getMessage(), tableName);
6802 0 : }
6803 0 : }
6804 :
6805 0 : vector< vector< vector<Interval> > > Parser::get3DInterval(const string &name, const string &tableName, const string &xmlDoc)
6806 : {
6807 0 : string xmlField = Parser::getField(xmlDoc,name);
6808 0 : if (xmlField.length() == 0) {
6809 0 : throw ConversionException("Error: Field \"" +
6810 0 : name + "\": Invalid XML syntax", tableName);
6811 : }
6812 0 : StringTokenizer t(xmlField," ");
6813 : try {
6814 0 : int ndim = Integer::parseInt(t.nextToken());
6815 0 : if (ndim != 3) {
6816 0 : throw ConversionException("Error: Field \"" +
6817 0 : name + "\": Invalid array format", tableName);
6818 : }
6819 0 : int dim0 = Integer::parseInt(t.nextToken());
6820 0 : int dim1 = Integer::parseInt(t.nextToken());
6821 0 : int dim2 = Integer::parseInt(t.nextToken());
6822 0 : vector< vector< vector<Interval> > > value ;
6823 0 : if (dim0 == 0 || dim1 == 0 || dim2 == 0)
6824 0 : return value;
6825 :
6826 0 : vector<vector<Interval> > vv_aux;
6827 0 : vector<Interval> v_aux;
6828 0 : for (int i = 0; i < dim0; ++i) {
6829 0 : vv_aux.clear();
6830 0 : for (int j = 0; j < dim1; ++j) {
6831 0 : v_aux.clear();
6832 0 : for (int k = 0; k < dim2; ++k) {
6833 :
6834 0 : v_aux.push_back(Interval::getInterval(t));
6835 :
6836 : }
6837 0 : vv_aux.push_back(v_aux);
6838 : }
6839 0 : value.push_back(vv_aux);
6840 : }
6841 0 : if (t.hasMoreTokens()) {
6842 0 : throw ConversionException("Error: Field \"" +
6843 0 : name + "\": Syntax error.", tableName);
6844 : }
6845 0 : return value;
6846 0 : } catch (const NumberFormatException &e) {
6847 0 : throw ConversionException("Error: Field \"" +
6848 0 : name + "\": " + e.getMessage(), tableName);
6849 0 : } catch (const OutOfBoundsException &e) {
6850 0 : throw ConversionException("Error: Field \"" +
6851 0 : name + "\": Unexpected end of string", tableName);
6852 0 : } catch (const TagFormatException &e) {
6853 0 : throw ConversionException("Error: Field \"" +
6854 0 : name + "\": " + e.getMessage(), tableName);
6855 0 : }
6856 0 : }
6857 :
6858 0 : vector< vector< vector< vector<Interval> > > >Parser::get4DInterval(const string &name, const string &tableName, const string &xmlDoc)
6859 : {
6860 0 : string xmlField = Parser::getField(xmlDoc,name);
6861 0 : if (xmlField.length() == 0) {
6862 0 : throw ConversionException("Error: Field \"" +
6863 0 : name + "\": Invalid XML syntax", tableName);
6864 : }
6865 0 : StringTokenizer t(xmlField," ");
6866 : try {
6867 0 : int ndim = Integer::parseInt(t.nextToken());
6868 0 : if (ndim != 4) {
6869 0 : throw ConversionException("Error: Field \"" +
6870 0 : name + "\": Invalid array format", tableName);
6871 : }
6872 0 : int dim0 = Integer::parseInt(t.nextToken());
6873 0 : int dim1 = Integer::parseInt(t.nextToken());
6874 0 : int dim2 = Integer::parseInt(t.nextToken());
6875 0 : int dim3 = Integer::parseInt(t.nextToken());
6876 0 : vector<vector< vector< vector<Interval> > > >value;
6877 0 : if (dim0 == 0 || dim1 == 0 || dim2 == 0 || dim3 == 0)
6878 0 : return value;
6879 :
6880 0 : vector<vector<vector<Interval> > >vvv_aux;
6881 0 : vector<vector< Interval> > vv_aux;
6882 0 : vector<Interval> v_aux;
6883 0 : for (int i = 0; i < dim0; ++i) {
6884 0 : vvv_aux.clear();
6885 0 : for (int j = 0; j < dim1; ++j) {
6886 0 : vv_aux.clear();
6887 0 : for (int k = 0; k < dim2; ++k) {
6888 0 : v_aux.clear();
6889 0 : for (int l = 0; l < dim3; l++) {
6890 :
6891 0 : v_aux.push_back(Interval::getInterval(t));
6892 :
6893 : }
6894 0 : vv_aux.push_back(v_aux);
6895 : }
6896 0 : vvv_aux.push_back(vv_aux);
6897 : }
6898 0 : value.push_back(vvv_aux);
6899 : }
6900 0 : if (t.hasMoreTokens()) {
6901 0 : throw ConversionException("Error: Field \"" +
6902 0 : name + "\": Syntax error.", tableName);
6903 : }
6904 0 : return value;
6905 0 : } catch (const NumberFormatException &e) {
6906 0 : throw ConversionException("Error: Field \"" +
6907 0 : name + "\": " + e.getMessage(), tableName);
6908 0 : } catch (const OutOfBoundsException &e) {
6909 0 : throw ConversionException("Error: Field \"" +
6910 0 : name + "\": Unexpected end of string", tableName);
6911 0 : } catch (const TagFormatException &e) {
6912 0 : throw ConversionException("Error: Field \"" +
6913 0 : name + "\": " + e.getMessage(), tableName);
6914 0 : }
6915 0 : }
6916 :
6917 :
6918 :
6919 :
6920 :
6921 : // Field type: Length
6922 :
6923 0 : void Parser::toXML(Length data, const string &name, string &buf) {
6924 0 : buf.append("<" + name + "> ");
6925 :
6926 0 : buf.append(data.toString());
6927 :
6928 0 : buf.append(" </" + name + "> ");
6929 0 : }
6930 :
6931 :
6932 :
6933 :
6934 0 : void Parser::toXML(vector<Length> data, const string &name, string &buf) {
6935 0 : buf.append("<" + name + "> ");
6936 0 : buf.append("1 ");
6937 0 : buf.append(Integer::toString(data.size()));
6938 0 : buf.append(" ");
6939 0 : for (unsigned int i = 0; i < data.size(); ++i) {
6940 :
6941 0 : buf.append(data[i].toString());
6942 :
6943 0 : buf.append(" ");
6944 : }
6945 0 : buf.append(" </" + name + "> ");
6946 0 : }
6947 :
6948 0 : void Parser::toXML(vector< vector<Length> > data, const string &name, string &buf) {
6949 0 : buf.append("<" + name + "> ");
6950 0 : buf.append("2 ");
6951 0 : buf.append(Integer::toString(data.size()));
6952 0 : buf.append(" ");
6953 0 : buf.append(Integer::toString(data[0].size()));
6954 0 : buf.append(" ");
6955 0 : for (unsigned int i = 0; i < data.size(); ++i) {
6956 0 : for (unsigned int j = 0; j < data[i].size(); ++j) {
6957 :
6958 0 : buf.append(data[i][j].toString());
6959 :
6960 0 : buf.append(" ");
6961 : }
6962 : }
6963 0 : buf.append(" </" + name + "> ");
6964 0 : }
6965 :
6966 0 : void Parser::toXML(vector< vector< vector<Length> > > data, const string &name, string &buf) {
6967 0 : buf.append("<" + name + "> ");
6968 0 : buf.append("3 ");
6969 0 : buf.append(Integer::toString(data.size()));
6970 0 : buf.append(" ");
6971 0 : buf.append(Integer::toString(data[0].size()));
6972 0 : buf.append(" ");
6973 0 : buf.append(Integer::toString(data[0][0].size()));
6974 0 : buf.append(" ");
6975 0 : for (unsigned int i = 0; i < data.size(); ++i) {
6976 0 : for (unsigned int j = 0; j < data[i].size(); ++j) {
6977 0 : for (unsigned int k = 0; k < data[i][j].size(); ++k) {
6978 :
6979 0 : buf.append(data[i][j][k].toString());
6980 :
6981 0 : buf.append(" ");
6982 : }
6983 : }
6984 : }
6985 0 : buf.append(" </" + name + "> ");
6986 0 : }
6987 :
6988 0 : void Parser::toXML(vector<vector< vector< vector<Length> > > >data, const string &name, string &buf) {
6989 0 : buf.append("<" + name + "> ");
6990 0 : buf.append("4 ");
6991 0 : buf.append(Integer::toString(data.size()));
6992 0 : buf.append(" ");
6993 0 : buf.append(Integer::toString(data[0].size()));
6994 0 : buf.append(" ");
6995 0 : buf.append(Integer::toString(data[0][0].size()));
6996 0 : buf.append(" ");
6997 0 : buf.append(Integer::toString(data[0][0][0].size()));
6998 0 : buf.append(" ");
6999 0 : for (unsigned int i = 0; i < data.size(); ++i) {
7000 0 : for (unsigned int j = 0; j < data[i].size(); ++j) {
7001 0 : for (unsigned int k = 0; k < data[i][j].size(); ++k) {
7002 0 : for (unsigned int l = 0; l < data[i][j][k].size(); l++) {
7003 :
7004 0 : buf.append(data[i][j][k][l].toString());
7005 :
7006 0 : buf.append(" ");
7007 : }
7008 : }
7009 : }
7010 : }
7011 0 : buf.append(" </" + name + "> ");
7012 0 : }
7013 :
7014 :
7015 :
7016 :
7017 :
7018 :
7019 0 : Length Parser::getLength(const string &name, const string &tableName, const string &xmlDoc)
7020 : {
7021 0 : string xmlField = Parser::getField(xmlDoc,name);
7022 0 : if (xmlField.length() == 0)
7023 0 : throw ConversionException("Error: Missing field \"" +
7024 0 : name + "\" or invalid syntax",tableName);
7025 :
7026 : try {
7027 0 : return Length (xmlField);
7028 : }
7029 0 : catch (const InvalidArgumentException &e) {
7030 0 : throw ConversionException("Error: message was '"+
7031 0 : e.getMessage()+
7032 : "'",
7033 0 : tableName);
7034 0 : }
7035 :
7036 0 : }
7037 :
7038 0 : vector<Length> Parser::get1DLength(const string &name, const string &tableName, const string &xmlDoc)
7039 : {
7040 0 : string xmlField = Parser::getField(xmlDoc,name);
7041 0 : if (xmlField.length() == 0) {
7042 0 : throw ConversionException("Error: Field \"" +
7043 0 : name + "\": Invalid XML syntax", tableName);
7044 : }
7045 0 : StringTokenizer t(xmlField," ");
7046 : try {
7047 0 : int ndim = Integer::parseInt(t.nextToken());
7048 0 : if (ndim != 1) {
7049 0 : throw ConversionException("Error: Field \"" +
7050 0 : name + "\": Invalid array format", tableName);
7051 : }
7052 0 : int dim0 = Integer::parseInt(t.nextToken());
7053 0 : vector<Length> value (dim0);
7054 0 : if (dim0 == 0)
7055 0 : return value;
7056 0 : for (int i = 0; i < dim0; ++i) {
7057 :
7058 0 : value[i] = Length::getLength(t);
7059 :
7060 : }
7061 0 : if (t.hasMoreTokens()) {
7062 0 : throw ConversionException("Error: Field \"" +
7063 0 : name + "\": Syntax error.", tableName);
7064 : }
7065 0 : return value;
7066 0 : } catch (const NumberFormatException &e) {
7067 0 : throw ConversionException("Error: Field \"" +
7068 0 : name + "\": " + e.getMessage(), tableName);
7069 0 : } catch (const OutOfBoundsException &e) {
7070 0 : throw ConversionException("Error: Field \"" +
7071 0 : name + "\": Unexpected end of string", tableName);
7072 0 : } catch (const TagFormatException &e) {
7073 0 : throw ConversionException("Error: Field \"" +
7074 0 : name + "\": " + e.getMessage(), tableName);
7075 0 : }
7076 0 : }
7077 :
7078 0 : vector< vector<Length> > Parser::get2DLength(const string &name, const string &tableName, const string &xmlDoc)
7079 : {
7080 0 : string xmlField = Parser::getField(xmlDoc,name);
7081 0 : if (xmlField.length() == 0) {
7082 0 : throw ConversionException("Error: Field \"" +
7083 0 : name + "\": Invalid XML syntax", tableName);
7084 : }
7085 0 : StringTokenizer t(xmlField," ");
7086 : try {
7087 0 : int ndim = Integer::parseInt(t.nextToken());
7088 0 : if (ndim != 2) {
7089 0 : throw ConversionException("Error: Field \"" +
7090 0 : name + "\": Invalid array format", tableName);
7091 : }
7092 0 : int dim0 = Integer::parseInt(t.nextToken());
7093 0 : int dim1 = Integer::parseInt(t.nextToken());
7094 0 : vector< vector<Length> > value;
7095 :
7096 0 : if (dim0 == 0 || dim1 == 0)
7097 0 : return value;
7098 :
7099 0 : vector<Length> v_aux;
7100 0 : for (int i = 0; i < dim0; ++i) {
7101 0 : v_aux.clear();
7102 0 : for (int j = 0; j < dim1; ++j) {
7103 :
7104 0 : v_aux.push_back(Length::getLength(t));
7105 :
7106 : }
7107 0 : value.push_back(v_aux);
7108 : }
7109 0 : if (t.hasMoreTokens()) {
7110 0 : throw ConversionException("Error: Field \"" +
7111 0 : name + "\": Syntax error.", tableName);
7112 : }
7113 0 : return value;
7114 0 : } catch (const NumberFormatException &e) {
7115 0 : throw ConversionException("Error: Field \"" +
7116 0 : name + "\": " + e.getMessage(), tableName);
7117 0 : } catch (const OutOfBoundsException &e) {
7118 0 : throw ConversionException("Error: Field \"" +
7119 0 : name + "\": Unexpected end of string", tableName);
7120 0 : } catch (const TagFormatException &e) {
7121 0 : throw ConversionException("Error: Field \"" +
7122 0 : name + "\": " + e.getMessage(), tableName);
7123 0 : }
7124 0 : }
7125 :
7126 0 : vector< vector< vector<Length> > > Parser::get3DLength(const string &name, const string &tableName, const string &xmlDoc)
7127 : {
7128 0 : string xmlField = Parser::getField(xmlDoc,name);
7129 0 : if (xmlField.length() == 0) {
7130 0 : throw ConversionException("Error: Field \"" +
7131 0 : name + "\": Invalid XML syntax", tableName);
7132 : }
7133 0 : StringTokenizer t(xmlField," ");
7134 : try {
7135 0 : int ndim = Integer::parseInt(t.nextToken());
7136 0 : if (ndim != 3) {
7137 0 : throw ConversionException("Error: Field \"" +
7138 0 : name + "\": Invalid array format", tableName);
7139 : }
7140 0 : int dim0 = Integer::parseInt(t.nextToken());
7141 0 : int dim1 = Integer::parseInt(t.nextToken());
7142 0 : int dim2 = Integer::parseInt(t.nextToken());
7143 0 : vector< vector< vector<Length> > > value ;
7144 0 : if (dim0 == 0 || dim1 == 0 || dim2 == 0)
7145 0 : return value;
7146 :
7147 0 : vector<vector<Length> > vv_aux;
7148 0 : vector<Length> v_aux;
7149 0 : for (int i = 0; i < dim0; ++i) {
7150 0 : vv_aux.clear();
7151 0 : for (int j = 0; j < dim1; ++j) {
7152 0 : v_aux.clear();
7153 0 : for (int k = 0; k < dim2; ++k) {
7154 :
7155 0 : v_aux.push_back(Length::getLength(t));
7156 :
7157 : }
7158 0 : vv_aux.push_back(v_aux);
7159 : }
7160 0 : value.push_back(vv_aux);
7161 : }
7162 0 : if (t.hasMoreTokens()) {
7163 0 : throw ConversionException("Error: Field \"" +
7164 0 : name + "\": Syntax error.", tableName);
7165 : }
7166 0 : return value;
7167 0 : } catch (const NumberFormatException &e) {
7168 0 : throw ConversionException("Error: Field \"" +
7169 0 : name + "\": " + e.getMessage(), tableName);
7170 0 : } catch (const OutOfBoundsException &e) {
7171 0 : throw ConversionException("Error: Field \"" +
7172 0 : name + "\": Unexpected end of string", tableName);
7173 0 : } catch (const TagFormatException &e) {
7174 0 : throw ConversionException("Error: Field \"" +
7175 0 : name + "\": " + e.getMessage(), tableName);
7176 0 : }
7177 0 : }
7178 :
7179 0 : vector< vector< vector< vector<Length> > > >Parser::get4DLength(const string &name, const string &tableName, const string &xmlDoc)
7180 : {
7181 0 : string xmlField = Parser::getField(xmlDoc,name);
7182 0 : if (xmlField.length() == 0) {
7183 0 : throw ConversionException("Error: Field \"" +
7184 0 : name + "\": Invalid XML syntax", tableName);
7185 : }
7186 0 : StringTokenizer t(xmlField," ");
7187 : try {
7188 0 : int ndim = Integer::parseInt(t.nextToken());
7189 0 : if (ndim != 4) {
7190 0 : throw ConversionException("Error: Field \"" +
7191 0 : name + "\": Invalid array format", tableName);
7192 : }
7193 0 : int dim0 = Integer::parseInt(t.nextToken());
7194 0 : int dim1 = Integer::parseInt(t.nextToken());
7195 0 : int dim2 = Integer::parseInt(t.nextToken());
7196 0 : int dim3 = Integer::parseInt(t.nextToken());
7197 0 : vector<vector< vector< vector<Length> > > >value;
7198 0 : if (dim0 == 0 || dim1 == 0 || dim2 == 0 || dim3 == 0)
7199 0 : return value;
7200 :
7201 0 : vector<vector<vector<Length> > >vvv_aux;
7202 0 : vector<vector< Length> > vv_aux;
7203 0 : vector<Length> v_aux;
7204 0 : for (int i = 0; i < dim0; ++i) {
7205 0 : vvv_aux.clear();
7206 0 : for (int j = 0; j < dim1; ++j) {
7207 0 : vv_aux.clear();
7208 0 : for (int k = 0; k < dim2; ++k) {
7209 0 : v_aux.clear();
7210 0 : for (int l = 0; l < dim3; l++) {
7211 :
7212 0 : v_aux.push_back(Length::getLength(t));
7213 :
7214 : }
7215 0 : vv_aux.push_back(v_aux);
7216 : }
7217 0 : vvv_aux.push_back(vv_aux);
7218 : }
7219 0 : value.push_back(vvv_aux);
7220 : }
7221 0 : if (t.hasMoreTokens()) {
7222 0 : throw ConversionException("Error: Field \"" +
7223 0 : name + "\": Syntax error.", tableName);
7224 : }
7225 0 : return value;
7226 0 : } catch (const NumberFormatException &e) {
7227 0 : throw ConversionException("Error: Field \"" +
7228 0 : name + "\": " + e.getMessage(), tableName);
7229 0 : } catch (const OutOfBoundsException &e) {
7230 0 : throw ConversionException("Error: Field \"" +
7231 0 : name + "\": Unexpected end of string", tableName);
7232 0 : } catch (const TagFormatException &e) {
7233 0 : throw ConversionException("Error: Field \"" +
7234 0 : name + "\": " + e.getMessage(), tableName);
7235 0 : }
7236 0 : }
7237 :
7238 :
7239 :
7240 :
7241 :
7242 : // Field type: Pressure
7243 :
7244 0 : void Parser::toXML(Pressure data, const string &name, string &buf) {
7245 0 : buf.append("<" + name + "> ");
7246 :
7247 0 : buf.append(data.toString());
7248 :
7249 0 : buf.append(" </" + name + "> ");
7250 0 : }
7251 :
7252 :
7253 :
7254 :
7255 0 : void Parser::toXML(vector<Pressure> data, const string &name, string &buf) {
7256 0 : buf.append("<" + name + "> ");
7257 0 : buf.append("1 ");
7258 0 : buf.append(Integer::toString(data.size()));
7259 0 : buf.append(" ");
7260 0 : for (unsigned int i = 0; i < data.size(); ++i) {
7261 :
7262 0 : buf.append(data[i].toString());
7263 :
7264 0 : buf.append(" ");
7265 : }
7266 0 : buf.append(" </" + name + "> ");
7267 0 : }
7268 :
7269 0 : void Parser::toXML(vector< vector<Pressure> > data, const string &name, string &buf) {
7270 0 : buf.append("<" + name + "> ");
7271 0 : buf.append("2 ");
7272 0 : buf.append(Integer::toString(data.size()));
7273 0 : buf.append(" ");
7274 0 : buf.append(Integer::toString(data[0].size()));
7275 0 : buf.append(" ");
7276 0 : for (unsigned int i = 0; i < data.size(); ++i) {
7277 0 : for (unsigned int j = 0; j < data[i].size(); ++j) {
7278 :
7279 0 : buf.append(data[i][j].toString());
7280 :
7281 0 : buf.append(" ");
7282 : }
7283 : }
7284 0 : buf.append(" </" + name + "> ");
7285 0 : }
7286 :
7287 0 : void Parser::toXML(vector< vector< vector<Pressure> > > data, const string &name, string &buf) {
7288 0 : buf.append("<" + name + "> ");
7289 0 : buf.append("3 ");
7290 0 : buf.append(Integer::toString(data.size()));
7291 0 : buf.append(" ");
7292 0 : buf.append(Integer::toString(data[0].size()));
7293 0 : buf.append(" ");
7294 0 : buf.append(Integer::toString(data[0][0].size()));
7295 0 : buf.append(" ");
7296 0 : for (unsigned int i = 0; i < data.size(); ++i) {
7297 0 : for (unsigned int j = 0; j < data[i].size(); ++j) {
7298 0 : for (unsigned int k = 0; k < data[i][j].size(); ++k) {
7299 :
7300 0 : buf.append(data[i][j][k].toString());
7301 :
7302 0 : buf.append(" ");
7303 : }
7304 : }
7305 : }
7306 0 : buf.append(" </" + name + "> ");
7307 0 : }
7308 :
7309 0 : void Parser::toXML(vector<vector< vector< vector<Pressure> > > >data, const string &name, string &buf) {
7310 0 : buf.append("<" + name + "> ");
7311 0 : buf.append("4 ");
7312 0 : buf.append(Integer::toString(data.size()));
7313 0 : buf.append(" ");
7314 0 : buf.append(Integer::toString(data[0].size()));
7315 0 : buf.append(" ");
7316 0 : buf.append(Integer::toString(data[0][0].size()));
7317 0 : buf.append(" ");
7318 0 : buf.append(Integer::toString(data[0][0][0].size()));
7319 0 : buf.append(" ");
7320 0 : for (unsigned int i = 0; i < data.size(); ++i) {
7321 0 : for (unsigned int j = 0; j < data[i].size(); ++j) {
7322 0 : for (unsigned int k = 0; k < data[i][j].size(); ++k) {
7323 0 : for (unsigned int l = 0; l < data[i][j][k].size(); l++) {
7324 :
7325 0 : buf.append(data[i][j][k][l].toString());
7326 :
7327 0 : buf.append(" ");
7328 : }
7329 : }
7330 : }
7331 : }
7332 0 : buf.append(" </" + name + "> ");
7333 0 : }
7334 :
7335 :
7336 :
7337 :
7338 :
7339 :
7340 0 : Pressure Parser::getPressure(const string &name, const string &tableName, const string &xmlDoc)
7341 : {
7342 0 : string xmlField = Parser::getField(xmlDoc,name);
7343 0 : if (xmlField.length() == 0)
7344 0 : throw ConversionException("Error: Missing field \"" +
7345 0 : name + "\" or invalid syntax",tableName);
7346 :
7347 : try {
7348 0 : return Pressure (xmlField);
7349 : }
7350 0 : catch (const InvalidArgumentException &e) {
7351 0 : throw ConversionException("Error: message was '"+
7352 0 : e.getMessage()+
7353 : "'",
7354 0 : tableName);
7355 0 : }
7356 :
7357 0 : }
7358 :
7359 0 : vector<Pressure> Parser::get1DPressure(const string &name, const string &tableName, const string &xmlDoc)
7360 : {
7361 0 : string xmlField = Parser::getField(xmlDoc,name);
7362 0 : if (xmlField.length() == 0) {
7363 0 : throw ConversionException("Error: Field \"" +
7364 0 : name + "\": Invalid XML syntax", tableName);
7365 : }
7366 0 : StringTokenizer t(xmlField," ");
7367 : try {
7368 0 : int ndim = Integer::parseInt(t.nextToken());
7369 0 : if (ndim != 1) {
7370 0 : throw ConversionException("Error: Field \"" +
7371 0 : name + "\": Invalid array format", tableName);
7372 : }
7373 0 : int dim0 = Integer::parseInt(t.nextToken());
7374 0 : vector<Pressure> value (dim0);
7375 0 : if (dim0 == 0)
7376 0 : return value;
7377 0 : for (int i = 0; i < dim0; ++i) {
7378 :
7379 0 : value[i] = Pressure::getPressure(t);
7380 :
7381 : }
7382 0 : if (t.hasMoreTokens()) {
7383 0 : throw ConversionException("Error: Field \"" +
7384 0 : name + "\": Syntax error.", tableName);
7385 : }
7386 0 : return value;
7387 0 : } catch (const NumberFormatException &e) {
7388 0 : throw ConversionException("Error: Field \"" +
7389 0 : name + "\": " + e.getMessage(), tableName);
7390 0 : } catch (const OutOfBoundsException &e) {
7391 0 : throw ConversionException("Error: Field \"" +
7392 0 : name + "\": Unexpected end of string", tableName);
7393 0 : } catch (const TagFormatException &e) {
7394 0 : throw ConversionException("Error: Field \"" +
7395 0 : name + "\": " + e.getMessage(), tableName);
7396 0 : }
7397 0 : }
7398 :
7399 0 : vector< vector<Pressure> > Parser::get2DPressure(const string &name, const string &tableName, const string &xmlDoc)
7400 : {
7401 0 : string xmlField = Parser::getField(xmlDoc,name);
7402 0 : if (xmlField.length() == 0) {
7403 0 : throw ConversionException("Error: Field \"" +
7404 0 : name + "\": Invalid XML syntax", tableName);
7405 : }
7406 0 : StringTokenizer t(xmlField," ");
7407 : try {
7408 0 : int ndim = Integer::parseInt(t.nextToken());
7409 0 : if (ndim != 2) {
7410 0 : throw ConversionException("Error: Field \"" +
7411 0 : name + "\": Invalid array format", tableName);
7412 : }
7413 0 : int dim0 = Integer::parseInt(t.nextToken());
7414 0 : int dim1 = Integer::parseInt(t.nextToken());
7415 0 : vector< vector<Pressure> > value;
7416 :
7417 0 : if (dim0 == 0 || dim1 == 0)
7418 0 : return value;
7419 :
7420 0 : vector<Pressure> v_aux;
7421 0 : for (int i = 0; i < dim0; ++i) {
7422 0 : v_aux.clear();
7423 0 : for (int j = 0; j < dim1; ++j) {
7424 :
7425 0 : v_aux.push_back(Pressure::getPressure(t));
7426 :
7427 : }
7428 0 : value.push_back(v_aux);
7429 : }
7430 0 : if (t.hasMoreTokens()) {
7431 0 : throw ConversionException("Error: Field \"" +
7432 0 : name + "\": Syntax error.", tableName);
7433 : }
7434 0 : return value;
7435 0 : } catch (const NumberFormatException &e) {
7436 0 : throw ConversionException("Error: Field \"" +
7437 0 : name + "\": " + e.getMessage(), tableName);
7438 0 : } catch (const OutOfBoundsException &e) {
7439 0 : throw ConversionException("Error: Field \"" +
7440 0 : name + "\": Unexpected end of string", tableName);
7441 0 : } catch (const TagFormatException &e) {
7442 0 : throw ConversionException("Error: Field \"" +
7443 0 : name + "\": " + e.getMessage(), tableName);
7444 0 : }
7445 0 : }
7446 :
7447 0 : vector< vector< vector<Pressure> > > Parser::get3DPressure(const string &name, const string &tableName, const string &xmlDoc)
7448 : {
7449 0 : string xmlField = Parser::getField(xmlDoc,name);
7450 0 : if (xmlField.length() == 0) {
7451 0 : throw ConversionException("Error: Field \"" +
7452 0 : name + "\": Invalid XML syntax", tableName);
7453 : }
7454 0 : StringTokenizer t(xmlField," ");
7455 : try {
7456 0 : int ndim = Integer::parseInt(t.nextToken());
7457 0 : if (ndim != 3) {
7458 0 : throw ConversionException("Error: Field \"" +
7459 0 : name + "\": Invalid array format", tableName);
7460 : }
7461 0 : int dim0 = Integer::parseInt(t.nextToken());
7462 0 : int dim1 = Integer::parseInt(t.nextToken());
7463 0 : int dim2 = Integer::parseInt(t.nextToken());
7464 0 : vector< vector< vector<Pressure> > > value ;
7465 0 : if (dim0 == 0 || dim1 == 0 || dim2 == 0)
7466 0 : return value;
7467 :
7468 0 : vector<vector<Pressure> > vv_aux;
7469 0 : vector<Pressure> v_aux;
7470 0 : for (int i = 0; i < dim0; ++i) {
7471 0 : vv_aux.clear();
7472 0 : for (int j = 0; j < dim1; ++j) {
7473 0 : v_aux.clear();
7474 0 : for (int k = 0; k < dim2; ++k) {
7475 :
7476 0 : v_aux.push_back(Pressure::getPressure(t));
7477 :
7478 : }
7479 0 : vv_aux.push_back(v_aux);
7480 : }
7481 0 : value.push_back(vv_aux);
7482 : }
7483 0 : if (t.hasMoreTokens()) {
7484 0 : throw ConversionException("Error: Field \"" +
7485 0 : name + "\": Syntax error.", tableName);
7486 : }
7487 0 : return value;
7488 0 : } catch (const NumberFormatException &e) {
7489 0 : throw ConversionException("Error: Field \"" +
7490 0 : name + "\": " + e.getMessage(), tableName);
7491 0 : } catch (const OutOfBoundsException &e) {
7492 0 : throw ConversionException("Error: Field \"" +
7493 0 : name + "\": Unexpected end of string", tableName);
7494 0 : } catch (const TagFormatException &e) {
7495 0 : throw ConversionException("Error: Field \"" +
7496 0 : name + "\": " + e.getMessage(), tableName);
7497 0 : }
7498 0 : }
7499 :
7500 0 : vector< vector< vector< vector<Pressure> > > >Parser::get4DPressure(const string &name, const string &tableName, const string &xmlDoc)
7501 : {
7502 0 : string xmlField = Parser::getField(xmlDoc,name);
7503 0 : if (xmlField.length() == 0) {
7504 0 : throw ConversionException("Error: Field \"" +
7505 0 : name + "\": Invalid XML syntax", tableName);
7506 : }
7507 0 : StringTokenizer t(xmlField," ");
7508 : try {
7509 0 : int ndim = Integer::parseInt(t.nextToken());
7510 0 : if (ndim != 4) {
7511 0 : throw ConversionException("Error: Field \"" +
7512 0 : name + "\": Invalid array format", tableName);
7513 : }
7514 0 : int dim0 = Integer::parseInt(t.nextToken());
7515 0 : int dim1 = Integer::parseInt(t.nextToken());
7516 0 : int dim2 = Integer::parseInt(t.nextToken());
7517 0 : int dim3 = Integer::parseInt(t.nextToken());
7518 0 : vector<vector< vector< vector<Pressure> > > >value;
7519 0 : if (dim0 == 0 || dim1 == 0 || dim2 == 0 || dim3 == 0)
7520 0 : return value;
7521 :
7522 0 : vector<vector<vector<Pressure> > >vvv_aux;
7523 0 : vector<vector< Pressure> > vv_aux;
7524 0 : vector<Pressure> v_aux;
7525 0 : for (int i = 0; i < dim0; ++i) {
7526 0 : vvv_aux.clear();
7527 0 : for (int j = 0; j < dim1; ++j) {
7528 0 : vv_aux.clear();
7529 0 : for (int k = 0; k < dim2; ++k) {
7530 0 : v_aux.clear();
7531 0 : for (int l = 0; l < dim3; l++) {
7532 :
7533 0 : v_aux.push_back(Pressure::getPressure(t));
7534 :
7535 : }
7536 0 : vv_aux.push_back(v_aux);
7537 : }
7538 0 : vvv_aux.push_back(vv_aux);
7539 : }
7540 0 : value.push_back(vvv_aux);
7541 : }
7542 0 : if (t.hasMoreTokens()) {
7543 0 : throw ConversionException("Error: Field \"" +
7544 0 : name + "\": Syntax error.", tableName);
7545 : }
7546 0 : return value;
7547 0 : } catch (const NumberFormatException &e) {
7548 0 : throw ConversionException("Error: Field \"" +
7549 0 : name + "\": " + e.getMessage(), tableName);
7550 0 : } catch (const OutOfBoundsException &e) {
7551 0 : throw ConversionException("Error: Field \"" +
7552 0 : name + "\": Unexpected end of string", tableName);
7553 0 : } catch (const TagFormatException &e) {
7554 0 : throw ConversionException("Error: Field \"" +
7555 0 : name + "\": " + e.getMessage(), tableName);
7556 0 : }
7557 0 : }
7558 :
7559 :
7560 :
7561 :
7562 :
7563 : // Field type: Speed
7564 :
7565 0 : void Parser::toXML(Speed data, const string &name, string &buf) {
7566 0 : buf.append("<" + name + "> ");
7567 :
7568 0 : buf.append(data.toString());
7569 :
7570 0 : buf.append(" </" + name + "> ");
7571 0 : }
7572 :
7573 :
7574 :
7575 :
7576 0 : void Parser::toXML(vector<Speed> data, const string &name, string &buf) {
7577 0 : buf.append("<" + name + "> ");
7578 0 : buf.append("1 ");
7579 0 : buf.append(Integer::toString(data.size()));
7580 0 : buf.append(" ");
7581 0 : for (unsigned int i = 0; i < data.size(); ++i) {
7582 :
7583 0 : buf.append(data[i].toString());
7584 :
7585 0 : buf.append(" ");
7586 : }
7587 0 : buf.append(" </" + name + "> ");
7588 0 : }
7589 :
7590 0 : void Parser::toXML(vector< vector<Speed> > data, const string &name, string &buf) {
7591 0 : buf.append("<" + name + "> ");
7592 0 : buf.append("2 ");
7593 0 : buf.append(Integer::toString(data.size()));
7594 0 : buf.append(" ");
7595 0 : buf.append(Integer::toString(data[0].size()));
7596 0 : buf.append(" ");
7597 0 : for (unsigned int i = 0; i < data.size(); ++i) {
7598 0 : for (unsigned int j = 0; j < data[i].size(); ++j) {
7599 :
7600 0 : buf.append(data[i][j].toString());
7601 :
7602 0 : buf.append(" ");
7603 : }
7604 : }
7605 0 : buf.append(" </" + name + "> ");
7606 0 : }
7607 :
7608 0 : void Parser::toXML(vector< vector< vector<Speed> > > data, const string &name, string &buf) {
7609 0 : buf.append("<" + name + "> ");
7610 0 : buf.append("3 ");
7611 0 : buf.append(Integer::toString(data.size()));
7612 0 : buf.append(" ");
7613 0 : buf.append(Integer::toString(data[0].size()));
7614 0 : buf.append(" ");
7615 0 : buf.append(Integer::toString(data[0][0].size()));
7616 0 : buf.append(" ");
7617 0 : for (unsigned int i = 0; i < data.size(); ++i) {
7618 0 : for (unsigned int j = 0; j < data[i].size(); ++j) {
7619 0 : for (unsigned int k = 0; k < data[i][j].size(); ++k) {
7620 :
7621 0 : buf.append(data[i][j][k].toString());
7622 :
7623 0 : buf.append(" ");
7624 : }
7625 : }
7626 : }
7627 0 : buf.append(" </" + name + "> ");
7628 0 : }
7629 :
7630 0 : void Parser::toXML(vector<vector< vector< vector<Speed> > > >data, const string &name, string &buf) {
7631 0 : buf.append("<" + name + "> ");
7632 0 : buf.append("4 ");
7633 0 : buf.append(Integer::toString(data.size()));
7634 0 : buf.append(" ");
7635 0 : buf.append(Integer::toString(data[0].size()));
7636 0 : buf.append(" ");
7637 0 : buf.append(Integer::toString(data[0][0].size()));
7638 0 : buf.append(" ");
7639 0 : buf.append(Integer::toString(data[0][0][0].size()));
7640 0 : buf.append(" ");
7641 0 : for (unsigned int i = 0; i < data.size(); ++i) {
7642 0 : for (unsigned int j = 0; j < data[i].size(); ++j) {
7643 0 : for (unsigned int k = 0; k < data[i][j].size(); ++k) {
7644 0 : for (unsigned int l = 0; l < data[i][j][k].size(); l++) {
7645 :
7646 0 : buf.append(data[i][j][k][l].toString());
7647 :
7648 0 : buf.append(" ");
7649 : }
7650 : }
7651 : }
7652 : }
7653 0 : buf.append(" </" + name + "> ");
7654 0 : }
7655 :
7656 :
7657 :
7658 :
7659 :
7660 :
7661 0 : Speed Parser::getSpeed(const string &name, const string &tableName, const string &xmlDoc)
7662 : {
7663 0 : string xmlField = Parser::getField(xmlDoc,name);
7664 0 : if (xmlField.length() == 0)
7665 0 : throw ConversionException("Error: Missing field \"" +
7666 0 : name + "\" or invalid syntax",tableName);
7667 :
7668 : try {
7669 0 : return Speed (xmlField);
7670 : }
7671 0 : catch (const InvalidArgumentException &e) {
7672 0 : throw ConversionException("Error: message was '"+
7673 0 : e.getMessage()+
7674 : "'",
7675 0 : tableName);
7676 0 : }
7677 :
7678 0 : }
7679 :
7680 0 : vector<Speed> Parser::get1DSpeed(const string &name, const string &tableName, const string &xmlDoc)
7681 : {
7682 0 : string xmlField = Parser::getField(xmlDoc,name);
7683 0 : if (xmlField.length() == 0) {
7684 0 : throw ConversionException("Error: Field \"" +
7685 0 : name + "\": Invalid XML syntax", tableName);
7686 : }
7687 0 : StringTokenizer t(xmlField," ");
7688 : try {
7689 0 : int ndim = Integer::parseInt(t.nextToken());
7690 0 : if (ndim != 1) {
7691 0 : throw ConversionException("Error: Field \"" +
7692 0 : name + "\": Invalid array format", tableName);
7693 : }
7694 0 : int dim0 = Integer::parseInt(t.nextToken());
7695 0 : vector<Speed> value (dim0);
7696 0 : if (dim0 == 0)
7697 0 : return value;
7698 0 : for (int i = 0; i < dim0; ++i) {
7699 :
7700 0 : value[i] = Speed::getSpeed(t);
7701 :
7702 : }
7703 0 : if (t.hasMoreTokens()) {
7704 0 : throw ConversionException("Error: Field \"" +
7705 0 : name + "\": Syntax error.", tableName);
7706 : }
7707 0 : return value;
7708 0 : } catch (const NumberFormatException &e) {
7709 0 : throw ConversionException("Error: Field \"" +
7710 0 : name + "\": " + e.getMessage(), tableName);
7711 0 : } catch (const OutOfBoundsException &e) {
7712 0 : throw ConversionException("Error: Field \"" +
7713 0 : name + "\": Unexpected end of string", tableName);
7714 0 : } catch (const TagFormatException &e) {
7715 0 : throw ConversionException("Error: Field \"" +
7716 0 : name + "\": " + e.getMessage(), tableName);
7717 0 : }
7718 0 : }
7719 :
7720 0 : vector< vector<Speed> > Parser::get2DSpeed(const string &name, const string &tableName, const string &xmlDoc)
7721 : {
7722 0 : string xmlField = Parser::getField(xmlDoc,name);
7723 0 : if (xmlField.length() == 0) {
7724 0 : throw ConversionException("Error: Field \"" +
7725 0 : name + "\": Invalid XML syntax", tableName);
7726 : }
7727 0 : StringTokenizer t(xmlField," ");
7728 : try {
7729 0 : int ndim = Integer::parseInt(t.nextToken());
7730 0 : if (ndim != 2) {
7731 0 : throw ConversionException("Error: Field \"" +
7732 0 : name + "\": Invalid array format", tableName);
7733 : }
7734 0 : int dim0 = Integer::parseInt(t.nextToken());
7735 0 : int dim1 = Integer::parseInt(t.nextToken());
7736 0 : vector< vector<Speed> > value;
7737 :
7738 0 : if (dim0 == 0 || dim1 == 0)
7739 0 : return value;
7740 :
7741 0 : vector<Speed> v_aux;
7742 0 : for (int i = 0; i < dim0; ++i) {
7743 0 : v_aux.clear();
7744 0 : for (int j = 0; j < dim1; ++j) {
7745 :
7746 0 : v_aux.push_back(Speed::getSpeed(t));
7747 :
7748 : }
7749 0 : value.push_back(v_aux);
7750 : }
7751 0 : if (t.hasMoreTokens()) {
7752 0 : throw ConversionException("Error: Field \"" +
7753 0 : name + "\": Syntax error.", tableName);
7754 : }
7755 0 : return value;
7756 0 : } catch (const NumberFormatException &e) {
7757 0 : throw ConversionException("Error: Field \"" +
7758 0 : name + "\": " + e.getMessage(), tableName);
7759 0 : } catch (const OutOfBoundsException &e) {
7760 0 : throw ConversionException("Error: Field \"" +
7761 0 : name + "\": Unexpected end of string", tableName);
7762 0 : } catch (const TagFormatException &e) {
7763 0 : throw ConversionException("Error: Field \"" +
7764 0 : name + "\": " + e.getMessage(), tableName);
7765 0 : }
7766 0 : }
7767 :
7768 0 : vector< vector< vector<Speed> > > Parser::get3DSpeed(const string &name, const string &tableName, const string &xmlDoc)
7769 : {
7770 0 : string xmlField = Parser::getField(xmlDoc,name);
7771 0 : if (xmlField.length() == 0) {
7772 0 : throw ConversionException("Error: Field \"" +
7773 0 : name + "\": Invalid XML syntax", tableName);
7774 : }
7775 0 : StringTokenizer t(xmlField," ");
7776 : try {
7777 0 : int ndim = Integer::parseInt(t.nextToken());
7778 0 : if (ndim != 3) {
7779 0 : throw ConversionException("Error: Field \"" +
7780 0 : name + "\": Invalid array format", tableName);
7781 : }
7782 0 : int dim0 = Integer::parseInt(t.nextToken());
7783 0 : int dim1 = Integer::parseInt(t.nextToken());
7784 0 : int dim2 = Integer::parseInt(t.nextToken());
7785 0 : vector< vector< vector<Speed> > > value ;
7786 0 : if (dim0 == 0 || dim1 == 0 || dim2 == 0)
7787 0 : return value;
7788 :
7789 0 : vector<vector<Speed> > vv_aux;
7790 0 : vector<Speed> v_aux;
7791 0 : for (int i = 0; i < dim0; ++i) {
7792 0 : vv_aux.clear();
7793 0 : for (int j = 0; j < dim1; ++j) {
7794 0 : v_aux.clear();
7795 0 : for (int k = 0; k < dim2; ++k) {
7796 :
7797 0 : v_aux.push_back(Speed::getSpeed(t));
7798 :
7799 : }
7800 0 : vv_aux.push_back(v_aux);
7801 : }
7802 0 : value.push_back(vv_aux);
7803 : }
7804 0 : if (t.hasMoreTokens()) {
7805 0 : throw ConversionException("Error: Field \"" +
7806 0 : name + "\": Syntax error.", tableName);
7807 : }
7808 0 : return value;
7809 0 : } catch (const NumberFormatException &e) {
7810 0 : throw ConversionException("Error: Field \"" +
7811 0 : name + "\": " + e.getMessage(), tableName);
7812 0 : } catch (const OutOfBoundsException &e) {
7813 0 : throw ConversionException("Error: Field \"" +
7814 0 : name + "\": Unexpected end of string", tableName);
7815 0 : } catch (const TagFormatException &e) {
7816 0 : throw ConversionException("Error: Field \"" +
7817 0 : name + "\": " + e.getMessage(), tableName);
7818 0 : }
7819 0 : }
7820 :
7821 0 : vector< vector< vector< vector<Speed> > > >Parser::get4DSpeed(const string &name, const string &tableName, const string &xmlDoc)
7822 : {
7823 0 : string xmlField = Parser::getField(xmlDoc,name);
7824 0 : if (xmlField.length() == 0) {
7825 0 : throw ConversionException("Error: Field \"" +
7826 0 : name + "\": Invalid XML syntax", tableName);
7827 : }
7828 0 : StringTokenizer t(xmlField," ");
7829 : try {
7830 0 : int ndim = Integer::parseInt(t.nextToken());
7831 0 : if (ndim != 4) {
7832 0 : throw ConversionException("Error: Field \"" +
7833 0 : name + "\": Invalid array format", tableName);
7834 : }
7835 0 : int dim0 = Integer::parseInt(t.nextToken());
7836 0 : int dim1 = Integer::parseInt(t.nextToken());
7837 0 : int dim2 = Integer::parseInt(t.nextToken());
7838 0 : int dim3 = Integer::parseInt(t.nextToken());
7839 0 : vector<vector< vector< vector<Speed> > > >value;
7840 0 : if (dim0 == 0 || dim1 == 0 || dim2 == 0 || dim3 == 0)
7841 0 : return value;
7842 :
7843 0 : vector<vector<vector<Speed> > >vvv_aux;
7844 0 : vector<vector< Speed> > vv_aux;
7845 0 : vector<Speed> v_aux;
7846 0 : for (int i = 0; i < dim0; ++i) {
7847 0 : vvv_aux.clear();
7848 0 : for (int j = 0; j < dim1; ++j) {
7849 0 : vv_aux.clear();
7850 0 : for (int k = 0; k < dim2; ++k) {
7851 0 : v_aux.clear();
7852 0 : for (int l = 0; l < dim3; l++) {
7853 :
7854 0 : v_aux.push_back(Speed::getSpeed(t));
7855 :
7856 : }
7857 0 : vv_aux.push_back(v_aux);
7858 : }
7859 0 : vvv_aux.push_back(vv_aux);
7860 : }
7861 0 : value.push_back(vvv_aux);
7862 : }
7863 0 : if (t.hasMoreTokens()) {
7864 0 : throw ConversionException("Error: Field \"" +
7865 0 : name + "\": Syntax error.", tableName);
7866 : }
7867 0 : return value;
7868 0 : } catch (const NumberFormatException &e) {
7869 0 : throw ConversionException("Error: Field \"" +
7870 0 : name + "\": " + e.getMessage(), tableName);
7871 0 : } catch (const OutOfBoundsException &e) {
7872 0 : throw ConversionException("Error: Field \"" +
7873 0 : name + "\": Unexpected end of string", tableName);
7874 0 : } catch (const TagFormatException &e) {
7875 0 : throw ConversionException("Error: Field \"" +
7876 0 : name + "\": " + e.getMessage(), tableName);
7877 0 : }
7878 0 : }
7879 :
7880 :
7881 :
7882 :
7883 :
7884 : // Field type: Tag
7885 :
7886 0 : void Parser::toXML(Tag data, const string &name, string &buf) {
7887 0 : buf.append("<" + name + "> ");
7888 :
7889 0 : buf.append(data.toString());
7890 :
7891 0 : buf.append(" </" + name + "> ");
7892 0 : }
7893 :
7894 :
7895 :
7896 0 : void Parser::toXML(set< Tag > data, const string &name, string &buf) {
7897 0 : buf.append("<" + name + "> ");
7898 0 : set < Tag >::iterator iter;
7899 0 : for (iter=data.begin(); iter!=data.end(); iter++) {
7900 :
7901 0 : buf.append((*iter).toString()+" ");
7902 :
7903 : }
7904 0 : }
7905 :
7906 :
7907 0 : void Parser::toXML(vector<Tag> data, const string &name, string &buf) {
7908 0 : buf.append("<" + name + "> ");
7909 0 : buf.append("1 ");
7910 0 : buf.append(Integer::toString(data.size()));
7911 0 : buf.append(" ");
7912 0 : for (unsigned int i = 0; i < data.size(); ++i) {
7913 :
7914 0 : buf.append(data[i].toString());
7915 :
7916 0 : buf.append(" ");
7917 : }
7918 0 : buf.append(" </" + name + "> ");
7919 0 : }
7920 :
7921 0 : void Parser::toXML(vector< vector<Tag> > data, const string &name, string &buf) {
7922 0 : buf.append("<" + name + "> ");
7923 0 : buf.append("2 ");
7924 0 : buf.append(Integer::toString(data.size()));
7925 0 : buf.append(" ");
7926 0 : buf.append(Integer::toString(data[0].size()));
7927 0 : buf.append(" ");
7928 0 : for (unsigned int i = 0; i < data.size(); ++i) {
7929 0 : for (unsigned int j = 0; j < data[i].size(); ++j) {
7930 :
7931 0 : buf.append(data[i][j].toString());
7932 :
7933 0 : buf.append(" ");
7934 : }
7935 : }
7936 0 : buf.append(" </" + name + "> ");
7937 0 : }
7938 :
7939 0 : void Parser::toXML(vector< vector< vector<Tag> > > data, const string &name, string &buf) {
7940 0 : buf.append("<" + name + "> ");
7941 0 : buf.append("3 ");
7942 0 : buf.append(Integer::toString(data.size()));
7943 0 : buf.append(" ");
7944 0 : buf.append(Integer::toString(data[0].size()));
7945 0 : buf.append(" ");
7946 0 : buf.append(Integer::toString(data[0][0].size()));
7947 0 : buf.append(" ");
7948 0 : for (unsigned int i = 0; i < data.size(); ++i) {
7949 0 : for (unsigned int j = 0; j < data[i].size(); ++j) {
7950 0 : for (unsigned int k = 0; k < data[i][j].size(); ++k) {
7951 :
7952 0 : buf.append(data[i][j][k].toString());
7953 :
7954 0 : buf.append(" ");
7955 : }
7956 : }
7957 : }
7958 0 : buf.append(" </" + name + "> ");
7959 0 : }
7960 :
7961 0 : void Parser::toXML(vector<vector< vector< vector<Tag> > > >data, const string &name, string &buf) {
7962 0 : buf.append("<" + name + "> ");
7963 0 : buf.append("4 ");
7964 0 : buf.append(Integer::toString(data.size()));
7965 0 : buf.append(" ");
7966 0 : buf.append(Integer::toString(data[0].size()));
7967 0 : buf.append(" ");
7968 0 : buf.append(Integer::toString(data[0][0].size()));
7969 0 : buf.append(" ");
7970 0 : buf.append(Integer::toString(data[0][0][0].size()));
7971 0 : buf.append(" ");
7972 0 : for (unsigned int i = 0; i < data.size(); ++i) {
7973 0 : for (unsigned int j = 0; j < data[i].size(); ++j) {
7974 0 : for (unsigned int k = 0; k < data[i][j].size(); ++k) {
7975 0 : for (unsigned int l = 0; l < data[i][j][k].size(); l++) {
7976 :
7977 0 : buf.append(data[i][j][k][l].toString());
7978 :
7979 0 : buf.append(" ");
7980 : }
7981 : }
7982 : }
7983 : }
7984 0 : buf.append(" </" + name + "> ");
7985 0 : }
7986 :
7987 :
7988 :
7989 :
7990 :
7991 0 : set< Tag > Parser::getTagSet(const string &name, const string &tableName, const string &xmlDoc) {
7992 0 : string xmlField = Parser::getField(xmlDoc,name);
7993 0 : if (xmlField.length() == 0)
7994 0 : throw ConversionException("Error: Missing field \"" +
7995 0 : name + "\" or invalid syntax",tableName);
7996 0 : StringTokenizer t(xmlField," ");
7997 0 : set < Tag > result;
7998 :
7999 0 : while (t.hasMoreTokens()) {
8000 :
8001 :
8002 : try {
8003 0 : result.insert(Tag::parseTag(t.nextToken()));
8004 : }
8005 0 : catch (const TagFormatException &e) {
8006 0 : throw ConversionException("Error: Field \"" +
8007 0 : name + "\": " + e.getMessage(), tableName);
8008 0 : }
8009 :
8010 : }
8011 0 : return result;
8012 0 : }
8013 :
8014 :
8015 0 : Tag Parser::getTag(const string &name, const string &tableName, const string &xmlDoc)
8016 : {
8017 0 : string xmlField = Parser::getField(xmlDoc,name);
8018 0 : if (xmlField.length() == 0)
8019 0 : throw ConversionException("Error: Missing field \"" +
8020 0 : name + "\" or invalid syntax",tableName);
8021 :
8022 : try {
8023 0 : return Tag::parseTag(xmlField);
8024 : }
8025 0 : catch (const TagFormatException &e) {
8026 0 : throw ConversionException("Error: Field \"" +
8027 0 : name + "\": " + e.getMessage(), tableName);
8028 0 : }
8029 :
8030 0 : }
8031 :
8032 0 : vector<Tag> Parser::get1DTag(const string &name, const string &tableName, const string &xmlDoc)
8033 : {
8034 0 : string xmlField = Parser::getField(xmlDoc,name);
8035 0 : if (xmlField.length() == 0) {
8036 0 : throw ConversionException("Error: Field \"" +
8037 0 : name + "\": Invalid XML syntax", tableName);
8038 : }
8039 0 : StringTokenizer t(xmlField," ");
8040 : try {
8041 0 : int ndim = Integer::parseInt(t.nextToken());
8042 0 : if (ndim != 1) {
8043 0 : throw ConversionException("Error: Field \"" +
8044 0 : name + "\": Invalid array format", tableName);
8045 : }
8046 0 : int dim0 = Integer::parseInt(t.nextToken());
8047 0 : vector<Tag> value (dim0);
8048 0 : if (dim0 == 0)
8049 0 : return value;
8050 0 : for (int i = 0; i < dim0; ++i) {
8051 :
8052 0 : value[i] = Tag::parseTag(t.nextToken());
8053 :
8054 : }
8055 0 : if (t.hasMoreTokens()) {
8056 0 : throw ConversionException("Error: Field \"" +
8057 0 : name + "\": Syntax error.", tableName);
8058 : }
8059 0 : return value;
8060 0 : } catch (const NumberFormatException &e) {
8061 0 : throw ConversionException("Error: Field \"" +
8062 0 : name + "\": " + e.getMessage(), tableName);
8063 0 : } catch (const OutOfBoundsException &e) {
8064 0 : throw ConversionException("Error: Field \"" +
8065 0 : name + "\": Unexpected end of string", tableName);
8066 0 : } catch (const TagFormatException &e) {
8067 0 : throw ConversionException("Error: Field \"" +
8068 0 : name + "\": " + e.getMessage(), tableName);
8069 0 : }
8070 0 : }
8071 :
8072 0 : vector< vector<Tag> > Parser::get2DTag(const string &name, const string &tableName, const string &xmlDoc)
8073 : {
8074 0 : string xmlField = Parser::getField(xmlDoc,name);
8075 0 : if (xmlField.length() == 0) {
8076 0 : throw ConversionException("Error: Field \"" +
8077 0 : name + "\": Invalid XML syntax", tableName);
8078 : }
8079 0 : StringTokenizer t(xmlField," ");
8080 : try {
8081 0 : int ndim = Integer::parseInt(t.nextToken());
8082 0 : if (ndim != 2) {
8083 0 : throw ConversionException("Error: Field \"" +
8084 0 : name + "\": Invalid array format", tableName);
8085 : }
8086 0 : int dim0 = Integer::parseInt(t.nextToken());
8087 0 : int dim1 = Integer::parseInt(t.nextToken());
8088 0 : vector< vector<Tag> > value;
8089 :
8090 0 : if (dim0 == 0 || dim1 == 0)
8091 0 : return value;
8092 :
8093 0 : vector<Tag> v_aux;
8094 0 : for (int i = 0; i < dim0; ++i) {
8095 0 : v_aux.clear();
8096 0 : for (int j = 0; j < dim1; ++j) {
8097 :
8098 0 : v_aux.push_back(Tag::parseTag(t.nextToken()));
8099 :
8100 : }
8101 0 : value.push_back(v_aux);
8102 : }
8103 0 : if (t.hasMoreTokens()) {
8104 0 : throw ConversionException("Error: Field \"" +
8105 0 : name + "\": Syntax error.", tableName);
8106 : }
8107 0 : return value;
8108 0 : } catch (const NumberFormatException &e) {
8109 0 : throw ConversionException("Error: Field \"" +
8110 0 : name + "\": " + e.getMessage(), tableName);
8111 0 : } catch (const OutOfBoundsException &e) {
8112 0 : throw ConversionException("Error: Field \"" +
8113 0 : name + "\": Unexpected end of string", tableName);
8114 0 : } catch (const TagFormatException &e) {
8115 0 : throw ConversionException("Error: Field \"" +
8116 0 : name + "\": " + e.getMessage(), tableName);
8117 0 : }
8118 0 : }
8119 :
8120 0 : vector< vector< vector<Tag> > > Parser::get3DTag(const string &name, const string &tableName, const string &xmlDoc)
8121 : {
8122 0 : string xmlField = Parser::getField(xmlDoc,name);
8123 0 : if (xmlField.length() == 0) {
8124 0 : throw ConversionException("Error: Field \"" +
8125 0 : name + "\": Invalid XML syntax", tableName);
8126 : }
8127 0 : StringTokenizer t(xmlField," ");
8128 : try {
8129 0 : int ndim = Integer::parseInt(t.nextToken());
8130 0 : if (ndim != 3) {
8131 0 : throw ConversionException("Error: Field \"" +
8132 0 : name + "\": Invalid array format", tableName);
8133 : }
8134 0 : int dim0 = Integer::parseInt(t.nextToken());
8135 0 : int dim1 = Integer::parseInt(t.nextToken());
8136 0 : int dim2 = Integer::parseInt(t.nextToken());
8137 0 : vector< vector< vector<Tag> > > value ;
8138 0 : if (dim0 == 0 || dim1 == 0 || dim2 == 0)
8139 0 : return value;
8140 :
8141 0 : vector<vector<Tag> > vv_aux;
8142 0 : vector<Tag> v_aux;
8143 0 : for (int i = 0; i < dim0; ++i) {
8144 0 : vv_aux.clear();
8145 0 : for (int j = 0; j < dim1; ++j) {
8146 0 : v_aux.clear();
8147 0 : for (int k = 0; k < dim2; ++k) {
8148 :
8149 0 : v_aux.push_back(Tag::parseTag(t.nextToken()));
8150 :
8151 : }
8152 0 : vv_aux.push_back(v_aux);
8153 : }
8154 0 : value.push_back(vv_aux);
8155 : }
8156 0 : if (t.hasMoreTokens()) {
8157 0 : throw ConversionException("Error: Field \"" +
8158 0 : name + "\": Syntax error.", tableName);
8159 : }
8160 0 : return value;
8161 0 : } catch (const NumberFormatException &e) {
8162 0 : throw ConversionException("Error: Field \"" +
8163 0 : name + "\": " + e.getMessage(), tableName);
8164 0 : } catch (const OutOfBoundsException &e) {
8165 0 : throw ConversionException("Error: Field \"" +
8166 0 : name + "\": Unexpected end of string", tableName);
8167 0 : } catch (const TagFormatException &e) {
8168 0 : throw ConversionException("Error: Field \"" +
8169 0 : name + "\": " + e.getMessage(), tableName);
8170 0 : }
8171 0 : }
8172 :
8173 0 : vector< vector< vector< vector<Tag> > > >Parser::get4DTag(const string &name, const string &tableName, const string &xmlDoc)
8174 : {
8175 0 : string xmlField = Parser::getField(xmlDoc,name);
8176 0 : if (xmlField.length() == 0) {
8177 0 : throw ConversionException("Error: Field \"" +
8178 0 : name + "\": Invalid XML syntax", tableName);
8179 : }
8180 0 : StringTokenizer t(xmlField," ");
8181 : try {
8182 0 : int ndim = Integer::parseInt(t.nextToken());
8183 0 : if (ndim != 4) {
8184 0 : throw ConversionException("Error: Field \"" +
8185 0 : name + "\": Invalid array format", tableName);
8186 : }
8187 0 : int dim0 = Integer::parseInt(t.nextToken());
8188 0 : int dim1 = Integer::parseInt(t.nextToken());
8189 0 : int dim2 = Integer::parseInt(t.nextToken());
8190 0 : int dim3 = Integer::parseInt(t.nextToken());
8191 0 : vector<vector< vector< vector<Tag> > > >value;
8192 0 : if (dim0 == 0 || dim1 == 0 || dim2 == 0 || dim3 == 0)
8193 0 : return value;
8194 :
8195 0 : vector<vector<vector<Tag> > >vvv_aux;
8196 0 : vector<vector< Tag> > vv_aux;
8197 0 : vector<Tag> v_aux;
8198 0 : for (int i = 0; i < dim0; ++i) {
8199 0 : vvv_aux.clear();
8200 0 : for (int j = 0; j < dim1; ++j) {
8201 0 : vv_aux.clear();
8202 0 : for (int k = 0; k < dim2; ++k) {
8203 0 : v_aux.clear();
8204 0 : for (int l = 0; l < dim3; l++) {
8205 :
8206 0 : v_aux.push_back(Tag::parseTag(t.nextToken()));
8207 :
8208 : }
8209 0 : vv_aux.push_back(v_aux);
8210 : }
8211 0 : vvv_aux.push_back(vv_aux);
8212 : }
8213 0 : value.push_back(vvv_aux);
8214 : }
8215 0 : if (t.hasMoreTokens()) {
8216 0 : throw ConversionException("Error: Field \"" +
8217 0 : name + "\": Syntax error.", tableName);
8218 : }
8219 0 : return value;
8220 0 : } catch (const NumberFormatException &e) {
8221 0 : throw ConversionException("Error: Field \"" +
8222 0 : name + "\": " + e.getMessage(), tableName);
8223 0 : } catch (const OutOfBoundsException &e) {
8224 0 : throw ConversionException("Error: Field \"" +
8225 0 : name + "\": Unexpected end of string", tableName);
8226 0 : } catch (const TagFormatException &e) {
8227 0 : throw ConversionException("Error: Field \"" +
8228 0 : name + "\": " + e.getMessage(), tableName);
8229 0 : }
8230 0 : }
8231 :
8232 :
8233 :
8234 :
8235 :
8236 : // Field type: Temperature
8237 :
8238 0 : void Parser::toXML(Temperature data, const string &name, string &buf) {
8239 0 : buf.append("<" + name + "> ");
8240 :
8241 0 : buf.append(data.toString());
8242 :
8243 0 : buf.append(" </" + name + "> ");
8244 0 : }
8245 :
8246 :
8247 :
8248 :
8249 0 : void Parser::toXML(vector<Temperature> data, const string &name, string &buf) {
8250 0 : buf.append("<" + name + "> ");
8251 0 : buf.append("1 ");
8252 0 : buf.append(Integer::toString(data.size()));
8253 0 : buf.append(" ");
8254 0 : for (unsigned int i = 0; i < data.size(); ++i) {
8255 :
8256 0 : buf.append(data[i].toString());
8257 :
8258 0 : buf.append(" ");
8259 : }
8260 0 : buf.append(" </" + name + "> ");
8261 0 : }
8262 :
8263 0 : void Parser::toXML(vector< vector<Temperature> > data, const string &name, string &buf) {
8264 0 : buf.append("<" + name + "> ");
8265 0 : buf.append("2 ");
8266 0 : buf.append(Integer::toString(data.size()));
8267 0 : buf.append(" ");
8268 0 : buf.append(Integer::toString(data[0].size()));
8269 0 : buf.append(" ");
8270 0 : for (unsigned int i = 0; i < data.size(); ++i) {
8271 0 : for (unsigned int j = 0; j < data[i].size(); ++j) {
8272 :
8273 0 : buf.append(data[i][j].toString());
8274 :
8275 0 : buf.append(" ");
8276 : }
8277 : }
8278 0 : buf.append(" </" + name + "> ");
8279 0 : }
8280 :
8281 0 : void Parser::toXML(vector< vector< vector<Temperature> > > data, const string &name, string &buf) {
8282 0 : buf.append("<" + name + "> ");
8283 0 : buf.append("3 ");
8284 0 : buf.append(Integer::toString(data.size()));
8285 0 : buf.append(" ");
8286 0 : buf.append(Integer::toString(data[0].size()));
8287 0 : buf.append(" ");
8288 0 : buf.append(Integer::toString(data[0][0].size()));
8289 0 : buf.append(" ");
8290 0 : for (unsigned int i = 0; i < data.size(); ++i) {
8291 0 : for (unsigned int j = 0; j < data[i].size(); ++j) {
8292 0 : for (unsigned int k = 0; k < data[i][j].size(); ++k) {
8293 :
8294 0 : buf.append(data[i][j][k].toString());
8295 :
8296 0 : buf.append(" ");
8297 : }
8298 : }
8299 : }
8300 0 : buf.append(" </" + name + "> ");
8301 0 : }
8302 :
8303 0 : void Parser::toXML(vector<vector< vector< vector<Temperature> > > >data, const string &name, string &buf) {
8304 0 : buf.append("<" + name + "> ");
8305 0 : buf.append("4 ");
8306 0 : buf.append(Integer::toString(data.size()));
8307 0 : buf.append(" ");
8308 0 : buf.append(Integer::toString(data[0].size()));
8309 0 : buf.append(" ");
8310 0 : buf.append(Integer::toString(data[0][0].size()));
8311 0 : buf.append(" ");
8312 0 : buf.append(Integer::toString(data[0][0][0].size()));
8313 0 : buf.append(" ");
8314 0 : for (unsigned int i = 0; i < data.size(); ++i) {
8315 0 : for (unsigned int j = 0; j < data[i].size(); ++j) {
8316 0 : for (unsigned int k = 0; k < data[i][j].size(); ++k) {
8317 0 : for (unsigned int l = 0; l < data[i][j][k].size(); l++) {
8318 :
8319 0 : buf.append(data[i][j][k][l].toString());
8320 :
8321 0 : buf.append(" ");
8322 : }
8323 : }
8324 : }
8325 : }
8326 0 : buf.append(" </" + name + "> ");
8327 0 : }
8328 :
8329 :
8330 :
8331 :
8332 :
8333 :
8334 0 : Temperature Parser::getTemperature(const string &name, const string &tableName, const string &xmlDoc)
8335 : {
8336 0 : string xmlField = Parser::getField(xmlDoc,name);
8337 0 : if (xmlField.length() == 0)
8338 0 : throw ConversionException("Error: Missing field \"" +
8339 0 : name + "\" or invalid syntax",tableName);
8340 :
8341 : try {
8342 0 : return Temperature (xmlField);
8343 : }
8344 0 : catch (const InvalidArgumentException &e) {
8345 0 : throw ConversionException("Error: message was '"+
8346 0 : e.getMessage()+
8347 : "'",
8348 0 : tableName);
8349 0 : }
8350 :
8351 0 : }
8352 :
8353 0 : vector<Temperature> Parser::get1DTemperature(const string &name, const string &tableName, const string &xmlDoc)
8354 : {
8355 0 : string xmlField = Parser::getField(xmlDoc,name);
8356 0 : if (xmlField.length() == 0) {
8357 0 : throw ConversionException("Error: Field \"" +
8358 0 : name + "\": Invalid XML syntax", tableName);
8359 : }
8360 0 : StringTokenizer t(xmlField," ");
8361 : try {
8362 0 : int ndim = Integer::parseInt(t.nextToken());
8363 0 : if (ndim != 1) {
8364 0 : throw ConversionException("Error: Field \"" +
8365 0 : name + "\": Invalid array format", tableName);
8366 : }
8367 0 : int dim0 = Integer::parseInt(t.nextToken());
8368 0 : vector<Temperature> value (dim0);
8369 0 : if (dim0 == 0)
8370 0 : return value;
8371 0 : for (int i = 0; i < dim0; ++i) {
8372 :
8373 0 : value[i] = Temperature::getTemperature(t);
8374 :
8375 : }
8376 0 : if (t.hasMoreTokens()) {
8377 0 : throw ConversionException("Error: Field \"" +
8378 0 : name + "\": Syntax error.", tableName);
8379 : }
8380 0 : return value;
8381 0 : } catch (const NumberFormatException &e) {
8382 0 : throw ConversionException("Error: Field \"" +
8383 0 : name + "\": " + e.getMessage(), tableName);
8384 0 : } catch (const OutOfBoundsException &e) {
8385 0 : throw ConversionException("Error: Field \"" +
8386 0 : name + "\": Unexpected end of string", tableName);
8387 0 : } catch (const TagFormatException &e) {
8388 0 : throw ConversionException("Error: Field \"" +
8389 0 : name + "\": " + e.getMessage(), tableName);
8390 0 : }
8391 0 : }
8392 :
8393 0 : vector< vector<Temperature> > Parser::get2DTemperature(const string &name, const string &tableName, const string &xmlDoc)
8394 : {
8395 0 : string xmlField = Parser::getField(xmlDoc,name);
8396 0 : if (xmlField.length() == 0) {
8397 0 : throw ConversionException("Error: Field \"" +
8398 0 : name + "\": Invalid XML syntax", tableName);
8399 : }
8400 0 : StringTokenizer t(xmlField," ");
8401 : try {
8402 0 : int ndim = Integer::parseInt(t.nextToken());
8403 0 : if (ndim != 2) {
8404 0 : throw ConversionException("Error: Field \"" +
8405 0 : name + "\": Invalid array format", tableName);
8406 : }
8407 0 : int dim0 = Integer::parseInt(t.nextToken());
8408 0 : int dim1 = Integer::parseInt(t.nextToken());
8409 0 : vector< vector<Temperature> > value;
8410 :
8411 0 : if (dim0 == 0 || dim1 == 0)
8412 0 : return value;
8413 :
8414 0 : vector<Temperature> v_aux;
8415 0 : for (int i = 0; i < dim0; ++i) {
8416 0 : v_aux.clear();
8417 0 : for (int j = 0; j < dim1; ++j) {
8418 :
8419 0 : v_aux.push_back(Temperature::getTemperature(t));
8420 :
8421 : }
8422 0 : value.push_back(v_aux);
8423 : }
8424 0 : if (t.hasMoreTokens()) {
8425 0 : throw ConversionException("Error: Field \"" +
8426 0 : name + "\": Syntax error.", tableName);
8427 : }
8428 0 : return value;
8429 0 : } catch (const NumberFormatException &e) {
8430 0 : throw ConversionException("Error: Field \"" +
8431 0 : name + "\": " + e.getMessage(), tableName);
8432 0 : } catch (const OutOfBoundsException &e) {
8433 0 : throw ConversionException("Error: Field \"" +
8434 0 : name + "\": Unexpected end of string", tableName);
8435 0 : } catch (const TagFormatException &e) {
8436 0 : throw ConversionException("Error: Field \"" +
8437 0 : name + "\": " + e.getMessage(), tableName);
8438 0 : }
8439 0 : }
8440 :
8441 0 : vector< vector< vector<Temperature> > > Parser::get3DTemperature(const string &name, const string &tableName, const string &xmlDoc)
8442 : {
8443 0 : string xmlField = Parser::getField(xmlDoc,name);
8444 0 : if (xmlField.length() == 0) {
8445 0 : throw ConversionException("Error: Field \"" +
8446 0 : name + "\": Invalid XML syntax", tableName);
8447 : }
8448 0 : StringTokenizer t(xmlField," ");
8449 : try {
8450 0 : int ndim = Integer::parseInt(t.nextToken());
8451 0 : if (ndim != 3) {
8452 0 : throw ConversionException("Error: Field \"" +
8453 0 : name + "\": Invalid array format", tableName);
8454 : }
8455 0 : int dim0 = Integer::parseInt(t.nextToken());
8456 0 : int dim1 = Integer::parseInt(t.nextToken());
8457 0 : int dim2 = Integer::parseInt(t.nextToken());
8458 0 : vector< vector< vector<Temperature> > > value ;
8459 0 : if (dim0 == 0 || dim1 == 0 || dim2 == 0)
8460 0 : return value;
8461 :
8462 0 : vector<vector<Temperature> > vv_aux;
8463 0 : vector<Temperature> v_aux;
8464 0 : for (int i = 0; i < dim0; ++i) {
8465 0 : vv_aux.clear();
8466 0 : for (int j = 0; j < dim1; ++j) {
8467 0 : v_aux.clear();
8468 0 : for (int k = 0; k < dim2; ++k) {
8469 :
8470 0 : v_aux.push_back(Temperature::getTemperature(t));
8471 :
8472 : }
8473 0 : vv_aux.push_back(v_aux);
8474 : }
8475 0 : value.push_back(vv_aux);
8476 : }
8477 0 : if (t.hasMoreTokens()) {
8478 0 : throw ConversionException("Error: Field \"" +
8479 0 : name + "\": Syntax error.", tableName);
8480 : }
8481 0 : return value;
8482 0 : } catch (const NumberFormatException &e) {
8483 0 : throw ConversionException("Error: Field \"" +
8484 0 : name + "\": " + e.getMessage(), tableName);
8485 0 : } catch (const OutOfBoundsException &e) {
8486 0 : throw ConversionException("Error: Field \"" +
8487 0 : name + "\": Unexpected end of string", tableName);
8488 0 : } catch (const TagFormatException &e) {
8489 0 : throw ConversionException("Error: Field \"" +
8490 0 : name + "\": " + e.getMessage(), tableName);
8491 0 : }
8492 0 : }
8493 :
8494 0 : vector< vector< vector< vector<Temperature> > > >Parser::get4DTemperature(const string &name, const string &tableName, const string &xmlDoc)
8495 : {
8496 0 : string xmlField = Parser::getField(xmlDoc,name);
8497 0 : if (xmlField.length() == 0) {
8498 0 : throw ConversionException("Error: Field \"" +
8499 0 : name + "\": Invalid XML syntax", tableName);
8500 : }
8501 0 : StringTokenizer t(xmlField," ");
8502 : try {
8503 0 : int ndim = Integer::parseInt(t.nextToken());
8504 0 : if (ndim != 4) {
8505 0 : throw ConversionException("Error: Field \"" +
8506 0 : name + "\": Invalid array format", tableName);
8507 : }
8508 0 : int dim0 = Integer::parseInt(t.nextToken());
8509 0 : int dim1 = Integer::parseInt(t.nextToken());
8510 0 : int dim2 = Integer::parseInt(t.nextToken());
8511 0 : int dim3 = Integer::parseInt(t.nextToken());
8512 0 : vector<vector< vector< vector<Temperature> > > >value;
8513 0 : if (dim0 == 0 || dim1 == 0 || dim2 == 0 || dim3 == 0)
8514 0 : return value;
8515 :
8516 0 : vector<vector<vector<Temperature> > >vvv_aux;
8517 0 : vector<vector< Temperature> > vv_aux;
8518 0 : vector<Temperature> v_aux;
8519 0 : for (int i = 0; i < dim0; ++i) {
8520 0 : vvv_aux.clear();
8521 0 : for (int j = 0; j < dim1; ++j) {
8522 0 : vv_aux.clear();
8523 0 : for (int k = 0; k < dim2; ++k) {
8524 0 : v_aux.clear();
8525 0 : for (int l = 0; l < dim3; l++) {
8526 :
8527 0 : v_aux.push_back(Temperature::getTemperature(t));
8528 :
8529 : }
8530 0 : vv_aux.push_back(v_aux);
8531 : }
8532 0 : vvv_aux.push_back(vv_aux);
8533 : }
8534 0 : value.push_back(vvv_aux);
8535 : }
8536 0 : if (t.hasMoreTokens()) {
8537 0 : throw ConversionException("Error: Field \"" +
8538 0 : name + "\": Syntax error.", tableName);
8539 : }
8540 0 : return value;
8541 0 : } catch (const NumberFormatException &e) {
8542 0 : throw ConversionException("Error: Field \"" +
8543 0 : name + "\": " + e.getMessage(), tableName);
8544 0 : } catch (const OutOfBoundsException &e) {
8545 0 : throw ConversionException("Error: Field \"" +
8546 0 : name + "\": Unexpected end of string", tableName);
8547 0 : } catch (const TagFormatException &e) {
8548 0 : throw ConversionException("Error: Field \"" +
8549 0 : name + "\": " + e.getMessage(), tableName);
8550 0 : }
8551 0 : }
8552 :
8553 :
8554 :
8555 :
8556 :
8557 :
8558 : // Generated methods for conversion to and from XML
8559 : // data representations with a Base64 encoded content.
8560 : // The methods are generated only for 1, 2 and 3 dimensional arrays
8561 : // of data whose BasicType have a non null BaseWrapperName.
8562 : // In practice this represents data whose type is one of the basic numeric types
8563 : // or is built upon a basic numeric type.
8564 :
8565 :
8566 :
8567 :
8568 :
8569 :
8570 0 : void Parser::toXMLBase64(vector<int> data, const string &name, string &buf){
8571 0 : stringstream oss(stringstream::out | stringstream::binary);
8572 0 : string encoded;
8573 :
8574 0 : buf.append("<" + name + "> ");
8575 0 : int ndim = 1;
8576 0 : int dim1 = data.size();
8577 :
8578 0 : oss.write((char *)&ndim, sizeof(int));
8579 0 : oss.write((char *)&dim1, sizeof(dim1));
8580 :
8581 0 : for (unsigned int i = 0; i < data.size(); i++) {
8582 :
8583 0 : int v = data.at(i);
8584 :
8585 0 : oss.write((char *) &v, sizeof(v));
8586 : }
8587 :
8588 0 : Base64 b64;
8589 0 : b64.encode(oss.str(), encoded, false);
8590 0 : buf.append(encoded);
8591 0 : buf.append(" </" + name + "> ");
8592 0 : }
8593 :
8594 :
8595 0 : void Parser::toXMLBase64(vector< vector<int> > data, const string &name, string &buf){
8596 0 : stringstream oss(stringstream::out | stringstream::binary);
8597 0 : string encoded;
8598 :
8599 0 : buf.append("<" + name + "> ");
8600 0 : int ndim = 2;
8601 0 : int dim1 = data.size();
8602 0 : int dim2 = data.at(0).size();
8603 :
8604 0 : oss.write((char *)&ndim, sizeof(int));
8605 0 : oss.write((char *)&dim1, sizeof(dim1));
8606 0 : oss.write((char *)&dim2, sizeof(dim2));
8607 0 : for (unsigned int i = 0; i < data.size(); i++)
8608 0 : for (unsigned int j = 0; j < data.at(0).size(); j++) {
8609 :
8610 0 : int v = data.at(i).at(j);
8611 :
8612 0 : oss.write((char *) &v, sizeof(v));
8613 : }
8614 :
8615 0 : Base64 b64;
8616 0 : b64.encode(oss.str(), encoded, false);
8617 0 : buf.append(encoded);
8618 0 : buf.append(" </" + name + "> ")
8619 : ;
8620 0 : }
8621 :
8622 :
8623 0 : void Parser::toXMLBase64(vector< vector< vector<int> > > data, const string &name, string &buf){
8624 0 : stringstream oss(stringstream::out | stringstream::binary);
8625 0 : string encoded;
8626 :
8627 0 : buf.append("<" + name + "> ");
8628 0 : int ndim = 3;
8629 0 : int dim1 = data.size();
8630 0 : int dim2 = data.at(0).size();
8631 0 : int dim3 = data.at(0).at(0).size();
8632 :
8633 0 : oss.write((char *)&ndim, sizeof(int));
8634 0 : oss.write((char *)&dim1, sizeof(dim1));
8635 0 : oss.write((char *)&dim2, sizeof(dim2));
8636 0 : oss.write((char *)&dim3, sizeof(dim3));
8637 0 : for (unsigned int i = 0; i < data.size(); i++)
8638 0 : for (unsigned int j = 0; j < data.at(0).size(); j++)
8639 0 : for (unsigned int k = 0; k < data.at(0).at(0).size(); k++){
8640 :
8641 0 : int v = data.at(i).at(j).at(k);
8642 :
8643 0 : oss.write((char *) &v, sizeof(v));
8644 : }
8645 :
8646 0 : Base64 b64;
8647 0 : b64.encode(oss.str(), encoded, false);
8648 0 : buf.append(encoded);
8649 0 : buf.append(" </" + name + "> ")
8650 : ;
8651 0 : }
8652 :
8653 :
8654 0 : void Parser::toXMLBase64(vector<vector< vector< vector<int> > > >data, const string &name, string &buf){
8655 0 : stringstream oss(stringstream::out | stringstream::binary);
8656 0 : string encoded;
8657 :
8658 0 : buf.append("<" + name + "> ");
8659 0 : int ndim = 3;
8660 0 : int dim1 = data.size();
8661 0 : int dim2 = data.at(0).size();
8662 0 : int dim3 = data.at(0).at(0).size();
8663 0 : int dim4 = data.at(0).at(0).at(0).size();
8664 :
8665 0 : oss.write((char *)&ndim, sizeof(int));
8666 0 : oss.write((char *)&dim1, sizeof(dim1));
8667 0 : oss.write((char *)&dim2, sizeof(dim2));
8668 0 : oss.write((char *)&dim3, sizeof(dim3));
8669 0 : oss.write((char *)&dim4, sizeof(dim4));
8670 0 : for (unsigned int i = 0; i < data.size(); i++)
8671 0 : for (unsigned int j = 0; j < data.at(0).size(); j++)
8672 0 : for (unsigned int k = 0; k < data.at(0).at(0).size(); k++)
8673 0 : for (unsigned int l = 0; l < data.at(0).at(0).at(0).size(); l++){
8674 :
8675 0 : int v = data.at(i).at(j).at(k).at(l);
8676 :
8677 0 : oss.write((char *) &v, sizeof(v));
8678 : }
8679 :
8680 0 : Base64 b64;
8681 0 : b64.encode(oss.str(), encoded, false);
8682 0 : buf.append(encoded);
8683 0 : buf.append(" </" + name + "> ")
8684 : ;
8685 0 : }
8686 :
8687 :
8688 : #ifndef Int_CPP
8689 :
8690 : #define Int_CPP int
8691 :
8692 : #endif
8693 :
8694 :
8695 : #define TRYREAD(_stream_, _value_) _stream_.read((char*) &(_value_), sizeof(_value_)); \
8696 : if (_stream_.bad()) throw ConversionException("I/O error during read of " + name, tableName);
8697 :
8698 :
8699 0 : vector<int>& Parser::get1DIntegerFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector<int>& attribute)
8700 : {
8701 0 : string xmlField = Parser::getField(xmlDoc,name);
8702 0 : if (xmlField.length() == 0) {
8703 0 : throw ConversionException("Error: Field \"" +
8704 0 : name + "\": Invalid XML syntax", tableName);
8705 : }
8706 :
8707 0 : string decodedString;
8708 0 : Base64 b64;
8709 0 : b64.decode(xmlField, decodedString);
8710 :
8711 0 : stringstream iss(stringstream::in | stringstream::binary);
8712 0 : iss.str(decodedString);
8713 :
8714 0 : attribute.clear();
8715 :
8716 0 : unsigned int ndim = 0;
8717 : //iss.read((char *)&ndim, sizeof(ndim));
8718 0 : TRYREAD(iss,ndim);
8719 :
8720 0 : unsigned int dim1 = 0;
8721 : //iss.read((char *)&dim1, sizeof(dim1));
8722 0 : TRYREAD(iss,dim1);
8723 0 : if (ndim != 1) {
8724 0 : throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 1.", tableName);
8725 : }
8726 :
8727 0 : attribute.reserve(dim1);
8728 :
8729 : Int_CPP v;
8730 0 : for (unsigned int i = 0; i < dim1; i++) {
8731 : //iss.read((char*) &v, sizeof(v));
8732 0 : TRYREAD(iss,v);
8733 :
8734 0 : attribute.push_back(v);
8735 :
8736 : }
8737 0 : return attribute;
8738 0 : }
8739 :
8740 :
8741 0 : vector <vector<int> >& Parser::get2DIntegerFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector <vector<int> >& attribute)
8742 : {
8743 0 : string xmlField = Parser::getField(xmlDoc,name);
8744 0 : if (xmlField.length() == 0) {
8745 0 : throw ConversionException("Error: Field \"" +
8746 0 : name + "\": Invalid XML syntax", tableName);
8747 : }
8748 :
8749 0 : string decodedString;
8750 0 : Base64 b64;
8751 0 : b64.decode(xmlField, decodedString);
8752 :
8753 0 : stringstream iss(stringstream::in | stringstream::binary);
8754 0 : iss.str(decodedString);
8755 :
8756 0 : attribute.clear();
8757 :
8758 0 : unsigned int ndim = 0;
8759 : //iss.read((char *)&ndim, sizeof(ndim));
8760 0 : TRYREAD(iss,ndim);
8761 :
8762 0 : if (ndim != 2) {
8763 0 : throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 2.", tableName);
8764 : }
8765 :
8766 0 : unsigned int dim1 = 0;
8767 : //iss.read((char *)&dim1, sizeof(dim1));
8768 0 : TRYREAD(iss,dim1);
8769 :
8770 0 : unsigned int dim2 = 0;
8771 : //iss.read((char *)&dim2, sizeof(dim2));
8772 0 : TRYREAD(iss,dim2);
8773 :
8774 0 : attribute.reserve(dim1);
8775 :
8776 : Int_CPP v;
8777 0 : vector<int> aux2;
8778 0 : aux2.reserve(dim2);
8779 0 : for (unsigned int i = 0; i < dim1; i++) {
8780 0 : aux2.clear();
8781 0 : for (unsigned int j = 0; j < dim2; j++) {
8782 : //iss.read((char*) &v, sizeof(v));
8783 0 : TRYREAD(iss,v);
8784 :
8785 0 : aux2.push_back(v);
8786 :
8787 : }
8788 0 : attribute.push_back(aux2);
8789 : }
8790 0 : return attribute;
8791 0 : }
8792 :
8793 :
8794 0 : vector <vector <vector<int> > >& Parser::get3DIntegerFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector <vector <vector<int> > >& attribute)
8795 : {
8796 0 : string xmlField = Parser::getField(xmlDoc,name);
8797 0 : if (xmlField.length() == 0) {
8798 0 : throw ConversionException("Error: Field \"" +
8799 0 : name + "\": Invalid XML syntax", tableName);
8800 : }
8801 :
8802 0 : string decodedString;
8803 0 : Base64 b64;
8804 0 : b64.decode(xmlField, decodedString);
8805 :
8806 0 : stringstream iss(stringstream::in | stringstream::binary);
8807 0 : iss.str(decodedString);
8808 :
8809 0 : attribute.clear();
8810 :
8811 0 : unsigned int ndim = 0;
8812 : //iss.read((char *)&ndim, sizeof(ndim));
8813 0 : TRYREAD(iss, ndim);
8814 0 : if (ndim != 3) {
8815 0 : throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 3.", tableName);
8816 : }
8817 :
8818 0 : unsigned int dim1 = 0;
8819 : //iss.read((char *)&dim1, sizeof(dim1));
8820 0 : TRYREAD(iss,dim1);
8821 :
8822 0 : unsigned int dim2 = 0;
8823 : //iss.read((char *)&dim2, sizeof(dim2));
8824 0 : TRYREAD(iss,dim2);
8825 :
8826 0 : unsigned int dim3 = 0;
8827 : //iss.read((char *)&dim2, sizeof(dim3));
8828 0 : TRYREAD(iss,dim3);
8829 :
8830 0 : attribute.reserve(dim1);
8831 :
8832 : Int_CPP v;
8833 0 : vector <vector<int> > aux2;
8834 0 : vector<int> aux3;
8835 0 : aux2.reserve(dim2);
8836 0 : aux3.reserve(dim3);
8837 :
8838 0 : for (unsigned int i = 0; i < dim1; i++) {
8839 0 : aux2.clear();
8840 0 : for (unsigned int j = 0; j < dim2; j++) {
8841 0 : aux3.clear();
8842 0 : for (unsigned int k = 0; k < dim3; k++) {
8843 : //iss.read((char*) &v, sizeof(v));
8844 0 : TRYREAD(iss,v);
8845 :
8846 0 : aux3.push_back(v);
8847 :
8848 : }
8849 0 : aux2.push_back(aux3);
8850 : }
8851 0 : attribute.push_back(aux2);
8852 : }
8853 0 : return attribute;
8854 : ;
8855 0 : }
8856 :
8857 :
8858 0 : vector <vector <vector <vector<int> > > >& Parser::get4DIntegerFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector< vector <vector <vector<int> > > >& attribute)
8859 : {
8860 0 : string xmlField = Parser::getField(xmlDoc,name);
8861 0 : if (xmlField.length() == 0) {
8862 0 : throw ConversionException("Error: Field \"" +
8863 0 : name + "\": Invalid XML syntax", tableName);
8864 : }
8865 :
8866 0 : string decodedString;
8867 0 : Base64 b64;
8868 0 : b64.decode(xmlField, decodedString);
8869 :
8870 0 : stringstream iss(stringstream::in | stringstream::binary);
8871 0 : iss.str(decodedString);
8872 :
8873 0 : attribute.clear();
8874 :
8875 0 : unsigned int ndim = 0;
8876 : //iss.read((char *)&ndim, sizeof(ndim));
8877 0 : TRYREAD(iss, ndim);
8878 0 : if (ndim != 4) {
8879 0 : throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 4.", tableName);
8880 : }
8881 :
8882 0 : unsigned int dim1 = 0;
8883 : //iss.read((char *)&dim1, sizeof(dim1));
8884 0 : TRYREAD(iss,dim1);
8885 :
8886 0 : unsigned int dim2 = 0;
8887 : //iss.read((char *)&dim2, sizeof(dim2));
8888 0 : TRYREAD(iss,dim2);
8889 :
8890 0 : unsigned int dim3 = 0;
8891 : //iss.read((char *)&dim2, sizeof(dim3));
8892 0 : TRYREAD(iss,dim3);
8893 :
8894 0 : unsigned int dim4 = 0;
8895 : //iss.read((char *)&dim2, sizeof(dim3));
8896 0 : TRYREAD(iss,dim3);
8897 :
8898 0 : attribute.reserve(dim1);
8899 :
8900 : Int_CPP v;
8901 0 : vector <vector <vector<int> > > aux2;
8902 0 : vector <vector<int> > aux3;
8903 0 : vector<int> aux4;
8904 0 : aux2.reserve(dim2);
8905 0 : aux3.reserve(dim3);
8906 0 : aux4.reserve(dim4);
8907 :
8908 0 : for (unsigned int i = 0; i < dim1; i++) {
8909 0 : aux2.clear();
8910 0 : for (unsigned int j = 0; j < dim2; j++) {
8911 0 : aux3.clear();
8912 0 : for (unsigned int k = 0; k < dim3; k++) {
8913 0 : aux4.clear();
8914 0 : for (unsigned int l = 0; l < dim4; l++) {
8915 : //iss.read((char*) &v, sizeof(v));
8916 0 : TRYREAD(iss,v);
8917 :
8918 0 : aux4.push_back(v);
8919 :
8920 : }
8921 0 : aux3.push_back(aux4);
8922 : }
8923 0 : aux2.push_back(aux3);
8924 : }
8925 0 : attribute.push_back(aux2);
8926 : }
8927 0 : return attribute;
8928 : ;
8929 0 : }
8930 :
8931 :
8932 :
8933 :
8934 :
8935 :
8936 :
8937 0 : void Parser::toXMLBase64(vector<short> data, const string &name, string &buf){
8938 0 : stringstream oss(stringstream::out | stringstream::binary);
8939 0 : string encoded;
8940 :
8941 0 : buf.append("<" + name + "> ");
8942 0 : int ndim = 1;
8943 0 : int dim1 = data.size();
8944 :
8945 0 : oss.write((char *)&ndim, sizeof(int));
8946 0 : oss.write((char *)&dim1, sizeof(dim1));
8947 :
8948 0 : for (unsigned int i = 0; i < data.size(); i++) {
8949 :
8950 0 : short v = data.at(i);
8951 :
8952 0 : oss.write((char *) &v, sizeof(v));
8953 : }
8954 :
8955 0 : Base64 b64;
8956 0 : b64.encode(oss.str(), encoded, false);
8957 0 : buf.append(encoded);
8958 0 : buf.append(" </" + name + "> ");
8959 0 : }
8960 :
8961 :
8962 0 : void Parser::toXMLBase64(vector< vector<short> > data, const string &name, string &buf){
8963 0 : stringstream oss(stringstream::out | stringstream::binary);
8964 0 : string encoded;
8965 :
8966 0 : buf.append("<" + name + "> ");
8967 0 : int ndim = 2;
8968 0 : int dim1 = data.size();
8969 0 : int dim2 = data.at(0).size();
8970 :
8971 0 : oss.write((char *)&ndim, sizeof(int));
8972 0 : oss.write((char *)&dim1, sizeof(dim1));
8973 0 : oss.write((char *)&dim2, sizeof(dim2));
8974 0 : for (unsigned int i = 0; i < data.size(); i++)
8975 0 : for (unsigned int j = 0; j < data.at(0).size(); j++) {
8976 :
8977 0 : short v = data.at(i).at(j);
8978 :
8979 0 : oss.write((char *) &v, sizeof(v));
8980 : }
8981 :
8982 0 : Base64 b64;
8983 0 : b64.encode(oss.str(), encoded, false);
8984 0 : buf.append(encoded);
8985 0 : buf.append(" </" + name + "> ")
8986 : ;
8987 0 : }
8988 :
8989 :
8990 0 : void Parser::toXMLBase64(vector< vector< vector<short> > > data, const string &name, string &buf){
8991 0 : stringstream oss(stringstream::out | stringstream::binary);
8992 0 : string encoded;
8993 :
8994 0 : buf.append("<" + name + "> ");
8995 0 : int ndim = 3;
8996 0 : int dim1 = data.size();
8997 0 : int dim2 = data.at(0).size();
8998 0 : int dim3 = data.at(0).at(0).size();
8999 :
9000 0 : oss.write((char *)&ndim, sizeof(int));
9001 0 : oss.write((char *)&dim1, sizeof(dim1));
9002 0 : oss.write((char *)&dim2, sizeof(dim2));
9003 0 : oss.write((char *)&dim3, sizeof(dim3));
9004 0 : for (unsigned int i = 0; i < data.size(); i++)
9005 0 : for (unsigned int j = 0; j < data.at(0).size(); j++)
9006 0 : for (unsigned int k = 0; k < data.at(0).at(0).size(); k++){
9007 :
9008 0 : short v = data.at(i).at(j).at(k);
9009 :
9010 0 : oss.write((char *) &v, sizeof(v));
9011 : }
9012 :
9013 0 : Base64 b64;
9014 0 : b64.encode(oss.str(), encoded, false);
9015 0 : buf.append(encoded);
9016 0 : buf.append(" </" + name + "> ")
9017 : ;
9018 0 : }
9019 :
9020 :
9021 0 : void Parser::toXMLBase64(vector<vector< vector< vector<short> > > >data, const string &name, string &buf){
9022 0 : stringstream oss(stringstream::out | stringstream::binary);
9023 0 : string encoded;
9024 :
9025 0 : buf.append("<" + name + "> ");
9026 0 : int ndim = 3;
9027 0 : int dim1 = data.size();
9028 0 : int dim2 = data.at(0).size();
9029 0 : int dim3 = data.at(0).at(0).size();
9030 0 : int dim4 = data.at(0).at(0).at(0).size();
9031 :
9032 0 : oss.write((char *)&ndim, sizeof(int));
9033 0 : oss.write((char *)&dim1, sizeof(dim1));
9034 0 : oss.write((char *)&dim2, sizeof(dim2));
9035 0 : oss.write((char *)&dim3, sizeof(dim3));
9036 0 : oss.write((char *)&dim4, sizeof(dim4));
9037 0 : for (unsigned int i = 0; i < data.size(); i++)
9038 0 : for (unsigned int j = 0; j < data.at(0).size(); j++)
9039 0 : for (unsigned int k = 0; k < data.at(0).at(0).size(); k++)
9040 0 : for (unsigned int l = 0; l < data.at(0).at(0).at(0).size(); l++){
9041 :
9042 0 : short v = data.at(i).at(j).at(k).at(l);
9043 :
9044 0 : oss.write((char *) &v, sizeof(v));
9045 : }
9046 :
9047 0 : Base64 b64;
9048 0 : b64.encode(oss.str(), encoded, false);
9049 0 : buf.append(encoded);
9050 0 : buf.append(" </" + name + "> ")
9051 : ;
9052 0 : }
9053 :
9054 :
9055 : #ifndef Short_CPP
9056 :
9057 : #define Short_CPP short
9058 :
9059 : #endif
9060 :
9061 :
9062 : #define TRYREAD(_stream_, _value_) _stream_.read((char*) &(_value_), sizeof(_value_)); \
9063 : if (_stream_.bad()) throw ConversionException("I/O error during read of " + name, tableName);
9064 :
9065 :
9066 0 : vector<short>& Parser::get1DShortFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector<short>& attribute)
9067 : {
9068 0 : string xmlField = Parser::getField(xmlDoc,name);
9069 0 : if (xmlField.length() == 0) {
9070 0 : throw ConversionException("Error: Field \"" +
9071 0 : name + "\": Invalid XML syntax", tableName);
9072 : }
9073 :
9074 0 : string decodedString;
9075 0 : Base64 b64;
9076 0 : b64.decode(xmlField, decodedString);
9077 :
9078 0 : stringstream iss(stringstream::in | stringstream::binary);
9079 0 : iss.str(decodedString);
9080 :
9081 0 : attribute.clear();
9082 :
9083 0 : unsigned int ndim = 0;
9084 : //iss.read((char *)&ndim, sizeof(ndim));
9085 0 : TRYREAD(iss,ndim);
9086 :
9087 0 : unsigned int dim1 = 0;
9088 : //iss.read((char *)&dim1, sizeof(dim1));
9089 0 : TRYREAD(iss,dim1);
9090 0 : if (ndim != 1) {
9091 0 : throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 1.", tableName);
9092 : }
9093 :
9094 0 : attribute.reserve(dim1);
9095 :
9096 : Short_CPP v;
9097 0 : for (unsigned int i = 0; i < dim1; i++) {
9098 : //iss.read((char*) &v, sizeof(v));
9099 0 : TRYREAD(iss,v);
9100 :
9101 0 : attribute.push_back(v);
9102 :
9103 : }
9104 0 : return attribute;
9105 0 : }
9106 :
9107 :
9108 0 : vector <vector<short> >& Parser::get2DShortFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector <vector<short> >& attribute)
9109 : {
9110 0 : string xmlField = Parser::getField(xmlDoc,name);
9111 0 : if (xmlField.length() == 0) {
9112 0 : throw ConversionException("Error: Field \"" +
9113 0 : name + "\": Invalid XML syntax", tableName);
9114 : }
9115 :
9116 0 : string decodedString;
9117 0 : Base64 b64;
9118 0 : b64.decode(xmlField, decodedString);
9119 :
9120 0 : stringstream iss(stringstream::in | stringstream::binary);
9121 0 : iss.str(decodedString);
9122 :
9123 0 : attribute.clear();
9124 :
9125 0 : unsigned int ndim = 0;
9126 : //iss.read((char *)&ndim, sizeof(ndim));
9127 0 : TRYREAD(iss,ndim);
9128 :
9129 0 : if (ndim != 2) {
9130 0 : throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 2.", tableName);
9131 : }
9132 :
9133 0 : unsigned int dim1 = 0;
9134 : //iss.read((char *)&dim1, sizeof(dim1));
9135 0 : TRYREAD(iss,dim1);
9136 :
9137 0 : unsigned int dim2 = 0;
9138 : //iss.read((char *)&dim2, sizeof(dim2));
9139 0 : TRYREAD(iss,dim2);
9140 :
9141 0 : attribute.reserve(dim1);
9142 :
9143 : Short_CPP v;
9144 0 : vector<short> aux2;
9145 0 : aux2.reserve(dim2);
9146 0 : for (unsigned int i = 0; i < dim1; i++) {
9147 0 : aux2.clear();
9148 0 : for (unsigned int j = 0; j < dim2; j++) {
9149 : //iss.read((char*) &v, sizeof(v));
9150 0 : TRYREAD(iss,v);
9151 :
9152 0 : aux2.push_back(v);
9153 :
9154 : }
9155 0 : attribute.push_back(aux2);
9156 : }
9157 0 : return attribute;
9158 0 : }
9159 :
9160 :
9161 0 : vector <vector <vector<short> > >& Parser::get3DShortFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector <vector <vector<short> > >& attribute)
9162 : {
9163 0 : string xmlField = Parser::getField(xmlDoc,name);
9164 0 : if (xmlField.length() == 0) {
9165 0 : throw ConversionException("Error: Field \"" +
9166 0 : name + "\": Invalid XML syntax", tableName);
9167 : }
9168 :
9169 0 : string decodedString;
9170 0 : Base64 b64;
9171 0 : b64.decode(xmlField, decodedString);
9172 :
9173 0 : stringstream iss(stringstream::in | stringstream::binary);
9174 0 : iss.str(decodedString);
9175 :
9176 0 : attribute.clear();
9177 :
9178 0 : unsigned int ndim = 0;
9179 : //iss.read((char *)&ndim, sizeof(ndim));
9180 0 : TRYREAD(iss, ndim);
9181 0 : if (ndim != 3) {
9182 0 : throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 3.", tableName);
9183 : }
9184 :
9185 0 : unsigned int dim1 = 0;
9186 : //iss.read((char *)&dim1, sizeof(dim1));
9187 0 : TRYREAD(iss,dim1);
9188 :
9189 0 : unsigned int dim2 = 0;
9190 : //iss.read((char *)&dim2, sizeof(dim2));
9191 0 : TRYREAD(iss,dim2);
9192 :
9193 0 : unsigned int dim3 = 0;
9194 : //iss.read((char *)&dim2, sizeof(dim3));
9195 0 : TRYREAD(iss,dim3);
9196 :
9197 0 : attribute.reserve(dim1);
9198 :
9199 : Short_CPP v;
9200 0 : vector <vector<short> > aux2;
9201 0 : vector<short> aux3;
9202 0 : aux2.reserve(dim2);
9203 0 : aux3.reserve(dim3);
9204 :
9205 0 : for (unsigned int i = 0; i < dim1; i++) {
9206 0 : aux2.clear();
9207 0 : for (unsigned int j = 0; j < dim2; j++) {
9208 0 : aux3.clear();
9209 0 : for (unsigned int k = 0; k < dim3; k++) {
9210 : //iss.read((char*) &v, sizeof(v));
9211 0 : TRYREAD(iss,v);
9212 :
9213 0 : aux3.push_back(v);
9214 :
9215 : }
9216 0 : aux2.push_back(aux3);
9217 : }
9218 0 : attribute.push_back(aux2);
9219 : }
9220 0 : return attribute;
9221 : ;
9222 0 : }
9223 :
9224 :
9225 0 : vector <vector <vector <vector<short> > > >& Parser::get4DShortFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector< vector <vector <vector<short> > > >& attribute)
9226 : {
9227 0 : string xmlField = Parser::getField(xmlDoc,name);
9228 0 : if (xmlField.length() == 0) {
9229 0 : throw ConversionException("Error: Field \"" +
9230 0 : name + "\": Invalid XML syntax", tableName);
9231 : }
9232 :
9233 0 : string decodedString;
9234 0 : Base64 b64;
9235 0 : b64.decode(xmlField, decodedString);
9236 :
9237 0 : stringstream iss(stringstream::in | stringstream::binary);
9238 0 : iss.str(decodedString);
9239 :
9240 0 : attribute.clear();
9241 :
9242 0 : unsigned int ndim = 0;
9243 : //iss.read((char *)&ndim, sizeof(ndim));
9244 0 : TRYREAD(iss, ndim);
9245 0 : if (ndim != 4) {
9246 0 : throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 4.", tableName);
9247 : }
9248 :
9249 0 : unsigned int dim1 = 0;
9250 : //iss.read((char *)&dim1, sizeof(dim1));
9251 0 : TRYREAD(iss,dim1);
9252 :
9253 0 : unsigned int dim2 = 0;
9254 : //iss.read((char *)&dim2, sizeof(dim2));
9255 0 : TRYREAD(iss,dim2);
9256 :
9257 0 : unsigned int dim3 = 0;
9258 : //iss.read((char *)&dim2, sizeof(dim3));
9259 0 : TRYREAD(iss,dim3);
9260 :
9261 0 : unsigned int dim4 = 0;
9262 : //iss.read((char *)&dim2, sizeof(dim3));
9263 0 : TRYREAD(iss,dim3);
9264 :
9265 0 : attribute.reserve(dim1);
9266 :
9267 : Short_CPP v;
9268 0 : vector <vector <vector<short> > > aux2;
9269 0 : vector <vector<short> > aux3;
9270 0 : vector<short> aux4;
9271 0 : aux2.reserve(dim2);
9272 0 : aux3.reserve(dim3);
9273 0 : aux4.reserve(dim4);
9274 :
9275 0 : for (unsigned int i = 0; i < dim1; i++) {
9276 0 : aux2.clear();
9277 0 : for (unsigned int j = 0; j < dim2; j++) {
9278 0 : aux3.clear();
9279 0 : for (unsigned int k = 0; k < dim3; k++) {
9280 0 : aux4.clear();
9281 0 : for (unsigned int l = 0; l < dim4; l++) {
9282 : //iss.read((char*) &v, sizeof(v));
9283 0 : TRYREAD(iss,v);
9284 :
9285 0 : aux4.push_back(v);
9286 :
9287 : }
9288 0 : aux3.push_back(aux4);
9289 : }
9290 0 : aux2.push_back(aux3);
9291 : }
9292 0 : attribute.push_back(aux2);
9293 : }
9294 0 : return attribute;
9295 : ;
9296 0 : }
9297 :
9298 :
9299 :
9300 :
9301 :
9302 :
9303 :
9304 0 : void Parser::toXMLBase64(vector<int64_t> data, const string &name, string &buf){
9305 0 : stringstream oss(stringstream::out | stringstream::binary);
9306 0 : string encoded;
9307 :
9308 0 : buf.append("<" + name + "> ");
9309 0 : int ndim = 1;
9310 0 : int dim1 = data.size();
9311 :
9312 0 : oss.write((char *)&ndim, sizeof(int));
9313 0 : oss.write((char *)&dim1, sizeof(dim1));
9314 :
9315 0 : for (unsigned int i = 0; i < data.size(); i++) {
9316 :
9317 0 : int64_t v = data.at(i);
9318 :
9319 0 : oss.write((char *) &v, sizeof(v));
9320 : }
9321 :
9322 0 : Base64 b64;
9323 0 : b64.encode(oss.str(), encoded, false);
9324 0 : buf.append(encoded);
9325 0 : buf.append(" </" + name + "> ");
9326 0 : }
9327 :
9328 :
9329 0 : void Parser::toXMLBase64(vector< vector<int64_t> > data, const string &name, string &buf){
9330 0 : stringstream oss(stringstream::out | stringstream::binary);
9331 0 : string encoded;
9332 :
9333 0 : buf.append("<" + name + "> ");
9334 0 : int ndim = 2;
9335 0 : int dim1 = data.size();
9336 0 : int dim2 = data.at(0).size();
9337 :
9338 0 : oss.write((char *)&ndim, sizeof(int));
9339 0 : oss.write((char *)&dim1, sizeof(dim1));
9340 0 : oss.write((char *)&dim2, sizeof(dim2));
9341 0 : for (unsigned int i = 0; i < data.size(); i++)
9342 0 : for (unsigned int j = 0; j < data.at(0).size(); j++) {
9343 :
9344 0 : int64_t v = data.at(i).at(j);
9345 :
9346 0 : oss.write((char *) &v, sizeof(v));
9347 : }
9348 :
9349 0 : Base64 b64;
9350 0 : b64.encode(oss.str(), encoded, false);
9351 0 : buf.append(encoded);
9352 0 : buf.append(" </" + name + "> ")
9353 : ;
9354 0 : }
9355 :
9356 :
9357 0 : void Parser::toXMLBase64(vector< vector< vector<int64_t> > > data, const string &name, string &buf){
9358 0 : stringstream oss(stringstream::out | stringstream::binary);
9359 0 : string encoded;
9360 :
9361 0 : buf.append("<" + name + "> ");
9362 0 : int ndim = 3;
9363 0 : int dim1 = data.size();
9364 0 : int dim2 = data.at(0).size();
9365 0 : int dim3 = data.at(0).at(0).size();
9366 :
9367 0 : oss.write((char *)&ndim, sizeof(int));
9368 0 : oss.write((char *)&dim1, sizeof(dim1));
9369 0 : oss.write((char *)&dim2, sizeof(dim2));
9370 0 : oss.write((char *)&dim3, sizeof(dim3));
9371 0 : for (unsigned int i = 0; i < data.size(); i++)
9372 0 : for (unsigned int j = 0; j < data.at(0).size(); j++)
9373 0 : for (unsigned int k = 0; k < data.at(0).at(0).size(); k++){
9374 :
9375 0 : int64_t v = data.at(i).at(j).at(k);
9376 :
9377 0 : oss.write((char *) &v, sizeof(v));
9378 : }
9379 :
9380 0 : Base64 b64;
9381 0 : b64.encode(oss.str(), encoded, false);
9382 0 : buf.append(encoded);
9383 0 : buf.append(" </" + name + "> ")
9384 : ;
9385 0 : }
9386 :
9387 :
9388 0 : void Parser::toXMLBase64(vector<vector< vector< vector<int64_t> > > >data, const string &name, string &buf){
9389 0 : stringstream oss(stringstream::out | stringstream::binary);
9390 0 : string encoded;
9391 :
9392 0 : buf.append("<" + name + "> ");
9393 0 : int ndim = 3;
9394 0 : int dim1 = data.size();
9395 0 : int dim2 = data.at(0).size();
9396 0 : int dim3 = data.at(0).at(0).size();
9397 0 : int dim4 = data.at(0).at(0).at(0).size();
9398 :
9399 0 : oss.write((char *)&ndim, sizeof(int));
9400 0 : oss.write((char *)&dim1, sizeof(dim1));
9401 0 : oss.write((char *)&dim2, sizeof(dim2));
9402 0 : oss.write((char *)&dim3, sizeof(dim3));
9403 0 : oss.write((char *)&dim4, sizeof(dim4));
9404 0 : for (unsigned int i = 0; i < data.size(); i++)
9405 0 : for (unsigned int j = 0; j < data.at(0).size(); j++)
9406 0 : for (unsigned int k = 0; k < data.at(0).at(0).size(); k++)
9407 0 : for (unsigned int l = 0; l < data.at(0).at(0).at(0).size(); l++){
9408 :
9409 0 : int64_t v = data.at(i).at(j).at(k).at(l);
9410 :
9411 0 : oss.write((char *) &v, sizeof(v));
9412 : }
9413 :
9414 0 : Base64 b64;
9415 0 : b64.encode(oss.str(), encoded, false);
9416 0 : buf.append(encoded);
9417 0 : buf.append(" </" + name + "> ")
9418 : ;
9419 0 : }
9420 :
9421 :
9422 : #ifndef Long_CPP
9423 :
9424 : #define Long_CPP int64_t
9425 :
9426 : #endif
9427 :
9428 :
9429 : #define TRYREAD(_stream_, _value_) _stream_.read((char*) &(_value_), sizeof(_value_)); \
9430 : if (_stream_.bad()) throw ConversionException("I/O error during read of " + name, tableName);
9431 :
9432 :
9433 0 : vector<int64_t>& Parser::get1DLongFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector<int64_t>& attribute)
9434 : {
9435 0 : string xmlField = Parser::getField(xmlDoc,name);
9436 0 : if (xmlField.length() == 0) {
9437 0 : throw ConversionException("Error: Field \"" +
9438 0 : name + "\": Invalid XML syntax", tableName);
9439 : }
9440 :
9441 0 : string decodedString;
9442 0 : Base64 b64;
9443 0 : b64.decode(xmlField, decodedString);
9444 :
9445 0 : stringstream iss(stringstream::in | stringstream::binary);
9446 0 : iss.str(decodedString);
9447 :
9448 0 : attribute.clear();
9449 :
9450 0 : unsigned int ndim = 0;
9451 : //iss.read((char *)&ndim, sizeof(ndim));
9452 0 : TRYREAD(iss,ndim);
9453 :
9454 0 : unsigned int dim1 = 0;
9455 : //iss.read((char *)&dim1, sizeof(dim1));
9456 0 : TRYREAD(iss,dim1);
9457 0 : if (ndim != 1) {
9458 0 : throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 1.", tableName);
9459 : }
9460 :
9461 0 : attribute.reserve(dim1);
9462 :
9463 : Long_CPP v;
9464 0 : for (unsigned int i = 0; i < dim1; i++) {
9465 : //iss.read((char*) &v, sizeof(v));
9466 0 : TRYREAD(iss,v);
9467 :
9468 0 : attribute.push_back(v);
9469 :
9470 : }
9471 0 : return attribute;
9472 0 : }
9473 :
9474 :
9475 0 : vector <vector<int64_t> >& Parser::get2DLongFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector <vector<int64_t> >& attribute)
9476 : {
9477 0 : string xmlField = Parser::getField(xmlDoc,name);
9478 0 : if (xmlField.length() == 0) {
9479 0 : throw ConversionException("Error: Field \"" +
9480 0 : name + "\": Invalid XML syntax", tableName);
9481 : }
9482 :
9483 0 : string decodedString;
9484 0 : Base64 b64;
9485 0 : b64.decode(xmlField, decodedString);
9486 :
9487 0 : stringstream iss(stringstream::in | stringstream::binary);
9488 0 : iss.str(decodedString);
9489 :
9490 0 : attribute.clear();
9491 :
9492 0 : unsigned int ndim = 0;
9493 : //iss.read((char *)&ndim, sizeof(ndim));
9494 0 : TRYREAD(iss,ndim);
9495 :
9496 0 : if (ndim != 2) {
9497 0 : throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 2.", tableName);
9498 : }
9499 :
9500 0 : unsigned int dim1 = 0;
9501 : //iss.read((char *)&dim1, sizeof(dim1));
9502 0 : TRYREAD(iss,dim1);
9503 :
9504 0 : unsigned int dim2 = 0;
9505 : //iss.read((char *)&dim2, sizeof(dim2));
9506 0 : TRYREAD(iss,dim2);
9507 :
9508 0 : attribute.reserve(dim1);
9509 :
9510 : Long_CPP v;
9511 0 : vector<int64_t> aux2;
9512 0 : aux2.reserve(dim2);
9513 0 : for (unsigned int i = 0; i < dim1; i++) {
9514 0 : aux2.clear();
9515 0 : for (unsigned int j = 0; j < dim2; j++) {
9516 : //iss.read((char*) &v, sizeof(v));
9517 0 : TRYREAD(iss,v);
9518 :
9519 0 : aux2.push_back(v);
9520 :
9521 : }
9522 0 : attribute.push_back(aux2);
9523 : }
9524 0 : return attribute;
9525 0 : }
9526 :
9527 :
9528 0 : vector <vector <vector<int64_t> > >& Parser::get3DLongFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector <vector <vector<int64_t> > >& attribute)
9529 : {
9530 0 : string xmlField = Parser::getField(xmlDoc,name);
9531 0 : if (xmlField.length() == 0) {
9532 0 : throw ConversionException("Error: Field \"" +
9533 0 : name + "\": Invalid XML syntax", tableName);
9534 : }
9535 :
9536 0 : string decodedString;
9537 0 : Base64 b64;
9538 0 : b64.decode(xmlField, decodedString);
9539 :
9540 0 : stringstream iss(stringstream::in | stringstream::binary);
9541 0 : iss.str(decodedString);
9542 :
9543 0 : attribute.clear();
9544 :
9545 0 : unsigned int ndim = 0;
9546 : //iss.read((char *)&ndim, sizeof(ndim));
9547 0 : TRYREAD(iss, ndim);
9548 0 : if (ndim != 3) {
9549 0 : throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 3.", tableName);
9550 : }
9551 :
9552 0 : unsigned int dim1 = 0;
9553 : //iss.read((char *)&dim1, sizeof(dim1));
9554 0 : TRYREAD(iss,dim1);
9555 :
9556 0 : unsigned int dim2 = 0;
9557 : //iss.read((char *)&dim2, sizeof(dim2));
9558 0 : TRYREAD(iss,dim2);
9559 :
9560 0 : unsigned int dim3 = 0;
9561 : //iss.read((char *)&dim2, sizeof(dim3));
9562 0 : TRYREAD(iss,dim3);
9563 :
9564 0 : attribute.reserve(dim1);
9565 :
9566 : Long_CPP v;
9567 0 : vector <vector<int64_t> > aux2;
9568 0 : vector<int64_t> aux3;
9569 0 : aux2.reserve(dim2);
9570 0 : aux3.reserve(dim3);
9571 :
9572 0 : for (unsigned int i = 0; i < dim1; i++) {
9573 0 : aux2.clear();
9574 0 : for (unsigned int j = 0; j < dim2; j++) {
9575 0 : aux3.clear();
9576 0 : for (unsigned int k = 0; k < dim3; k++) {
9577 : //iss.read((char*) &v, sizeof(v));
9578 0 : TRYREAD(iss,v);
9579 :
9580 0 : aux3.push_back(v);
9581 :
9582 : }
9583 0 : aux2.push_back(aux3);
9584 : }
9585 0 : attribute.push_back(aux2);
9586 : }
9587 0 : return attribute;
9588 : ;
9589 0 : }
9590 :
9591 :
9592 0 : vector <vector <vector <vector<int64_t> > > >& Parser::get4DLongFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector< vector <vector <vector<int64_t> > > >& attribute)
9593 : {
9594 0 : string xmlField = Parser::getField(xmlDoc,name);
9595 0 : if (xmlField.length() == 0) {
9596 0 : throw ConversionException("Error: Field \"" +
9597 0 : name + "\": Invalid XML syntax", tableName);
9598 : }
9599 :
9600 0 : string decodedString;
9601 0 : Base64 b64;
9602 0 : b64.decode(xmlField, decodedString);
9603 :
9604 0 : stringstream iss(stringstream::in | stringstream::binary);
9605 0 : iss.str(decodedString);
9606 :
9607 0 : attribute.clear();
9608 :
9609 0 : unsigned int ndim = 0;
9610 : //iss.read((char *)&ndim, sizeof(ndim));
9611 0 : TRYREAD(iss, ndim);
9612 0 : if (ndim != 4) {
9613 0 : throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 4.", tableName);
9614 : }
9615 :
9616 0 : unsigned int dim1 = 0;
9617 : //iss.read((char *)&dim1, sizeof(dim1));
9618 0 : TRYREAD(iss,dim1);
9619 :
9620 0 : unsigned int dim2 = 0;
9621 : //iss.read((char *)&dim2, sizeof(dim2));
9622 0 : TRYREAD(iss,dim2);
9623 :
9624 0 : unsigned int dim3 = 0;
9625 : //iss.read((char *)&dim2, sizeof(dim3));
9626 0 : TRYREAD(iss,dim3);
9627 :
9628 0 : unsigned int dim4 = 0;
9629 : //iss.read((char *)&dim2, sizeof(dim3));
9630 0 : TRYREAD(iss,dim3);
9631 :
9632 0 : attribute.reserve(dim1);
9633 :
9634 : Long_CPP v;
9635 0 : vector <vector <vector<int64_t> > > aux2;
9636 0 : vector <vector<int64_t> > aux3;
9637 0 : vector<int64_t> aux4;
9638 0 : aux2.reserve(dim2);
9639 0 : aux3.reserve(dim3);
9640 0 : aux4.reserve(dim4);
9641 :
9642 0 : for (unsigned int i = 0; i < dim1; i++) {
9643 0 : aux2.clear();
9644 0 : for (unsigned int j = 0; j < dim2; j++) {
9645 0 : aux3.clear();
9646 0 : for (unsigned int k = 0; k < dim3; k++) {
9647 0 : aux4.clear();
9648 0 : for (unsigned int l = 0; l < dim4; l++) {
9649 : //iss.read((char*) &v, sizeof(v));
9650 0 : TRYREAD(iss,v);
9651 :
9652 0 : aux4.push_back(v);
9653 :
9654 : }
9655 0 : aux3.push_back(aux4);
9656 : }
9657 0 : aux2.push_back(aux3);
9658 : }
9659 0 : attribute.push_back(aux2);
9660 : }
9661 0 : return attribute;
9662 : ;
9663 0 : }
9664 :
9665 :
9666 :
9667 :
9668 :
9669 :
9670 :
9671 0 : void Parser::toXMLBase64(vector<char> data, const string &name, string &buf){
9672 0 : stringstream oss(stringstream::out | stringstream::binary);
9673 0 : string encoded;
9674 :
9675 0 : buf.append("<" + name + "> ");
9676 0 : int ndim = 1;
9677 0 : int dim1 = data.size();
9678 :
9679 0 : oss.write((char *)&ndim, sizeof(int));
9680 0 : oss.write((char *)&dim1, sizeof(dim1));
9681 :
9682 0 : for (unsigned int i = 0; i < data.size(); i++) {
9683 :
9684 0 : char v = data.at(i);
9685 :
9686 0 : oss.write((char *) &v, sizeof(v));
9687 : }
9688 :
9689 0 : Base64 b64;
9690 0 : b64.encode(oss.str(), encoded, false);
9691 0 : buf.append(encoded);
9692 0 : buf.append(" </" + name + "> ");
9693 0 : }
9694 :
9695 :
9696 0 : void Parser::toXMLBase64(vector< vector<char> > data, const string &name, string &buf){
9697 0 : stringstream oss(stringstream::out | stringstream::binary);
9698 0 : string encoded;
9699 :
9700 0 : buf.append("<" + name + "> ");
9701 0 : int ndim = 2;
9702 0 : int dim1 = data.size();
9703 0 : int dim2 = data.at(0).size();
9704 :
9705 0 : oss.write((char *)&ndim, sizeof(int));
9706 0 : oss.write((char *)&dim1, sizeof(dim1));
9707 0 : oss.write((char *)&dim2, sizeof(dim2));
9708 0 : for (unsigned int i = 0; i < data.size(); i++)
9709 0 : for (unsigned int j = 0; j < data.at(0).size(); j++) {
9710 :
9711 0 : char v = data.at(i).at(j);
9712 :
9713 0 : oss.write((char *) &v, sizeof(v));
9714 : }
9715 :
9716 0 : Base64 b64;
9717 0 : b64.encode(oss.str(), encoded, false);
9718 0 : buf.append(encoded);
9719 0 : buf.append(" </" + name + "> ")
9720 : ;
9721 0 : }
9722 :
9723 :
9724 0 : void Parser::toXMLBase64(vector< vector< vector<char> > > data, const string &name, string &buf){
9725 0 : stringstream oss(stringstream::out | stringstream::binary);
9726 0 : string encoded;
9727 :
9728 0 : buf.append("<" + name + "> ");
9729 0 : int ndim = 3;
9730 0 : int dim1 = data.size();
9731 0 : int dim2 = data.at(0).size();
9732 0 : int dim3 = data.at(0).at(0).size();
9733 :
9734 0 : oss.write((char *)&ndim, sizeof(int));
9735 0 : oss.write((char *)&dim1, sizeof(dim1));
9736 0 : oss.write((char *)&dim2, sizeof(dim2));
9737 0 : oss.write((char *)&dim3, sizeof(dim3));
9738 0 : for (unsigned int i = 0; i < data.size(); i++)
9739 0 : for (unsigned int j = 0; j < data.at(0).size(); j++)
9740 0 : for (unsigned int k = 0; k < data.at(0).at(0).size(); k++){
9741 :
9742 0 : char v = data.at(i).at(j).at(k);
9743 :
9744 0 : oss.write((char *) &v, sizeof(v));
9745 : }
9746 :
9747 0 : Base64 b64;
9748 0 : b64.encode(oss.str(), encoded, false);
9749 0 : buf.append(encoded);
9750 0 : buf.append(" </" + name + "> ")
9751 : ;
9752 0 : }
9753 :
9754 :
9755 0 : void Parser::toXMLBase64(vector<vector< vector< vector<char> > > >data, const string &name, string &buf){
9756 0 : stringstream oss(stringstream::out | stringstream::binary);
9757 0 : string encoded;
9758 :
9759 0 : buf.append("<" + name + "> ");
9760 0 : int ndim = 3;
9761 0 : int dim1 = data.size();
9762 0 : int dim2 = data.at(0).size();
9763 0 : int dim3 = data.at(0).at(0).size();
9764 0 : int dim4 = data.at(0).at(0).at(0).size();
9765 :
9766 0 : oss.write((char *)&ndim, sizeof(int));
9767 0 : oss.write((char *)&dim1, sizeof(dim1));
9768 0 : oss.write((char *)&dim2, sizeof(dim2));
9769 0 : oss.write((char *)&dim3, sizeof(dim3));
9770 0 : oss.write((char *)&dim4, sizeof(dim4));
9771 0 : for (unsigned int i = 0; i < data.size(); i++)
9772 0 : for (unsigned int j = 0; j < data.at(0).size(); j++)
9773 0 : for (unsigned int k = 0; k < data.at(0).at(0).size(); k++)
9774 0 : for (unsigned int l = 0; l < data.at(0).at(0).at(0).size(); l++){
9775 :
9776 0 : char v = data.at(i).at(j).at(k).at(l);
9777 :
9778 0 : oss.write((char *) &v, sizeof(v));
9779 : }
9780 :
9781 0 : Base64 b64;
9782 0 : b64.encode(oss.str(), encoded, false);
9783 0 : buf.append(encoded);
9784 0 : buf.append(" </" + name + "> ")
9785 : ;
9786 0 : }
9787 :
9788 :
9789 : #ifndef Byte_CPP
9790 :
9791 : #define Byte_CPP char
9792 :
9793 : #endif
9794 :
9795 :
9796 : #define TRYREAD(_stream_, _value_) _stream_.read((char*) &(_value_), sizeof(_value_)); \
9797 : if (_stream_.bad()) throw ConversionException("I/O error during read of " + name, tableName);
9798 :
9799 :
9800 0 : vector<char>& Parser::get1DByteFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector<char>& attribute)
9801 : {
9802 0 : string xmlField = Parser::getField(xmlDoc,name);
9803 0 : if (xmlField.length() == 0) {
9804 0 : throw ConversionException("Error: Field \"" +
9805 0 : name + "\": Invalid XML syntax", tableName);
9806 : }
9807 :
9808 0 : string decodedString;
9809 0 : Base64 b64;
9810 0 : b64.decode(xmlField, decodedString);
9811 :
9812 0 : stringstream iss(stringstream::in | stringstream::binary);
9813 0 : iss.str(decodedString);
9814 :
9815 0 : attribute.clear();
9816 :
9817 0 : unsigned int ndim = 0;
9818 : //iss.read((char *)&ndim, sizeof(ndim));
9819 0 : TRYREAD(iss,ndim);
9820 :
9821 0 : unsigned int dim1 = 0;
9822 : //iss.read((char *)&dim1, sizeof(dim1));
9823 0 : TRYREAD(iss,dim1);
9824 0 : if (ndim != 1) {
9825 0 : throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 1.", tableName);
9826 : }
9827 :
9828 0 : attribute.reserve(dim1);
9829 :
9830 : Byte_CPP v;
9831 0 : for (unsigned int i = 0; i < dim1; i++) {
9832 : //iss.read((char*) &v, sizeof(v));
9833 0 : TRYREAD(iss,v);
9834 :
9835 0 : attribute.push_back(v);
9836 :
9837 : }
9838 0 : return attribute;
9839 0 : }
9840 :
9841 :
9842 0 : vector <vector<char> >& Parser::get2DByteFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector <vector<char> >& attribute)
9843 : {
9844 0 : string xmlField = Parser::getField(xmlDoc,name);
9845 0 : if (xmlField.length() == 0) {
9846 0 : throw ConversionException("Error: Field \"" +
9847 0 : name + "\": Invalid XML syntax", tableName);
9848 : }
9849 :
9850 0 : string decodedString;
9851 0 : Base64 b64;
9852 0 : b64.decode(xmlField, decodedString);
9853 :
9854 0 : stringstream iss(stringstream::in | stringstream::binary);
9855 0 : iss.str(decodedString);
9856 :
9857 0 : attribute.clear();
9858 :
9859 0 : unsigned int ndim = 0;
9860 : //iss.read((char *)&ndim, sizeof(ndim));
9861 0 : TRYREAD(iss,ndim);
9862 :
9863 0 : if (ndim != 2) {
9864 0 : throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 2.", tableName);
9865 : }
9866 :
9867 0 : unsigned int dim1 = 0;
9868 : //iss.read((char *)&dim1, sizeof(dim1));
9869 0 : TRYREAD(iss,dim1);
9870 :
9871 0 : unsigned int dim2 = 0;
9872 : //iss.read((char *)&dim2, sizeof(dim2));
9873 0 : TRYREAD(iss,dim2);
9874 :
9875 0 : attribute.reserve(dim1);
9876 :
9877 : Byte_CPP v;
9878 0 : vector<char> aux2;
9879 0 : aux2.reserve(dim2);
9880 0 : for (unsigned int i = 0; i < dim1; i++) {
9881 0 : aux2.clear();
9882 0 : for (unsigned int j = 0; j < dim2; j++) {
9883 : //iss.read((char*) &v, sizeof(v));
9884 0 : TRYREAD(iss,v);
9885 :
9886 0 : aux2.push_back(v);
9887 :
9888 : }
9889 0 : attribute.push_back(aux2);
9890 : }
9891 0 : return attribute;
9892 0 : }
9893 :
9894 :
9895 0 : vector <vector <vector<char> > >& Parser::get3DByteFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector <vector <vector<char> > >& attribute)
9896 : {
9897 0 : string xmlField = Parser::getField(xmlDoc,name);
9898 0 : if (xmlField.length() == 0) {
9899 0 : throw ConversionException("Error: Field \"" +
9900 0 : name + "\": Invalid XML syntax", tableName);
9901 : }
9902 :
9903 0 : string decodedString;
9904 0 : Base64 b64;
9905 0 : b64.decode(xmlField, decodedString);
9906 :
9907 0 : stringstream iss(stringstream::in | stringstream::binary);
9908 0 : iss.str(decodedString);
9909 :
9910 0 : attribute.clear();
9911 :
9912 0 : unsigned int ndim = 0;
9913 : //iss.read((char *)&ndim, sizeof(ndim));
9914 0 : TRYREAD(iss, ndim);
9915 0 : if (ndim != 3) {
9916 0 : throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 3.", tableName);
9917 : }
9918 :
9919 0 : unsigned int dim1 = 0;
9920 : //iss.read((char *)&dim1, sizeof(dim1));
9921 0 : TRYREAD(iss,dim1);
9922 :
9923 0 : unsigned int dim2 = 0;
9924 : //iss.read((char *)&dim2, sizeof(dim2));
9925 0 : TRYREAD(iss,dim2);
9926 :
9927 0 : unsigned int dim3 = 0;
9928 : //iss.read((char *)&dim2, sizeof(dim3));
9929 0 : TRYREAD(iss,dim3);
9930 :
9931 0 : attribute.reserve(dim1);
9932 :
9933 : Byte_CPP v;
9934 0 : vector <vector<char> > aux2;
9935 0 : vector<char> aux3;
9936 0 : aux2.reserve(dim2);
9937 0 : aux3.reserve(dim3);
9938 :
9939 0 : for (unsigned int i = 0; i < dim1; i++) {
9940 0 : aux2.clear();
9941 0 : for (unsigned int j = 0; j < dim2; j++) {
9942 0 : aux3.clear();
9943 0 : for (unsigned int k = 0; k < dim3; k++) {
9944 : //iss.read((char*) &v, sizeof(v));
9945 0 : TRYREAD(iss,v);
9946 :
9947 0 : aux3.push_back(v);
9948 :
9949 : }
9950 0 : aux2.push_back(aux3);
9951 : }
9952 0 : attribute.push_back(aux2);
9953 : }
9954 0 : return attribute;
9955 : ;
9956 0 : }
9957 :
9958 :
9959 0 : vector <vector <vector <vector<char> > > >& Parser::get4DByteFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector< vector <vector <vector<char> > > >& attribute)
9960 : {
9961 0 : string xmlField = Parser::getField(xmlDoc,name);
9962 0 : if (xmlField.length() == 0) {
9963 0 : throw ConversionException("Error: Field \"" +
9964 0 : name + "\": Invalid XML syntax", tableName);
9965 : }
9966 :
9967 0 : string decodedString;
9968 0 : Base64 b64;
9969 0 : b64.decode(xmlField, decodedString);
9970 :
9971 0 : stringstream iss(stringstream::in | stringstream::binary);
9972 0 : iss.str(decodedString);
9973 :
9974 0 : attribute.clear();
9975 :
9976 0 : unsigned int ndim = 0;
9977 : //iss.read((char *)&ndim, sizeof(ndim));
9978 0 : TRYREAD(iss, ndim);
9979 0 : if (ndim != 4) {
9980 0 : throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 4.", tableName);
9981 : }
9982 :
9983 0 : unsigned int dim1 = 0;
9984 : //iss.read((char *)&dim1, sizeof(dim1));
9985 0 : TRYREAD(iss,dim1);
9986 :
9987 0 : unsigned int dim2 = 0;
9988 : //iss.read((char *)&dim2, sizeof(dim2));
9989 0 : TRYREAD(iss,dim2);
9990 :
9991 0 : unsigned int dim3 = 0;
9992 : //iss.read((char *)&dim2, sizeof(dim3));
9993 0 : TRYREAD(iss,dim3);
9994 :
9995 0 : unsigned int dim4 = 0;
9996 : //iss.read((char *)&dim2, sizeof(dim3));
9997 0 : TRYREAD(iss,dim3);
9998 :
9999 0 : attribute.reserve(dim1);
10000 :
10001 : Byte_CPP v;
10002 0 : vector <vector <vector<char> > > aux2;
10003 0 : vector <vector<char> > aux3;
10004 0 : vector<char> aux4;
10005 0 : aux2.reserve(dim2);
10006 0 : aux3.reserve(dim3);
10007 0 : aux4.reserve(dim4);
10008 :
10009 0 : for (unsigned int i = 0; i < dim1; i++) {
10010 0 : aux2.clear();
10011 0 : for (unsigned int j = 0; j < dim2; j++) {
10012 0 : aux3.clear();
10013 0 : for (unsigned int k = 0; k < dim3; k++) {
10014 0 : aux4.clear();
10015 0 : for (unsigned int l = 0; l < dim4; l++) {
10016 : //iss.read((char*) &v, sizeof(v));
10017 0 : TRYREAD(iss,v);
10018 :
10019 0 : aux4.push_back(v);
10020 :
10021 : }
10022 0 : aux3.push_back(aux4);
10023 : }
10024 0 : aux2.push_back(aux3);
10025 : }
10026 0 : attribute.push_back(aux2);
10027 : }
10028 0 : return attribute;
10029 : ;
10030 0 : }
10031 :
10032 :
10033 :
10034 :
10035 :
10036 :
10037 :
10038 0 : void Parser::toXMLBase64(vector<float> data, const string &name, string &buf){
10039 0 : stringstream oss(stringstream::out | stringstream::binary);
10040 0 : string encoded;
10041 :
10042 0 : buf.append("<" + name + "> ");
10043 0 : int ndim = 1;
10044 0 : int dim1 = data.size();
10045 :
10046 0 : oss.write((char *)&ndim, sizeof(int));
10047 0 : oss.write((char *)&dim1, sizeof(dim1));
10048 :
10049 0 : for (unsigned int i = 0; i < data.size(); i++) {
10050 :
10051 0 : float v = data.at(i);
10052 :
10053 0 : oss.write((char *) &v, sizeof(v));
10054 : }
10055 :
10056 0 : Base64 b64;
10057 0 : b64.encode(oss.str(), encoded, false);
10058 0 : buf.append(encoded);
10059 0 : buf.append(" </" + name + "> ");
10060 0 : }
10061 :
10062 :
10063 0 : void Parser::toXMLBase64(vector< vector<float> > data, const string &name, string &buf){
10064 0 : stringstream oss(stringstream::out | stringstream::binary);
10065 0 : string encoded;
10066 :
10067 0 : buf.append("<" + name + "> ");
10068 0 : int ndim = 2;
10069 0 : int dim1 = data.size();
10070 0 : int dim2 = data.at(0).size();
10071 :
10072 0 : oss.write((char *)&ndim, sizeof(int));
10073 0 : oss.write((char *)&dim1, sizeof(dim1));
10074 0 : oss.write((char *)&dim2, sizeof(dim2));
10075 0 : for (unsigned int i = 0; i < data.size(); i++)
10076 0 : for (unsigned int j = 0; j < data.at(0).size(); j++) {
10077 :
10078 0 : float v = data.at(i).at(j);
10079 :
10080 0 : oss.write((char *) &v, sizeof(v));
10081 : }
10082 :
10083 0 : Base64 b64;
10084 0 : b64.encode(oss.str(), encoded, false);
10085 0 : buf.append(encoded);
10086 0 : buf.append(" </" + name + "> ")
10087 : ;
10088 0 : }
10089 :
10090 :
10091 0 : void Parser::toXMLBase64(vector< vector< vector<float> > > data, const string &name, string &buf){
10092 0 : stringstream oss(stringstream::out | stringstream::binary);
10093 0 : string encoded;
10094 :
10095 0 : buf.append("<" + name + "> ");
10096 0 : int ndim = 3;
10097 0 : int dim1 = data.size();
10098 0 : int dim2 = data.at(0).size();
10099 0 : int dim3 = data.at(0).at(0).size();
10100 :
10101 0 : oss.write((char *)&ndim, sizeof(int));
10102 0 : oss.write((char *)&dim1, sizeof(dim1));
10103 0 : oss.write((char *)&dim2, sizeof(dim2));
10104 0 : oss.write((char *)&dim3, sizeof(dim3));
10105 0 : for (unsigned int i = 0; i < data.size(); i++)
10106 0 : for (unsigned int j = 0; j < data.at(0).size(); j++)
10107 0 : for (unsigned int k = 0; k < data.at(0).at(0).size(); k++){
10108 :
10109 0 : float v = data.at(i).at(j).at(k);
10110 :
10111 0 : oss.write((char *) &v, sizeof(v));
10112 : }
10113 :
10114 0 : Base64 b64;
10115 0 : b64.encode(oss.str(), encoded, false);
10116 0 : buf.append(encoded);
10117 0 : buf.append(" </" + name + "> ")
10118 : ;
10119 0 : }
10120 :
10121 :
10122 0 : void Parser::toXMLBase64(vector<vector< vector< vector<float> > > >data, const string &name, string &buf){
10123 0 : stringstream oss(stringstream::out | stringstream::binary);
10124 0 : string encoded;
10125 :
10126 0 : buf.append("<" + name + "> ");
10127 0 : int ndim = 3;
10128 0 : int dim1 = data.size();
10129 0 : int dim2 = data.at(0).size();
10130 0 : int dim3 = data.at(0).at(0).size();
10131 0 : int dim4 = data.at(0).at(0).at(0).size();
10132 :
10133 0 : oss.write((char *)&ndim, sizeof(int));
10134 0 : oss.write((char *)&dim1, sizeof(dim1));
10135 0 : oss.write((char *)&dim2, sizeof(dim2));
10136 0 : oss.write((char *)&dim3, sizeof(dim3));
10137 0 : oss.write((char *)&dim4, sizeof(dim4));
10138 0 : for (unsigned int i = 0; i < data.size(); i++)
10139 0 : for (unsigned int j = 0; j < data.at(0).size(); j++)
10140 0 : for (unsigned int k = 0; k < data.at(0).at(0).size(); k++)
10141 0 : for (unsigned int l = 0; l < data.at(0).at(0).at(0).size(); l++){
10142 :
10143 0 : float v = data.at(i).at(j).at(k).at(l);
10144 :
10145 0 : oss.write((char *) &v, sizeof(v));
10146 : }
10147 :
10148 0 : Base64 b64;
10149 0 : b64.encode(oss.str(), encoded, false);
10150 0 : buf.append(encoded);
10151 0 : buf.append(" </" + name + "> ")
10152 : ;
10153 0 : }
10154 :
10155 :
10156 : #ifndef Float_CPP
10157 :
10158 : #define Float_CPP float
10159 :
10160 : #endif
10161 :
10162 :
10163 : #define TRYREAD(_stream_, _value_) _stream_.read((char*) &(_value_), sizeof(_value_)); \
10164 : if (_stream_.bad()) throw ConversionException("I/O error during read of " + name, tableName);
10165 :
10166 :
10167 0 : vector<float>& Parser::get1DFloatFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector<float>& attribute)
10168 : {
10169 0 : string xmlField = Parser::getField(xmlDoc,name);
10170 0 : if (xmlField.length() == 0) {
10171 0 : throw ConversionException("Error: Field \"" +
10172 0 : name + "\": Invalid XML syntax", tableName);
10173 : }
10174 :
10175 0 : string decodedString;
10176 0 : Base64 b64;
10177 0 : b64.decode(xmlField, decodedString);
10178 :
10179 0 : stringstream iss(stringstream::in | stringstream::binary);
10180 0 : iss.str(decodedString);
10181 :
10182 0 : attribute.clear();
10183 :
10184 0 : unsigned int ndim = 0;
10185 : //iss.read((char *)&ndim, sizeof(ndim));
10186 0 : TRYREAD(iss,ndim);
10187 :
10188 0 : unsigned int dim1 = 0;
10189 : //iss.read((char *)&dim1, sizeof(dim1));
10190 0 : TRYREAD(iss,dim1);
10191 0 : if (ndim != 1) {
10192 0 : throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 1.", tableName);
10193 : }
10194 :
10195 0 : attribute.reserve(dim1);
10196 :
10197 : Float_CPP v;
10198 0 : for (unsigned int i = 0; i < dim1; i++) {
10199 : //iss.read((char*) &v, sizeof(v));
10200 0 : TRYREAD(iss,v);
10201 :
10202 0 : attribute.push_back(v);
10203 :
10204 : }
10205 0 : return attribute;
10206 0 : }
10207 :
10208 :
10209 0 : vector <vector<float> >& Parser::get2DFloatFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector <vector<float> >& attribute)
10210 : {
10211 0 : string xmlField = Parser::getField(xmlDoc,name);
10212 0 : if (xmlField.length() == 0) {
10213 0 : throw ConversionException("Error: Field \"" +
10214 0 : name + "\": Invalid XML syntax", tableName);
10215 : }
10216 :
10217 0 : string decodedString;
10218 0 : Base64 b64;
10219 0 : b64.decode(xmlField, decodedString);
10220 :
10221 0 : stringstream iss(stringstream::in | stringstream::binary);
10222 0 : iss.str(decodedString);
10223 :
10224 0 : attribute.clear();
10225 :
10226 0 : unsigned int ndim = 0;
10227 : //iss.read((char *)&ndim, sizeof(ndim));
10228 0 : TRYREAD(iss,ndim);
10229 :
10230 0 : if (ndim != 2) {
10231 0 : throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 2.", tableName);
10232 : }
10233 :
10234 0 : unsigned int dim1 = 0;
10235 : //iss.read((char *)&dim1, sizeof(dim1));
10236 0 : TRYREAD(iss,dim1);
10237 :
10238 0 : unsigned int dim2 = 0;
10239 : //iss.read((char *)&dim2, sizeof(dim2));
10240 0 : TRYREAD(iss,dim2);
10241 :
10242 0 : attribute.reserve(dim1);
10243 :
10244 : Float_CPP v;
10245 0 : vector<float> aux2;
10246 0 : aux2.reserve(dim2);
10247 0 : for (unsigned int i = 0; i < dim1; i++) {
10248 0 : aux2.clear();
10249 0 : for (unsigned int j = 0; j < dim2; j++) {
10250 : //iss.read((char*) &v, sizeof(v));
10251 0 : TRYREAD(iss,v);
10252 :
10253 0 : aux2.push_back(v);
10254 :
10255 : }
10256 0 : attribute.push_back(aux2);
10257 : }
10258 0 : return attribute;
10259 0 : }
10260 :
10261 :
10262 0 : vector <vector <vector<float> > >& Parser::get3DFloatFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector <vector <vector<float> > >& attribute)
10263 : {
10264 0 : string xmlField = Parser::getField(xmlDoc,name);
10265 0 : if (xmlField.length() == 0) {
10266 0 : throw ConversionException("Error: Field \"" +
10267 0 : name + "\": Invalid XML syntax", tableName);
10268 : }
10269 :
10270 0 : string decodedString;
10271 0 : Base64 b64;
10272 0 : b64.decode(xmlField, decodedString);
10273 :
10274 0 : stringstream iss(stringstream::in | stringstream::binary);
10275 0 : iss.str(decodedString);
10276 :
10277 0 : attribute.clear();
10278 :
10279 0 : unsigned int ndim = 0;
10280 : //iss.read((char *)&ndim, sizeof(ndim));
10281 0 : TRYREAD(iss, ndim);
10282 0 : if (ndim != 3) {
10283 0 : throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 3.", tableName);
10284 : }
10285 :
10286 0 : unsigned int dim1 = 0;
10287 : //iss.read((char *)&dim1, sizeof(dim1));
10288 0 : TRYREAD(iss,dim1);
10289 :
10290 0 : unsigned int dim2 = 0;
10291 : //iss.read((char *)&dim2, sizeof(dim2));
10292 0 : TRYREAD(iss,dim2);
10293 :
10294 0 : unsigned int dim3 = 0;
10295 : //iss.read((char *)&dim2, sizeof(dim3));
10296 0 : TRYREAD(iss,dim3);
10297 :
10298 0 : attribute.reserve(dim1);
10299 :
10300 : Float_CPP v;
10301 0 : vector <vector<float> > aux2;
10302 0 : vector<float> aux3;
10303 0 : aux2.reserve(dim2);
10304 0 : aux3.reserve(dim3);
10305 :
10306 0 : for (unsigned int i = 0; i < dim1; i++) {
10307 0 : aux2.clear();
10308 0 : for (unsigned int j = 0; j < dim2; j++) {
10309 0 : aux3.clear();
10310 0 : for (unsigned int k = 0; k < dim3; k++) {
10311 : //iss.read((char*) &v, sizeof(v));
10312 0 : TRYREAD(iss,v);
10313 :
10314 0 : aux3.push_back(v);
10315 :
10316 : }
10317 0 : aux2.push_back(aux3);
10318 : }
10319 0 : attribute.push_back(aux2);
10320 : }
10321 0 : return attribute;
10322 : ;
10323 0 : }
10324 :
10325 :
10326 0 : vector <vector <vector <vector<float> > > >& Parser::get4DFloatFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector< vector <vector <vector<float> > > >& attribute)
10327 : {
10328 0 : string xmlField = Parser::getField(xmlDoc,name);
10329 0 : if (xmlField.length() == 0) {
10330 0 : throw ConversionException("Error: Field \"" +
10331 0 : name + "\": Invalid XML syntax", tableName);
10332 : }
10333 :
10334 0 : string decodedString;
10335 0 : Base64 b64;
10336 0 : b64.decode(xmlField, decodedString);
10337 :
10338 0 : stringstream iss(stringstream::in | stringstream::binary);
10339 0 : iss.str(decodedString);
10340 :
10341 0 : attribute.clear();
10342 :
10343 0 : unsigned int ndim = 0;
10344 : //iss.read((char *)&ndim, sizeof(ndim));
10345 0 : TRYREAD(iss, ndim);
10346 0 : if (ndim != 4) {
10347 0 : throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 4.", tableName);
10348 : }
10349 :
10350 0 : unsigned int dim1 = 0;
10351 : //iss.read((char *)&dim1, sizeof(dim1));
10352 0 : TRYREAD(iss,dim1);
10353 :
10354 0 : unsigned int dim2 = 0;
10355 : //iss.read((char *)&dim2, sizeof(dim2));
10356 0 : TRYREAD(iss,dim2);
10357 :
10358 0 : unsigned int dim3 = 0;
10359 : //iss.read((char *)&dim2, sizeof(dim3));
10360 0 : TRYREAD(iss,dim3);
10361 :
10362 0 : unsigned int dim4 = 0;
10363 : //iss.read((char *)&dim2, sizeof(dim3));
10364 0 : TRYREAD(iss,dim3);
10365 :
10366 0 : attribute.reserve(dim1);
10367 :
10368 : Float_CPP v;
10369 0 : vector <vector <vector<float> > > aux2;
10370 0 : vector <vector<float> > aux3;
10371 0 : vector<float> aux4;
10372 0 : aux2.reserve(dim2);
10373 0 : aux3.reserve(dim3);
10374 0 : aux4.reserve(dim4);
10375 :
10376 0 : for (unsigned int i = 0; i < dim1; i++) {
10377 0 : aux2.clear();
10378 0 : for (unsigned int j = 0; j < dim2; j++) {
10379 0 : aux3.clear();
10380 0 : for (unsigned int k = 0; k < dim3; k++) {
10381 0 : aux4.clear();
10382 0 : for (unsigned int l = 0; l < dim4; l++) {
10383 : //iss.read((char*) &v, sizeof(v));
10384 0 : TRYREAD(iss,v);
10385 :
10386 0 : aux4.push_back(v);
10387 :
10388 : }
10389 0 : aux3.push_back(aux4);
10390 : }
10391 0 : aux2.push_back(aux3);
10392 : }
10393 0 : attribute.push_back(aux2);
10394 : }
10395 0 : return attribute;
10396 : ;
10397 0 : }
10398 :
10399 :
10400 :
10401 :
10402 :
10403 :
10404 :
10405 0 : void Parser::toXMLBase64(vector<double> data, const string &name, string &buf){
10406 0 : stringstream oss(stringstream::out | stringstream::binary);
10407 0 : string encoded;
10408 :
10409 0 : buf.append("<" + name + "> ");
10410 0 : int ndim = 1;
10411 0 : int dim1 = data.size();
10412 :
10413 0 : oss.write((char *)&ndim, sizeof(int));
10414 0 : oss.write((char *)&dim1, sizeof(dim1));
10415 :
10416 0 : for (unsigned int i = 0; i < data.size(); i++) {
10417 :
10418 0 : double v = data.at(i);
10419 :
10420 0 : oss.write((char *) &v, sizeof(v));
10421 : }
10422 :
10423 0 : Base64 b64;
10424 0 : b64.encode(oss.str(), encoded, false);
10425 0 : buf.append(encoded);
10426 0 : buf.append(" </" + name + "> ");
10427 0 : }
10428 :
10429 :
10430 0 : void Parser::toXMLBase64(vector< vector<double> > data, const string &name, string &buf){
10431 0 : stringstream oss(stringstream::out | stringstream::binary);
10432 0 : string encoded;
10433 :
10434 0 : buf.append("<" + name + "> ");
10435 0 : int ndim = 2;
10436 0 : int dim1 = data.size();
10437 0 : int dim2 = data.at(0).size();
10438 :
10439 0 : oss.write((char *)&ndim, sizeof(int));
10440 0 : oss.write((char *)&dim1, sizeof(dim1));
10441 0 : oss.write((char *)&dim2, sizeof(dim2));
10442 0 : for (unsigned int i = 0; i < data.size(); i++)
10443 0 : for (unsigned int j = 0; j < data.at(0).size(); j++) {
10444 :
10445 0 : double v = data.at(i).at(j);
10446 :
10447 0 : oss.write((char *) &v, sizeof(v));
10448 : }
10449 :
10450 0 : Base64 b64;
10451 0 : b64.encode(oss.str(), encoded, false);
10452 0 : buf.append(encoded);
10453 0 : buf.append(" </" + name + "> ")
10454 : ;
10455 0 : }
10456 :
10457 :
10458 0 : void Parser::toXMLBase64(vector< vector< vector<double> > > data, const string &name, string &buf){
10459 0 : stringstream oss(stringstream::out | stringstream::binary);
10460 0 : string encoded;
10461 :
10462 0 : buf.append("<" + name + "> ");
10463 0 : int ndim = 3;
10464 0 : int dim1 = data.size();
10465 0 : int dim2 = data.at(0).size();
10466 0 : int dim3 = data.at(0).at(0).size();
10467 :
10468 0 : oss.write((char *)&ndim, sizeof(int));
10469 0 : oss.write((char *)&dim1, sizeof(dim1));
10470 0 : oss.write((char *)&dim2, sizeof(dim2));
10471 0 : oss.write((char *)&dim3, sizeof(dim3));
10472 0 : for (unsigned int i = 0; i < data.size(); i++)
10473 0 : for (unsigned int j = 0; j < data.at(0).size(); j++)
10474 0 : for (unsigned int k = 0; k < data.at(0).at(0).size(); k++){
10475 :
10476 0 : double v = data.at(i).at(j).at(k);
10477 :
10478 0 : oss.write((char *) &v, sizeof(v));
10479 : }
10480 :
10481 0 : Base64 b64;
10482 0 : b64.encode(oss.str(), encoded, false);
10483 0 : buf.append(encoded);
10484 0 : buf.append(" </" + name + "> ")
10485 : ;
10486 0 : }
10487 :
10488 :
10489 0 : void Parser::toXMLBase64(vector<vector< vector< vector<double> > > >data, const string &name, string &buf){
10490 0 : stringstream oss(stringstream::out | stringstream::binary);
10491 0 : string encoded;
10492 :
10493 0 : buf.append("<" + name + "> ");
10494 0 : int ndim = 3;
10495 0 : int dim1 = data.size();
10496 0 : int dim2 = data.at(0).size();
10497 0 : int dim3 = data.at(0).at(0).size();
10498 0 : int dim4 = data.at(0).at(0).at(0).size();
10499 :
10500 0 : oss.write((char *)&ndim, sizeof(int));
10501 0 : oss.write((char *)&dim1, sizeof(dim1));
10502 0 : oss.write((char *)&dim2, sizeof(dim2));
10503 0 : oss.write((char *)&dim3, sizeof(dim3));
10504 0 : oss.write((char *)&dim4, sizeof(dim4));
10505 0 : for (unsigned int i = 0; i < data.size(); i++)
10506 0 : for (unsigned int j = 0; j < data.at(0).size(); j++)
10507 0 : for (unsigned int k = 0; k < data.at(0).at(0).size(); k++)
10508 0 : for (unsigned int l = 0; l < data.at(0).at(0).at(0).size(); l++){
10509 :
10510 0 : double v = data.at(i).at(j).at(k).at(l);
10511 :
10512 0 : oss.write((char *) &v, sizeof(v));
10513 : }
10514 :
10515 0 : Base64 b64;
10516 0 : b64.encode(oss.str(), encoded, false);
10517 0 : buf.append(encoded);
10518 0 : buf.append(" </" + name + "> ")
10519 : ;
10520 0 : }
10521 :
10522 :
10523 : #ifndef Double_CPP
10524 :
10525 : #define Double_CPP double
10526 :
10527 : #endif
10528 :
10529 :
10530 : #define TRYREAD(_stream_, _value_) _stream_.read((char*) &(_value_), sizeof(_value_)); \
10531 : if (_stream_.bad()) throw ConversionException("I/O error during read of " + name, tableName);
10532 :
10533 :
10534 0 : vector<double>& Parser::get1DDoubleFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector<double>& attribute)
10535 : {
10536 0 : string xmlField = Parser::getField(xmlDoc,name);
10537 0 : if (xmlField.length() == 0) {
10538 0 : throw ConversionException("Error: Field \"" +
10539 0 : name + "\": Invalid XML syntax", tableName);
10540 : }
10541 :
10542 0 : string decodedString;
10543 0 : Base64 b64;
10544 0 : b64.decode(xmlField, decodedString);
10545 :
10546 0 : stringstream iss(stringstream::in | stringstream::binary);
10547 0 : iss.str(decodedString);
10548 :
10549 0 : attribute.clear();
10550 :
10551 0 : unsigned int ndim = 0;
10552 : //iss.read((char *)&ndim, sizeof(ndim));
10553 0 : TRYREAD(iss,ndim);
10554 :
10555 0 : unsigned int dim1 = 0;
10556 : //iss.read((char *)&dim1, sizeof(dim1));
10557 0 : TRYREAD(iss,dim1);
10558 0 : if (ndim != 1) {
10559 0 : throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 1.", tableName);
10560 : }
10561 :
10562 0 : attribute.reserve(dim1);
10563 :
10564 : Double_CPP v;
10565 0 : for (unsigned int i = 0; i < dim1; i++) {
10566 : //iss.read((char*) &v, sizeof(v));
10567 0 : TRYREAD(iss,v);
10568 :
10569 0 : attribute.push_back(v);
10570 :
10571 : }
10572 0 : return attribute;
10573 0 : }
10574 :
10575 :
10576 0 : vector <vector<double> >& Parser::get2DDoubleFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector <vector<double> >& attribute)
10577 : {
10578 0 : string xmlField = Parser::getField(xmlDoc,name);
10579 0 : if (xmlField.length() == 0) {
10580 0 : throw ConversionException("Error: Field \"" +
10581 0 : name + "\": Invalid XML syntax", tableName);
10582 : }
10583 :
10584 0 : string decodedString;
10585 0 : Base64 b64;
10586 0 : b64.decode(xmlField, decodedString);
10587 :
10588 0 : stringstream iss(stringstream::in | stringstream::binary);
10589 0 : iss.str(decodedString);
10590 :
10591 0 : attribute.clear();
10592 :
10593 0 : unsigned int ndim = 0;
10594 : //iss.read((char *)&ndim, sizeof(ndim));
10595 0 : TRYREAD(iss,ndim);
10596 :
10597 0 : if (ndim != 2) {
10598 0 : throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 2.", tableName);
10599 : }
10600 :
10601 0 : unsigned int dim1 = 0;
10602 : //iss.read((char *)&dim1, sizeof(dim1));
10603 0 : TRYREAD(iss,dim1);
10604 :
10605 0 : unsigned int dim2 = 0;
10606 : //iss.read((char *)&dim2, sizeof(dim2));
10607 0 : TRYREAD(iss,dim2);
10608 :
10609 0 : attribute.reserve(dim1);
10610 :
10611 : Double_CPP v;
10612 0 : vector<double> aux2;
10613 0 : aux2.reserve(dim2);
10614 0 : for (unsigned int i = 0; i < dim1; i++) {
10615 0 : aux2.clear();
10616 0 : for (unsigned int j = 0; j < dim2; j++) {
10617 : //iss.read((char*) &v, sizeof(v));
10618 0 : TRYREAD(iss,v);
10619 :
10620 0 : aux2.push_back(v);
10621 :
10622 : }
10623 0 : attribute.push_back(aux2);
10624 : }
10625 0 : return attribute;
10626 0 : }
10627 :
10628 :
10629 0 : vector <vector <vector<double> > >& Parser::get3DDoubleFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector <vector <vector<double> > >& attribute)
10630 : {
10631 0 : string xmlField = Parser::getField(xmlDoc,name);
10632 0 : if (xmlField.length() == 0) {
10633 0 : throw ConversionException("Error: Field \"" +
10634 0 : name + "\": Invalid XML syntax", tableName);
10635 : }
10636 :
10637 0 : string decodedString;
10638 0 : Base64 b64;
10639 0 : b64.decode(xmlField, decodedString);
10640 :
10641 0 : stringstream iss(stringstream::in | stringstream::binary);
10642 0 : iss.str(decodedString);
10643 :
10644 0 : attribute.clear();
10645 :
10646 0 : unsigned int ndim = 0;
10647 : //iss.read((char *)&ndim, sizeof(ndim));
10648 0 : TRYREAD(iss, ndim);
10649 0 : if (ndim != 3) {
10650 0 : throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 3.", tableName);
10651 : }
10652 :
10653 0 : unsigned int dim1 = 0;
10654 : //iss.read((char *)&dim1, sizeof(dim1));
10655 0 : TRYREAD(iss,dim1);
10656 :
10657 0 : unsigned int dim2 = 0;
10658 : //iss.read((char *)&dim2, sizeof(dim2));
10659 0 : TRYREAD(iss,dim2);
10660 :
10661 0 : unsigned int dim3 = 0;
10662 : //iss.read((char *)&dim2, sizeof(dim3));
10663 0 : TRYREAD(iss,dim3);
10664 :
10665 0 : attribute.reserve(dim1);
10666 :
10667 : Double_CPP v;
10668 0 : vector <vector<double> > aux2;
10669 0 : vector<double> aux3;
10670 0 : aux2.reserve(dim2);
10671 0 : aux3.reserve(dim3);
10672 :
10673 0 : for (unsigned int i = 0; i < dim1; i++) {
10674 0 : aux2.clear();
10675 0 : for (unsigned int j = 0; j < dim2; j++) {
10676 0 : aux3.clear();
10677 0 : for (unsigned int k = 0; k < dim3; k++) {
10678 : //iss.read((char*) &v, sizeof(v));
10679 0 : TRYREAD(iss,v);
10680 :
10681 0 : aux3.push_back(v);
10682 :
10683 : }
10684 0 : aux2.push_back(aux3);
10685 : }
10686 0 : attribute.push_back(aux2);
10687 : }
10688 0 : return attribute;
10689 : ;
10690 0 : }
10691 :
10692 :
10693 0 : vector <vector <vector <vector<double> > > >& Parser::get4DDoubleFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector< vector <vector <vector<double> > > >& attribute)
10694 : {
10695 0 : string xmlField = Parser::getField(xmlDoc,name);
10696 0 : if (xmlField.length() == 0) {
10697 0 : throw ConversionException("Error: Field \"" +
10698 0 : name + "\": Invalid XML syntax", tableName);
10699 : }
10700 :
10701 0 : string decodedString;
10702 0 : Base64 b64;
10703 0 : b64.decode(xmlField, decodedString);
10704 :
10705 0 : stringstream iss(stringstream::in | stringstream::binary);
10706 0 : iss.str(decodedString);
10707 :
10708 0 : attribute.clear();
10709 :
10710 0 : unsigned int ndim = 0;
10711 : //iss.read((char *)&ndim, sizeof(ndim));
10712 0 : TRYREAD(iss, ndim);
10713 0 : if (ndim != 4) {
10714 0 : throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 4.", tableName);
10715 : }
10716 :
10717 0 : unsigned int dim1 = 0;
10718 : //iss.read((char *)&dim1, sizeof(dim1));
10719 0 : TRYREAD(iss,dim1);
10720 :
10721 0 : unsigned int dim2 = 0;
10722 : //iss.read((char *)&dim2, sizeof(dim2));
10723 0 : TRYREAD(iss,dim2);
10724 :
10725 0 : unsigned int dim3 = 0;
10726 : //iss.read((char *)&dim2, sizeof(dim3));
10727 0 : TRYREAD(iss,dim3);
10728 :
10729 0 : unsigned int dim4 = 0;
10730 : //iss.read((char *)&dim2, sizeof(dim3));
10731 0 : TRYREAD(iss,dim3);
10732 :
10733 0 : attribute.reserve(dim1);
10734 :
10735 : Double_CPP v;
10736 0 : vector <vector <vector<double> > > aux2;
10737 0 : vector <vector<double> > aux3;
10738 0 : vector<double> aux4;
10739 0 : aux2.reserve(dim2);
10740 0 : aux3.reserve(dim3);
10741 0 : aux4.reserve(dim4);
10742 :
10743 0 : for (unsigned int i = 0; i < dim1; i++) {
10744 0 : aux2.clear();
10745 0 : for (unsigned int j = 0; j < dim2; j++) {
10746 0 : aux3.clear();
10747 0 : for (unsigned int k = 0; k < dim3; k++) {
10748 0 : aux4.clear();
10749 0 : for (unsigned int l = 0; l < dim4; l++) {
10750 : //iss.read((char*) &v, sizeof(v));
10751 0 : TRYREAD(iss,v);
10752 :
10753 0 : aux4.push_back(v);
10754 :
10755 : }
10756 0 : aux3.push_back(aux4);
10757 : }
10758 0 : aux2.push_back(aux3);
10759 : }
10760 0 : attribute.push_back(aux2);
10761 : }
10762 0 : return attribute;
10763 : ;
10764 0 : }
10765 :
10766 :
10767 :
10768 :
10769 :
10770 :
10771 :
10772 0 : void Parser::toXMLBase64(vector<unsigned char> data, const string &name, string &buf){
10773 0 : stringstream oss(stringstream::out | stringstream::binary);
10774 0 : string encoded;
10775 :
10776 0 : buf.append("<" + name + "> ");
10777 0 : int ndim = 1;
10778 0 : int dim1 = data.size();
10779 :
10780 0 : oss.write((char *)&ndim, sizeof(int));
10781 0 : oss.write((char *)&dim1, sizeof(dim1));
10782 :
10783 0 : for (unsigned int i = 0; i < data.size(); i++) {
10784 :
10785 0 : unsigned char v = data.at(i);
10786 :
10787 0 : oss.write((char *) &v, sizeof(v));
10788 : }
10789 :
10790 0 : Base64 b64;
10791 0 : b64.encode(oss.str(), encoded, false);
10792 0 : buf.append(encoded);
10793 0 : buf.append(" </" + name + "> ");
10794 0 : }
10795 :
10796 :
10797 0 : void Parser::toXMLBase64(vector< vector<unsigned char> > data, const string &name, string &buf){
10798 0 : stringstream oss(stringstream::out | stringstream::binary);
10799 0 : string encoded;
10800 :
10801 0 : buf.append("<" + name + "> ");
10802 0 : int ndim = 2;
10803 0 : int dim1 = data.size();
10804 0 : int dim2 = data.at(0).size();
10805 :
10806 0 : oss.write((char *)&ndim, sizeof(int));
10807 0 : oss.write((char *)&dim1, sizeof(dim1));
10808 0 : oss.write((char *)&dim2, sizeof(dim2));
10809 0 : for (unsigned int i = 0; i < data.size(); i++)
10810 0 : for (unsigned int j = 0; j < data.at(0).size(); j++) {
10811 :
10812 0 : unsigned char v = data.at(i).at(j);
10813 :
10814 0 : oss.write((char *) &v, sizeof(v));
10815 : }
10816 :
10817 0 : Base64 b64;
10818 0 : b64.encode(oss.str(), encoded, false);
10819 0 : buf.append(encoded);
10820 0 : buf.append(" </" + name + "> ")
10821 : ;
10822 0 : }
10823 :
10824 :
10825 0 : void Parser::toXMLBase64(vector< vector< vector<unsigned char> > > data, const string &name, string &buf){
10826 0 : stringstream oss(stringstream::out | stringstream::binary);
10827 0 : string encoded;
10828 :
10829 0 : buf.append("<" + name + "> ");
10830 0 : int ndim = 3;
10831 0 : int dim1 = data.size();
10832 0 : int dim2 = data.at(0).size();
10833 0 : int dim3 = data.at(0).at(0).size();
10834 :
10835 0 : oss.write((char *)&ndim, sizeof(int));
10836 0 : oss.write((char *)&dim1, sizeof(dim1));
10837 0 : oss.write((char *)&dim2, sizeof(dim2));
10838 0 : oss.write((char *)&dim3, sizeof(dim3));
10839 0 : for (unsigned int i = 0; i < data.size(); i++)
10840 0 : for (unsigned int j = 0; j < data.at(0).size(); j++)
10841 0 : for (unsigned int k = 0; k < data.at(0).at(0).size(); k++){
10842 :
10843 0 : unsigned char v = data.at(i).at(j).at(k);
10844 :
10845 0 : oss.write((char *) &v, sizeof(v));
10846 : }
10847 :
10848 0 : Base64 b64;
10849 0 : b64.encode(oss.str(), encoded, false);
10850 0 : buf.append(encoded);
10851 0 : buf.append(" </" + name + "> ")
10852 : ;
10853 0 : }
10854 :
10855 :
10856 0 : void Parser::toXMLBase64(vector<vector< vector< vector<unsigned char> > > >data, const string &name, string &buf){
10857 0 : stringstream oss(stringstream::out | stringstream::binary);
10858 0 : string encoded;
10859 :
10860 0 : buf.append("<" + name + "> ");
10861 0 : int ndim = 3;
10862 0 : int dim1 = data.size();
10863 0 : int dim2 = data.at(0).size();
10864 0 : int dim3 = data.at(0).at(0).size();
10865 0 : int dim4 = data.at(0).at(0).at(0).size();
10866 :
10867 0 : oss.write((char *)&ndim, sizeof(int));
10868 0 : oss.write((char *)&dim1, sizeof(dim1));
10869 0 : oss.write((char *)&dim2, sizeof(dim2));
10870 0 : oss.write((char *)&dim3, sizeof(dim3));
10871 0 : oss.write((char *)&dim4, sizeof(dim4));
10872 0 : for (unsigned int i = 0; i < data.size(); i++)
10873 0 : for (unsigned int j = 0; j < data.at(0).size(); j++)
10874 0 : for (unsigned int k = 0; k < data.at(0).at(0).size(); k++)
10875 0 : for (unsigned int l = 0; l < data.at(0).at(0).at(0).size(); l++){
10876 :
10877 0 : unsigned char v = data.at(i).at(j).at(k).at(l);
10878 :
10879 0 : oss.write((char *) &v, sizeof(v));
10880 : }
10881 :
10882 0 : Base64 b64;
10883 0 : b64.encode(oss.str(), encoded, false);
10884 0 : buf.append(encoded);
10885 0 : buf.append(" </" + name + "> ")
10886 : ;
10887 0 : }
10888 :
10889 :
10890 : #ifndef Char_CPP
10891 :
10892 : #define Char_CPP char
10893 :
10894 : #endif
10895 :
10896 :
10897 : #define TRYREAD(_stream_, _value_) _stream_.read((char*) &(_value_), sizeof(_value_)); \
10898 : if (_stream_.bad()) throw ConversionException("I/O error during read of " + name, tableName);
10899 :
10900 :
10901 0 : vector<unsigned char>& Parser::get1DCharacterFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector<unsigned char>& attribute)
10902 : {
10903 0 : string xmlField = Parser::getField(xmlDoc,name);
10904 0 : if (xmlField.length() == 0) {
10905 0 : throw ConversionException("Error: Field \"" +
10906 0 : name + "\": Invalid XML syntax", tableName);
10907 : }
10908 :
10909 0 : string decodedString;
10910 0 : Base64 b64;
10911 0 : b64.decode(xmlField, decodedString);
10912 :
10913 0 : stringstream iss(stringstream::in | stringstream::binary);
10914 0 : iss.str(decodedString);
10915 :
10916 0 : attribute.clear();
10917 :
10918 0 : unsigned int ndim = 0;
10919 : //iss.read((char *)&ndim, sizeof(ndim));
10920 0 : TRYREAD(iss,ndim);
10921 :
10922 0 : unsigned int dim1 = 0;
10923 : //iss.read((char *)&dim1, sizeof(dim1));
10924 0 : TRYREAD(iss,dim1);
10925 0 : if (ndim != 1) {
10926 0 : throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 1.", tableName);
10927 : }
10928 :
10929 0 : attribute.reserve(dim1);
10930 :
10931 : Char_CPP v;
10932 0 : for (unsigned int i = 0; i < dim1; i++) {
10933 : //iss.read((char*) &v, sizeof(v));
10934 0 : TRYREAD(iss,v);
10935 :
10936 0 : attribute.push_back(v);
10937 :
10938 : }
10939 0 : return attribute;
10940 0 : }
10941 :
10942 :
10943 0 : vector <vector<unsigned char> >& Parser::get2DCharacterFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector <vector<unsigned char> >& attribute)
10944 : {
10945 0 : string xmlField = Parser::getField(xmlDoc,name);
10946 0 : if (xmlField.length() == 0) {
10947 0 : throw ConversionException("Error: Field \"" +
10948 0 : name + "\": Invalid XML syntax", tableName);
10949 : }
10950 :
10951 0 : string decodedString;
10952 0 : Base64 b64;
10953 0 : b64.decode(xmlField, decodedString);
10954 :
10955 0 : stringstream iss(stringstream::in | stringstream::binary);
10956 0 : iss.str(decodedString);
10957 :
10958 0 : attribute.clear();
10959 :
10960 0 : unsigned int ndim = 0;
10961 : //iss.read((char *)&ndim, sizeof(ndim));
10962 0 : TRYREAD(iss,ndim);
10963 :
10964 0 : if (ndim != 2) {
10965 0 : throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 2.", tableName);
10966 : }
10967 :
10968 0 : unsigned int dim1 = 0;
10969 : //iss.read((char *)&dim1, sizeof(dim1));
10970 0 : TRYREAD(iss,dim1);
10971 :
10972 0 : unsigned int dim2 = 0;
10973 : //iss.read((char *)&dim2, sizeof(dim2));
10974 0 : TRYREAD(iss,dim2);
10975 :
10976 0 : attribute.reserve(dim1);
10977 :
10978 : Char_CPP v;
10979 0 : vector<unsigned char> aux2;
10980 0 : aux2.reserve(dim2);
10981 0 : for (unsigned int i = 0; i < dim1; i++) {
10982 0 : aux2.clear();
10983 0 : for (unsigned int j = 0; j < dim2; j++) {
10984 : //iss.read((char*) &v, sizeof(v));
10985 0 : TRYREAD(iss,v);
10986 :
10987 0 : aux2.push_back(v);
10988 :
10989 : }
10990 0 : attribute.push_back(aux2);
10991 : }
10992 0 : return attribute;
10993 0 : }
10994 :
10995 :
10996 0 : vector <vector <vector<unsigned char> > >& Parser::get3DCharacterFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector <vector <vector<unsigned char> > >& attribute)
10997 : {
10998 0 : string xmlField = Parser::getField(xmlDoc,name);
10999 0 : if (xmlField.length() == 0) {
11000 0 : throw ConversionException("Error: Field \"" +
11001 0 : name + "\": Invalid XML syntax", tableName);
11002 : }
11003 :
11004 0 : string decodedString;
11005 0 : Base64 b64;
11006 0 : b64.decode(xmlField, decodedString);
11007 :
11008 0 : stringstream iss(stringstream::in | stringstream::binary);
11009 0 : iss.str(decodedString);
11010 :
11011 0 : attribute.clear();
11012 :
11013 0 : unsigned int ndim = 0;
11014 : //iss.read((char *)&ndim, sizeof(ndim));
11015 0 : TRYREAD(iss, ndim);
11016 0 : if (ndim != 3) {
11017 0 : throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 3.", tableName);
11018 : }
11019 :
11020 0 : unsigned int dim1 = 0;
11021 : //iss.read((char *)&dim1, sizeof(dim1));
11022 0 : TRYREAD(iss,dim1);
11023 :
11024 0 : unsigned int dim2 = 0;
11025 : //iss.read((char *)&dim2, sizeof(dim2));
11026 0 : TRYREAD(iss,dim2);
11027 :
11028 0 : unsigned int dim3 = 0;
11029 : //iss.read((char *)&dim2, sizeof(dim3));
11030 0 : TRYREAD(iss,dim3);
11031 :
11032 0 : attribute.reserve(dim1);
11033 :
11034 : Char_CPP v;
11035 0 : vector <vector<unsigned char> > aux2;
11036 0 : vector<unsigned char> aux3;
11037 0 : aux2.reserve(dim2);
11038 0 : aux3.reserve(dim3);
11039 :
11040 0 : for (unsigned int i = 0; i < dim1; i++) {
11041 0 : aux2.clear();
11042 0 : for (unsigned int j = 0; j < dim2; j++) {
11043 0 : aux3.clear();
11044 0 : for (unsigned int k = 0; k < dim3; k++) {
11045 : //iss.read((char*) &v, sizeof(v));
11046 0 : TRYREAD(iss,v);
11047 :
11048 0 : aux3.push_back(v);
11049 :
11050 : }
11051 0 : aux2.push_back(aux3);
11052 : }
11053 0 : attribute.push_back(aux2);
11054 : }
11055 0 : return attribute;
11056 : ;
11057 0 : }
11058 :
11059 :
11060 0 : vector <vector <vector <vector<unsigned char> > > >& Parser::get4DCharacterFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector< vector <vector <vector<unsigned char> > > >& attribute)
11061 : {
11062 0 : string xmlField = Parser::getField(xmlDoc,name);
11063 0 : if (xmlField.length() == 0) {
11064 0 : throw ConversionException("Error: Field \"" +
11065 0 : name + "\": Invalid XML syntax", tableName);
11066 : }
11067 :
11068 0 : string decodedString;
11069 0 : Base64 b64;
11070 0 : b64.decode(xmlField, decodedString);
11071 :
11072 0 : stringstream iss(stringstream::in | stringstream::binary);
11073 0 : iss.str(decodedString);
11074 :
11075 0 : attribute.clear();
11076 :
11077 0 : unsigned int ndim = 0;
11078 : //iss.read((char *)&ndim, sizeof(ndim));
11079 0 : TRYREAD(iss, ndim);
11080 0 : if (ndim != 4) {
11081 0 : throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 4.", tableName);
11082 : }
11083 :
11084 0 : unsigned int dim1 = 0;
11085 : //iss.read((char *)&dim1, sizeof(dim1));
11086 0 : TRYREAD(iss,dim1);
11087 :
11088 0 : unsigned int dim2 = 0;
11089 : //iss.read((char *)&dim2, sizeof(dim2));
11090 0 : TRYREAD(iss,dim2);
11091 :
11092 0 : unsigned int dim3 = 0;
11093 : //iss.read((char *)&dim2, sizeof(dim3));
11094 0 : TRYREAD(iss,dim3);
11095 :
11096 0 : unsigned int dim4 = 0;
11097 : //iss.read((char *)&dim2, sizeof(dim3));
11098 0 : TRYREAD(iss,dim3);
11099 :
11100 0 : attribute.reserve(dim1);
11101 :
11102 : Char_CPP v;
11103 0 : vector <vector <vector<unsigned char> > > aux2;
11104 0 : vector <vector<unsigned char> > aux3;
11105 0 : vector<unsigned char> aux4;
11106 0 : aux2.reserve(dim2);
11107 0 : aux3.reserve(dim3);
11108 0 : aux4.reserve(dim4);
11109 :
11110 0 : for (unsigned int i = 0; i < dim1; i++) {
11111 0 : aux2.clear();
11112 0 : for (unsigned int j = 0; j < dim2; j++) {
11113 0 : aux3.clear();
11114 0 : for (unsigned int k = 0; k < dim3; k++) {
11115 0 : aux4.clear();
11116 0 : for (unsigned int l = 0; l < dim4; l++) {
11117 : //iss.read((char*) &v, sizeof(v));
11118 0 : TRYREAD(iss,v);
11119 :
11120 0 : aux4.push_back(v);
11121 :
11122 : }
11123 0 : aux3.push_back(aux4);
11124 : }
11125 0 : aux2.push_back(aux3);
11126 : }
11127 0 : attribute.push_back(aux2);
11128 : }
11129 0 : return attribute;
11130 : ;
11131 0 : }
11132 :
11133 :
11134 :
11135 :
11136 :
11137 :
11138 :
11139 0 : void Parser::toXMLBase64(vector<bool> data, const string &name, string &buf){
11140 0 : stringstream oss(stringstream::out | stringstream::binary);
11141 0 : string encoded;
11142 :
11143 0 : buf.append("<" + name + "> ");
11144 0 : int ndim = 1;
11145 0 : int dim1 = data.size();
11146 :
11147 0 : oss.write((char *)&ndim, sizeof(int));
11148 0 : oss.write((char *)&dim1, sizeof(dim1));
11149 :
11150 0 : for (unsigned int i = 0; i < data.size(); i++) {
11151 :
11152 0 : bool v = data.at(i);
11153 :
11154 0 : oss.write((char *) &v, sizeof(v));
11155 : }
11156 :
11157 0 : Base64 b64;
11158 0 : b64.encode(oss.str(), encoded, false);
11159 0 : buf.append(encoded);
11160 0 : buf.append(" </" + name + "> ");
11161 0 : }
11162 :
11163 :
11164 0 : void Parser::toXMLBase64(vector< vector<bool> > data, const string &name, string &buf){
11165 0 : stringstream oss(stringstream::out | stringstream::binary);
11166 0 : string encoded;
11167 :
11168 0 : buf.append("<" + name + "> ");
11169 0 : int ndim = 2;
11170 0 : int dim1 = data.size();
11171 0 : int dim2 = data.at(0).size();
11172 :
11173 0 : oss.write((char *)&ndim, sizeof(int));
11174 0 : oss.write((char *)&dim1, sizeof(dim1));
11175 0 : oss.write((char *)&dim2, sizeof(dim2));
11176 0 : for (unsigned int i = 0; i < data.size(); i++)
11177 0 : for (unsigned int j = 0; j < data.at(0).size(); j++) {
11178 :
11179 0 : bool v = data.at(i).at(j);
11180 :
11181 0 : oss.write((char *) &v, sizeof(v));
11182 : }
11183 :
11184 0 : Base64 b64;
11185 0 : b64.encode(oss.str(), encoded, false);
11186 0 : buf.append(encoded);
11187 0 : buf.append(" </" + name + "> ")
11188 : ;
11189 0 : }
11190 :
11191 :
11192 0 : void Parser::toXMLBase64(vector< vector< vector<bool> > > data, const string &name, string &buf){
11193 0 : stringstream oss(stringstream::out | stringstream::binary);
11194 0 : string encoded;
11195 :
11196 0 : buf.append("<" + name + "> ");
11197 0 : int ndim = 3;
11198 0 : int dim1 = data.size();
11199 0 : int dim2 = data.at(0).size();
11200 0 : int dim3 = data.at(0).at(0).size();
11201 :
11202 0 : oss.write((char *)&ndim, sizeof(int));
11203 0 : oss.write((char *)&dim1, sizeof(dim1));
11204 0 : oss.write((char *)&dim2, sizeof(dim2));
11205 0 : oss.write((char *)&dim3, sizeof(dim3));
11206 0 : for (unsigned int i = 0; i < data.size(); i++)
11207 0 : for (unsigned int j = 0; j < data.at(0).size(); j++)
11208 0 : for (unsigned int k = 0; k < data.at(0).at(0).size(); k++){
11209 :
11210 0 : bool v = data.at(i).at(j).at(k);
11211 :
11212 0 : oss.write((char *) &v, sizeof(v));
11213 : }
11214 :
11215 0 : Base64 b64;
11216 0 : b64.encode(oss.str(), encoded, false);
11217 0 : buf.append(encoded);
11218 0 : buf.append(" </" + name + "> ")
11219 : ;
11220 0 : }
11221 :
11222 :
11223 0 : void Parser::toXMLBase64(vector<vector< vector< vector<bool> > > >data, const string &name, string &buf){
11224 0 : stringstream oss(stringstream::out | stringstream::binary);
11225 0 : string encoded;
11226 :
11227 0 : buf.append("<" + name + "> ");
11228 0 : int ndim = 3;
11229 0 : int dim1 = data.size();
11230 0 : int dim2 = data.at(0).size();
11231 0 : int dim3 = data.at(0).at(0).size();
11232 0 : int dim4 = data.at(0).at(0).at(0).size();
11233 :
11234 0 : oss.write((char *)&ndim, sizeof(int));
11235 0 : oss.write((char *)&dim1, sizeof(dim1));
11236 0 : oss.write((char *)&dim2, sizeof(dim2));
11237 0 : oss.write((char *)&dim3, sizeof(dim3));
11238 0 : oss.write((char *)&dim4, sizeof(dim4));
11239 0 : for (unsigned int i = 0; i < data.size(); i++)
11240 0 : for (unsigned int j = 0; j < data.at(0).size(); j++)
11241 0 : for (unsigned int k = 0; k < data.at(0).at(0).size(); k++)
11242 0 : for (unsigned int l = 0; l < data.at(0).at(0).at(0).size(); l++){
11243 :
11244 0 : bool v = data.at(i).at(j).at(k).at(l);
11245 :
11246 0 : oss.write((char *) &v, sizeof(v));
11247 : }
11248 :
11249 0 : Base64 b64;
11250 0 : b64.encode(oss.str(), encoded, false);
11251 0 : buf.append(encoded);
11252 0 : buf.append(" </" + name + "> ")
11253 : ;
11254 0 : }
11255 :
11256 :
11257 : #ifndef Boolean_CPP
11258 :
11259 : #define Boolean_CPP bool
11260 :
11261 : #endif
11262 :
11263 :
11264 : #define TRYREAD(_stream_, _value_) _stream_.read((char*) &(_value_), sizeof(_value_)); \
11265 : if (_stream_.bad()) throw ConversionException("I/O error during read of " + name, tableName);
11266 :
11267 :
11268 0 : vector<bool>& Parser::get1DBooleanFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector<bool>& attribute)
11269 : {
11270 0 : string xmlField = Parser::getField(xmlDoc,name);
11271 0 : if (xmlField.length() == 0) {
11272 0 : throw ConversionException("Error: Field \"" +
11273 0 : name + "\": Invalid XML syntax", tableName);
11274 : }
11275 :
11276 0 : string decodedString;
11277 0 : Base64 b64;
11278 0 : b64.decode(xmlField, decodedString);
11279 :
11280 0 : stringstream iss(stringstream::in | stringstream::binary);
11281 0 : iss.str(decodedString);
11282 :
11283 0 : attribute.clear();
11284 :
11285 0 : unsigned int ndim = 0;
11286 : //iss.read((char *)&ndim, sizeof(ndim));
11287 0 : TRYREAD(iss,ndim);
11288 :
11289 0 : unsigned int dim1 = 0;
11290 : //iss.read((char *)&dim1, sizeof(dim1));
11291 0 : TRYREAD(iss,dim1);
11292 0 : if (ndim != 1) {
11293 0 : throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 1.", tableName);
11294 : }
11295 :
11296 0 : attribute.reserve(dim1);
11297 :
11298 : Boolean_CPP v;
11299 0 : for (unsigned int i = 0; i < dim1; i++) {
11300 : //iss.read((char*) &v, sizeof(v));
11301 0 : TRYREAD(iss,v);
11302 :
11303 0 : attribute.push_back(v);
11304 :
11305 : }
11306 0 : return attribute;
11307 0 : }
11308 :
11309 :
11310 0 : vector <vector<bool> >& Parser::get2DBooleanFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector <vector<bool> >& attribute)
11311 : {
11312 0 : string xmlField = Parser::getField(xmlDoc,name);
11313 0 : if (xmlField.length() == 0) {
11314 0 : throw ConversionException("Error: Field \"" +
11315 0 : name + "\": Invalid XML syntax", tableName);
11316 : }
11317 :
11318 0 : string decodedString;
11319 0 : Base64 b64;
11320 0 : b64.decode(xmlField, decodedString);
11321 :
11322 0 : stringstream iss(stringstream::in | stringstream::binary);
11323 0 : iss.str(decodedString);
11324 :
11325 0 : attribute.clear();
11326 :
11327 0 : unsigned int ndim = 0;
11328 : //iss.read((char *)&ndim, sizeof(ndim));
11329 0 : TRYREAD(iss,ndim);
11330 :
11331 0 : if (ndim != 2) {
11332 0 : throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 2.", tableName);
11333 : }
11334 :
11335 0 : unsigned int dim1 = 0;
11336 : //iss.read((char *)&dim1, sizeof(dim1));
11337 0 : TRYREAD(iss,dim1);
11338 :
11339 0 : unsigned int dim2 = 0;
11340 : //iss.read((char *)&dim2, sizeof(dim2));
11341 0 : TRYREAD(iss,dim2);
11342 :
11343 0 : attribute.reserve(dim1);
11344 :
11345 : Boolean_CPP v;
11346 0 : vector<bool> aux2;
11347 0 : aux2.reserve(dim2);
11348 0 : for (unsigned int i = 0; i < dim1; i++) {
11349 0 : aux2.clear();
11350 0 : for (unsigned int j = 0; j < dim2; j++) {
11351 : //iss.read((char*) &v, sizeof(v));
11352 0 : TRYREAD(iss,v);
11353 :
11354 0 : aux2.push_back(v);
11355 :
11356 : }
11357 0 : attribute.push_back(aux2);
11358 : }
11359 0 : return attribute;
11360 0 : }
11361 :
11362 :
11363 0 : vector <vector <vector<bool> > >& Parser::get3DBooleanFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector <vector <vector<bool> > >& attribute)
11364 : {
11365 0 : string xmlField = Parser::getField(xmlDoc,name);
11366 0 : if (xmlField.length() == 0) {
11367 0 : throw ConversionException("Error: Field \"" +
11368 0 : name + "\": Invalid XML syntax", tableName);
11369 : }
11370 :
11371 0 : string decodedString;
11372 0 : Base64 b64;
11373 0 : b64.decode(xmlField, decodedString);
11374 :
11375 0 : stringstream iss(stringstream::in | stringstream::binary);
11376 0 : iss.str(decodedString);
11377 :
11378 0 : attribute.clear();
11379 :
11380 0 : unsigned int ndim = 0;
11381 : //iss.read((char *)&ndim, sizeof(ndim));
11382 0 : TRYREAD(iss, ndim);
11383 0 : if (ndim != 3) {
11384 0 : throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 3.", tableName);
11385 : }
11386 :
11387 0 : unsigned int dim1 = 0;
11388 : //iss.read((char *)&dim1, sizeof(dim1));
11389 0 : TRYREAD(iss,dim1);
11390 :
11391 0 : unsigned int dim2 = 0;
11392 : //iss.read((char *)&dim2, sizeof(dim2));
11393 0 : TRYREAD(iss,dim2);
11394 :
11395 0 : unsigned int dim3 = 0;
11396 : //iss.read((char *)&dim2, sizeof(dim3));
11397 0 : TRYREAD(iss,dim3);
11398 :
11399 0 : attribute.reserve(dim1);
11400 :
11401 : Boolean_CPP v;
11402 0 : vector <vector<bool> > aux2;
11403 0 : vector<bool> aux3;
11404 0 : aux2.reserve(dim2);
11405 0 : aux3.reserve(dim3);
11406 :
11407 0 : for (unsigned int i = 0; i < dim1; i++) {
11408 0 : aux2.clear();
11409 0 : for (unsigned int j = 0; j < dim2; j++) {
11410 0 : aux3.clear();
11411 0 : for (unsigned int k = 0; k < dim3; k++) {
11412 : //iss.read((char*) &v, sizeof(v));
11413 0 : TRYREAD(iss,v);
11414 :
11415 0 : aux3.push_back(v);
11416 :
11417 : }
11418 0 : aux2.push_back(aux3);
11419 : }
11420 0 : attribute.push_back(aux2);
11421 : }
11422 0 : return attribute;
11423 : ;
11424 0 : }
11425 :
11426 :
11427 0 : vector <vector <vector <vector<bool> > > >& Parser::get4DBooleanFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector< vector <vector <vector<bool> > > >& attribute)
11428 : {
11429 0 : string xmlField = Parser::getField(xmlDoc,name);
11430 0 : if (xmlField.length() == 0) {
11431 0 : throw ConversionException("Error: Field \"" +
11432 0 : name + "\": Invalid XML syntax", tableName);
11433 : }
11434 :
11435 0 : string decodedString;
11436 0 : Base64 b64;
11437 0 : b64.decode(xmlField, decodedString);
11438 :
11439 0 : stringstream iss(stringstream::in | stringstream::binary);
11440 0 : iss.str(decodedString);
11441 :
11442 0 : attribute.clear();
11443 :
11444 0 : unsigned int ndim = 0;
11445 : //iss.read((char *)&ndim, sizeof(ndim));
11446 0 : TRYREAD(iss, ndim);
11447 0 : if (ndim != 4) {
11448 0 : throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 4.", tableName);
11449 : }
11450 :
11451 0 : unsigned int dim1 = 0;
11452 : //iss.read((char *)&dim1, sizeof(dim1));
11453 0 : TRYREAD(iss,dim1);
11454 :
11455 0 : unsigned int dim2 = 0;
11456 : //iss.read((char *)&dim2, sizeof(dim2));
11457 0 : TRYREAD(iss,dim2);
11458 :
11459 0 : unsigned int dim3 = 0;
11460 : //iss.read((char *)&dim2, sizeof(dim3));
11461 0 : TRYREAD(iss,dim3);
11462 :
11463 0 : unsigned int dim4 = 0;
11464 : //iss.read((char *)&dim2, sizeof(dim3));
11465 0 : TRYREAD(iss,dim3);
11466 :
11467 0 : attribute.reserve(dim1);
11468 :
11469 : Boolean_CPP v;
11470 0 : vector <vector <vector<bool> > > aux2;
11471 0 : vector <vector<bool> > aux3;
11472 0 : vector<bool> aux4;
11473 0 : aux2.reserve(dim2);
11474 0 : aux3.reserve(dim3);
11475 0 : aux4.reserve(dim4);
11476 :
11477 0 : for (unsigned int i = 0; i < dim1; i++) {
11478 0 : aux2.clear();
11479 0 : for (unsigned int j = 0; j < dim2; j++) {
11480 0 : aux3.clear();
11481 0 : for (unsigned int k = 0; k < dim3; k++) {
11482 0 : aux4.clear();
11483 0 : for (unsigned int l = 0; l < dim4; l++) {
11484 : //iss.read((char*) &v, sizeof(v));
11485 0 : TRYREAD(iss,v);
11486 :
11487 0 : aux4.push_back(v);
11488 :
11489 : }
11490 0 : aux3.push_back(aux4);
11491 : }
11492 0 : aux2.push_back(aux3);
11493 : }
11494 0 : attribute.push_back(aux2);
11495 : }
11496 0 : return attribute;
11497 : ;
11498 0 : }
11499 :
11500 :
11501 :
11502 :
11503 :
11504 :
11505 :
11506 :
11507 :
11508 :
11509 0 : void Parser::toXMLBase64(vector<Angle> data, const string &name, string &buf){
11510 0 : stringstream oss(stringstream::out | stringstream::binary);
11511 0 : string encoded;
11512 :
11513 0 : buf.append("<" + name + "> ");
11514 0 : int ndim = 1;
11515 0 : int dim1 = data.size();
11516 :
11517 0 : oss.write((char *)&ndim, sizeof(int));
11518 0 : oss.write((char *)&dim1, sizeof(dim1));
11519 :
11520 0 : for (unsigned int i = 0; i < data.size(); i++) {
11521 :
11522 0 : double v = data.at(i).get();
11523 :
11524 0 : oss.write((char *) &v, sizeof(v));
11525 : }
11526 :
11527 0 : Base64 b64;
11528 0 : b64.encode(oss.str(), encoded, false);
11529 0 : buf.append(encoded);
11530 0 : buf.append(" </" + name + "> ");
11531 0 : }
11532 :
11533 :
11534 0 : void Parser::toXMLBase64(vector< vector<Angle> > data, const string &name, string &buf){
11535 0 : stringstream oss(stringstream::out | stringstream::binary);
11536 0 : string encoded;
11537 :
11538 0 : buf.append("<" + name + "> ");
11539 0 : int ndim = 2;
11540 0 : int dim1 = data.size();
11541 0 : int dim2 = data.at(0).size();
11542 :
11543 0 : oss.write((char *)&ndim, sizeof(int));
11544 0 : oss.write((char *)&dim1, sizeof(dim1));
11545 0 : oss.write((char *)&dim2, sizeof(dim2));
11546 0 : for (unsigned int i = 0; i < data.size(); i++)
11547 0 : for (unsigned int j = 0; j < data.at(0).size(); j++) {
11548 :
11549 0 : double v = data.at(i).at(j).get();
11550 :
11551 0 : oss.write((char *) &v, sizeof(v));
11552 : }
11553 :
11554 0 : Base64 b64;
11555 0 : b64.encode(oss.str(), encoded, false);
11556 0 : buf.append(encoded);
11557 0 : buf.append(" </" + name + "> ")
11558 : ;
11559 0 : }
11560 :
11561 :
11562 0 : void Parser::toXMLBase64(vector< vector< vector<Angle> > > data, const string &name, string &buf){
11563 0 : stringstream oss(stringstream::out | stringstream::binary);
11564 0 : string encoded;
11565 :
11566 0 : buf.append("<" + name + "> ");
11567 0 : int ndim = 3;
11568 0 : int dim1 = data.size();
11569 0 : int dim2 = data.at(0).size();
11570 0 : int dim3 = data.at(0).at(0).size();
11571 :
11572 0 : oss.write((char *)&ndim, sizeof(int));
11573 0 : oss.write((char *)&dim1, sizeof(dim1));
11574 0 : oss.write((char *)&dim2, sizeof(dim2));
11575 0 : oss.write((char *)&dim3, sizeof(dim3));
11576 0 : for (unsigned int i = 0; i < data.size(); i++)
11577 0 : for (unsigned int j = 0; j < data.at(0).size(); j++)
11578 0 : for (unsigned int k = 0; k < data.at(0).at(0).size(); k++){
11579 :
11580 0 : double v = data.at(i).at(j).at(k).get();
11581 :
11582 0 : oss.write((char *) &v, sizeof(v));
11583 : }
11584 :
11585 0 : Base64 b64;
11586 0 : b64.encode(oss.str(), encoded, false);
11587 0 : buf.append(encoded);
11588 0 : buf.append(" </" + name + "> ")
11589 : ;
11590 0 : }
11591 :
11592 :
11593 0 : void Parser::toXMLBase64(vector<vector< vector< vector<Angle> > > >data, const string &name, string &buf){
11594 0 : stringstream oss(stringstream::out | stringstream::binary);
11595 0 : string encoded;
11596 :
11597 0 : buf.append("<" + name + "> ");
11598 0 : int ndim = 3;
11599 0 : int dim1 = data.size();
11600 0 : int dim2 = data.at(0).size();
11601 0 : int dim3 = data.at(0).at(0).size();
11602 0 : int dim4 = data.at(0).at(0).at(0).size();
11603 :
11604 0 : oss.write((char *)&ndim, sizeof(int));
11605 0 : oss.write((char *)&dim1, sizeof(dim1));
11606 0 : oss.write((char *)&dim2, sizeof(dim2));
11607 0 : oss.write((char *)&dim3, sizeof(dim3));
11608 0 : oss.write((char *)&dim4, sizeof(dim4));
11609 0 : for (unsigned int i = 0; i < data.size(); i++)
11610 0 : for (unsigned int j = 0; j < data.at(0).size(); j++)
11611 0 : for (unsigned int k = 0; k < data.at(0).at(0).size(); k++)
11612 0 : for (unsigned int l = 0; l < data.at(0).at(0).at(0).size(); l++){
11613 :
11614 0 : double v = data.at(i).at(j).at(k).at(l).get();
11615 :
11616 0 : oss.write((char *) &v, sizeof(v));
11617 : }
11618 :
11619 0 : Base64 b64;
11620 0 : b64.encode(oss.str(), encoded, false);
11621 0 : buf.append(encoded);
11622 0 : buf.append(" </" + name + "> ")
11623 : ;
11624 0 : }
11625 :
11626 :
11627 : #ifndef Double_CPP
11628 :
11629 : #define Double_CPP double
11630 :
11631 : #endif
11632 :
11633 :
11634 : #define TRYREAD(_stream_, _value_) _stream_.read((char*) &(_value_), sizeof(_value_)); \
11635 : if (_stream_.bad()) throw ConversionException("I/O error during read of " + name, tableName);
11636 :
11637 :
11638 0 : vector<Angle>& Parser::get1DAngleFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector<Angle>& attribute)
11639 : {
11640 0 : string xmlField = Parser::getField(xmlDoc,name);
11641 0 : if (xmlField.length() == 0) {
11642 0 : throw ConversionException("Error: Field \"" +
11643 0 : name + "\": Invalid XML syntax", tableName);
11644 : }
11645 :
11646 0 : string decodedString;
11647 0 : Base64 b64;
11648 0 : b64.decode(xmlField, decodedString);
11649 :
11650 0 : stringstream iss(stringstream::in | stringstream::binary);
11651 0 : iss.str(decodedString);
11652 :
11653 0 : attribute.clear();
11654 :
11655 0 : unsigned int ndim = 0;
11656 : //iss.read((char *)&ndim, sizeof(ndim));
11657 0 : TRYREAD(iss,ndim);
11658 :
11659 0 : unsigned int dim1 = 0;
11660 : //iss.read((char *)&dim1, sizeof(dim1));
11661 0 : TRYREAD(iss,dim1);
11662 0 : if (ndim != 1) {
11663 0 : throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 1.", tableName);
11664 : }
11665 :
11666 0 : attribute.reserve(dim1);
11667 :
11668 : Double_CPP v;
11669 0 : for (unsigned int i = 0; i < dim1; i++) {
11670 : //iss.read((char*) &v, sizeof(v));
11671 0 : TRYREAD(iss,v);
11672 :
11673 0 : attribute.push_back(Angle(v));
11674 :
11675 : }
11676 0 : return attribute;
11677 0 : }
11678 :
11679 :
11680 0 : vector <vector<Angle> >& Parser::get2DAngleFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector <vector<Angle> >& attribute)
11681 : {
11682 0 : string xmlField = Parser::getField(xmlDoc,name);
11683 0 : if (xmlField.length() == 0) {
11684 0 : throw ConversionException("Error: Field \"" +
11685 0 : name + "\": Invalid XML syntax", tableName);
11686 : }
11687 :
11688 0 : string decodedString;
11689 0 : Base64 b64;
11690 0 : b64.decode(xmlField, decodedString);
11691 :
11692 0 : stringstream iss(stringstream::in | stringstream::binary);
11693 0 : iss.str(decodedString);
11694 :
11695 0 : attribute.clear();
11696 :
11697 0 : unsigned int ndim = 0;
11698 : //iss.read((char *)&ndim, sizeof(ndim));
11699 0 : TRYREAD(iss,ndim);
11700 :
11701 0 : if (ndim != 2) {
11702 0 : throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 2.", tableName);
11703 : }
11704 :
11705 0 : unsigned int dim1 = 0;
11706 : //iss.read((char *)&dim1, sizeof(dim1));
11707 0 : TRYREAD(iss,dim1);
11708 :
11709 0 : unsigned int dim2 = 0;
11710 : //iss.read((char *)&dim2, sizeof(dim2));
11711 0 : TRYREAD(iss,dim2);
11712 :
11713 0 : attribute.reserve(dim1);
11714 :
11715 : Double_CPP v;
11716 0 : vector<Angle> aux2;
11717 0 : aux2.reserve(dim2);
11718 0 : for (unsigned int i = 0; i < dim1; i++) {
11719 0 : aux2.clear();
11720 0 : for (unsigned int j = 0; j < dim2; j++) {
11721 : //iss.read((char*) &v, sizeof(v));
11722 0 : TRYREAD(iss,v);
11723 :
11724 0 : aux2.push_back(Angle(v));
11725 :
11726 : }
11727 0 : attribute.push_back(aux2);
11728 : }
11729 0 : return attribute;
11730 0 : }
11731 :
11732 :
11733 0 : vector <vector <vector<Angle> > >& Parser::get3DAngleFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector <vector <vector<Angle> > >& attribute)
11734 : {
11735 0 : string xmlField = Parser::getField(xmlDoc,name);
11736 0 : if (xmlField.length() == 0) {
11737 0 : throw ConversionException("Error: Field \"" +
11738 0 : name + "\": Invalid XML syntax", tableName);
11739 : }
11740 :
11741 0 : string decodedString;
11742 0 : Base64 b64;
11743 0 : b64.decode(xmlField, decodedString);
11744 :
11745 0 : stringstream iss(stringstream::in | stringstream::binary);
11746 0 : iss.str(decodedString);
11747 :
11748 0 : attribute.clear();
11749 :
11750 0 : unsigned int ndim = 0;
11751 : //iss.read((char *)&ndim, sizeof(ndim));
11752 0 : TRYREAD(iss, ndim);
11753 0 : if (ndim != 3) {
11754 0 : throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 3.", tableName);
11755 : }
11756 :
11757 0 : unsigned int dim1 = 0;
11758 : //iss.read((char *)&dim1, sizeof(dim1));
11759 0 : TRYREAD(iss,dim1);
11760 :
11761 0 : unsigned int dim2 = 0;
11762 : //iss.read((char *)&dim2, sizeof(dim2));
11763 0 : TRYREAD(iss,dim2);
11764 :
11765 0 : unsigned int dim3 = 0;
11766 : //iss.read((char *)&dim2, sizeof(dim3));
11767 0 : TRYREAD(iss,dim3);
11768 :
11769 0 : attribute.reserve(dim1);
11770 :
11771 : Double_CPP v;
11772 0 : vector <vector<Angle> > aux2;
11773 0 : vector<Angle> aux3;
11774 0 : aux2.reserve(dim2);
11775 0 : aux3.reserve(dim3);
11776 :
11777 0 : for (unsigned int i = 0; i < dim1; i++) {
11778 0 : aux2.clear();
11779 0 : for (unsigned int j = 0; j < dim2; j++) {
11780 0 : aux3.clear();
11781 0 : for (unsigned int k = 0; k < dim3; k++) {
11782 : //iss.read((char*) &v, sizeof(v));
11783 0 : TRYREAD(iss,v);
11784 :
11785 0 : aux3.push_back(Angle(v));
11786 :
11787 : }
11788 0 : aux2.push_back(aux3);
11789 : }
11790 0 : attribute.push_back(aux2);
11791 : }
11792 0 : return attribute;
11793 : ;
11794 0 : }
11795 :
11796 :
11797 0 : vector <vector <vector <vector<Angle> > > >& Parser::get4DAngleFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector< vector <vector <vector<Angle> > > >& attribute)
11798 : {
11799 0 : string xmlField = Parser::getField(xmlDoc,name);
11800 0 : if (xmlField.length() == 0) {
11801 0 : throw ConversionException("Error: Field \"" +
11802 0 : name + "\": Invalid XML syntax", tableName);
11803 : }
11804 :
11805 0 : string decodedString;
11806 0 : Base64 b64;
11807 0 : b64.decode(xmlField, decodedString);
11808 :
11809 0 : stringstream iss(stringstream::in | stringstream::binary);
11810 0 : iss.str(decodedString);
11811 :
11812 0 : attribute.clear();
11813 :
11814 0 : unsigned int ndim = 0;
11815 : //iss.read((char *)&ndim, sizeof(ndim));
11816 0 : TRYREAD(iss, ndim);
11817 0 : if (ndim != 4) {
11818 0 : throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 4.", tableName);
11819 : }
11820 :
11821 0 : unsigned int dim1 = 0;
11822 : //iss.read((char *)&dim1, sizeof(dim1));
11823 0 : TRYREAD(iss,dim1);
11824 :
11825 0 : unsigned int dim2 = 0;
11826 : //iss.read((char *)&dim2, sizeof(dim2));
11827 0 : TRYREAD(iss,dim2);
11828 :
11829 0 : unsigned int dim3 = 0;
11830 : //iss.read((char *)&dim2, sizeof(dim3));
11831 0 : TRYREAD(iss,dim3);
11832 :
11833 0 : unsigned int dim4 = 0;
11834 : //iss.read((char *)&dim2, sizeof(dim3));
11835 0 : TRYREAD(iss,dim3);
11836 :
11837 0 : attribute.reserve(dim1);
11838 :
11839 : Double_CPP v;
11840 0 : vector <vector <vector<Angle> > > aux2;
11841 0 : vector <vector<Angle> > aux3;
11842 0 : vector<Angle> aux4;
11843 0 : aux2.reserve(dim2);
11844 0 : aux3.reserve(dim3);
11845 0 : aux4.reserve(dim4);
11846 :
11847 0 : for (unsigned int i = 0; i < dim1; i++) {
11848 0 : aux2.clear();
11849 0 : for (unsigned int j = 0; j < dim2; j++) {
11850 0 : aux3.clear();
11851 0 : for (unsigned int k = 0; k < dim3; k++) {
11852 0 : aux4.clear();
11853 0 : for (unsigned int l = 0; l < dim4; l++) {
11854 : //iss.read((char*) &v, sizeof(v));
11855 0 : TRYREAD(iss,v);
11856 :
11857 0 : aux4.push_back(Angle(v));
11858 :
11859 : }
11860 0 : aux3.push_back(aux4);
11861 : }
11862 0 : aux2.push_back(aux3);
11863 : }
11864 0 : attribute.push_back(aux2);
11865 : }
11866 0 : return attribute;
11867 : ;
11868 0 : }
11869 :
11870 :
11871 :
11872 :
11873 :
11874 :
11875 :
11876 0 : void Parser::toXMLBase64(vector<AngularRate> data, const string &name, string &buf){
11877 0 : stringstream oss(stringstream::out | stringstream::binary);
11878 0 : string encoded;
11879 :
11880 0 : buf.append("<" + name + "> ");
11881 0 : int ndim = 1;
11882 0 : int dim1 = data.size();
11883 :
11884 0 : oss.write((char *)&ndim, sizeof(int));
11885 0 : oss.write((char *)&dim1, sizeof(dim1));
11886 :
11887 0 : for (unsigned int i = 0; i < data.size(); i++) {
11888 :
11889 0 : double v = data.at(i).get();
11890 :
11891 0 : oss.write((char *) &v, sizeof(v));
11892 : }
11893 :
11894 0 : Base64 b64;
11895 0 : b64.encode(oss.str(), encoded, false);
11896 0 : buf.append(encoded);
11897 0 : buf.append(" </" + name + "> ");
11898 0 : }
11899 :
11900 :
11901 0 : void Parser::toXMLBase64(vector< vector<AngularRate> > data, const string &name, string &buf){
11902 0 : stringstream oss(stringstream::out | stringstream::binary);
11903 0 : string encoded;
11904 :
11905 0 : buf.append("<" + name + "> ");
11906 0 : int ndim = 2;
11907 0 : int dim1 = data.size();
11908 0 : int dim2 = data.at(0).size();
11909 :
11910 0 : oss.write((char *)&ndim, sizeof(int));
11911 0 : oss.write((char *)&dim1, sizeof(dim1));
11912 0 : oss.write((char *)&dim2, sizeof(dim2));
11913 0 : for (unsigned int i = 0; i < data.size(); i++)
11914 0 : for (unsigned int j = 0; j < data.at(0).size(); j++) {
11915 :
11916 0 : double v = data.at(i).at(j).get();
11917 :
11918 0 : oss.write((char *) &v, sizeof(v));
11919 : }
11920 :
11921 0 : Base64 b64;
11922 0 : b64.encode(oss.str(), encoded, false);
11923 0 : buf.append(encoded);
11924 0 : buf.append(" </" + name + "> ")
11925 : ;
11926 0 : }
11927 :
11928 :
11929 0 : void Parser::toXMLBase64(vector< vector< vector<AngularRate> > > data, const string &name, string &buf){
11930 0 : stringstream oss(stringstream::out | stringstream::binary);
11931 0 : string encoded;
11932 :
11933 0 : buf.append("<" + name + "> ");
11934 0 : int ndim = 3;
11935 0 : int dim1 = data.size();
11936 0 : int dim2 = data.at(0).size();
11937 0 : int dim3 = data.at(0).at(0).size();
11938 :
11939 0 : oss.write((char *)&ndim, sizeof(int));
11940 0 : oss.write((char *)&dim1, sizeof(dim1));
11941 0 : oss.write((char *)&dim2, sizeof(dim2));
11942 0 : oss.write((char *)&dim3, sizeof(dim3));
11943 0 : for (unsigned int i = 0; i < data.size(); i++)
11944 0 : for (unsigned int j = 0; j < data.at(0).size(); j++)
11945 0 : for (unsigned int k = 0; k < data.at(0).at(0).size(); k++){
11946 :
11947 0 : double v = data.at(i).at(j).at(k).get();
11948 :
11949 0 : oss.write((char *) &v, sizeof(v));
11950 : }
11951 :
11952 0 : Base64 b64;
11953 0 : b64.encode(oss.str(), encoded, false);
11954 0 : buf.append(encoded);
11955 0 : buf.append(" </" + name + "> ")
11956 : ;
11957 0 : }
11958 :
11959 :
11960 0 : void Parser::toXMLBase64(vector<vector< vector< vector<AngularRate> > > >data, const string &name, string &buf){
11961 0 : stringstream oss(stringstream::out | stringstream::binary);
11962 0 : string encoded;
11963 :
11964 0 : buf.append("<" + name + "> ");
11965 0 : int ndim = 3;
11966 0 : int dim1 = data.size();
11967 0 : int dim2 = data.at(0).size();
11968 0 : int dim3 = data.at(0).at(0).size();
11969 0 : int dim4 = data.at(0).at(0).at(0).size();
11970 :
11971 0 : oss.write((char *)&ndim, sizeof(int));
11972 0 : oss.write((char *)&dim1, sizeof(dim1));
11973 0 : oss.write((char *)&dim2, sizeof(dim2));
11974 0 : oss.write((char *)&dim3, sizeof(dim3));
11975 0 : oss.write((char *)&dim4, sizeof(dim4));
11976 0 : for (unsigned int i = 0; i < data.size(); i++)
11977 0 : for (unsigned int j = 0; j < data.at(0).size(); j++)
11978 0 : for (unsigned int k = 0; k < data.at(0).at(0).size(); k++)
11979 0 : for (unsigned int l = 0; l < data.at(0).at(0).at(0).size(); l++){
11980 :
11981 0 : double v = data.at(i).at(j).at(k).at(l).get();
11982 :
11983 0 : oss.write((char *) &v, sizeof(v));
11984 : }
11985 :
11986 0 : Base64 b64;
11987 0 : b64.encode(oss.str(), encoded, false);
11988 0 : buf.append(encoded);
11989 0 : buf.append(" </" + name + "> ")
11990 : ;
11991 0 : }
11992 :
11993 :
11994 : #ifndef Double_CPP
11995 :
11996 : #define Double_CPP double
11997 :
11998 : #endif
11999 :
12000 :
12001 : #define TRYREAD(_stream_, _value_) _stream_.read((char*) &(_value_), sizeof(_value_)); \
12002 : if (_stream_.bad()) throw ConversionException("I/O error during read of " + name, tableName);
12003 :
12004 :
12005 0 : vector<AngularRate>& Parser::get1DAngularRateFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector<AngularRate>& attribute)
12006 : {
12007 0 : string xmlField = Parser::getField(xmlDoc,name);
12008 0 : if (xmlField.length() == 0) {
12009 0 : throw ConversionException("Error: Field \"" +
12010 0 : name + "\": Invalid XML syntax", tableName);
12011 : }
12012 :
12013 0 : string decodedString;
12014 0 : Base64 b64;
12015 0 : b64.decode(xmlField, decodedString);
12016 :
12017 0 : stringstream iss(stringstream::in | stringstream::binary);
12018 0 : iss.str(decodedString);
12019 :
12020 0 : attribute.clear();
12021 :
12022 0 : unsigned int ndim = 0;
12023 : //iss.read((char *)&ndim, sizeof(ndim));
12024 0 : TRYREAD(iss,ndim);
12025 :
12026 0 : unsigned int dim1 = 0;
12027 : //iss.read((char *)&dim1, sizeof(dim1));
12028 0 : TRYREAD(iss,dim1);
12029 0 : if (ndim != 1) {
12030 0 : throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 1.", tableName);
12031 : }
12032 :
12033 0 : attribute.reserve(dim1);
12034 :
12035 : Double_CPP v;
12036 0 : for (unsigned int i = 0; i < dim1; i++) {
12037 : //iss.read((char*) &v, sizeof(v));
12038 0 : TRYREAD(iss,v);
12039 :
12040 0 : attribute.push_back(AngularRate(v));
12041 :
12042 : }
12043 0 : return attribute;
12044 0 : }
12045 :
12046 :
12047 0 : vector <vector<AngularRate> >& Parser::get2DAngularRateFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector <vector<AngularRate> >& attribute)
12048 : {
12049 0 : string xmlField = Parser::getField(xmlDoc,name);
12050 0 : if (xmlField.length() == 0) {
12051 0 : throw ConversionException("Error: Field \"" +
12052 0 : name + "\": Invalid XML syntax", tableName);
12053 : }
12054 :
12055 0 : string decodedString;
12056 0 : Base64 b64;
12057 0 : b64.decode(xmlField, decodedString);
12058 :
12059 0 : stringstream iss(stringstream::in | stringstream::binary);
12060 0 : iss.str(decodedString);
12061 :
12062 0 : attribute.clear();
12063 :
12064 0 : unsigned int ndim = 0;
12065 : //iss.read((char *)&ndim, sizeof(ndim));
12066 0 : TRYREAD(iss,ndim);
12067 :
12068 0 : if (ndim != 2) {
12069 0 : throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 2.", tableName);
12070 : }
12071 :
12072 0 : unsigned int dim1 = 0;
12073 : //iss.read((char *)&dim1, sizeof(dim1));
12074 0 : TRYREAD(iss,dim1);
12075 :
12076 0 : unsigned int dim2 = 0;
12077 : //iss.read((char *)&dim2, sizeof(dim2));
12078 0 : TRYREAD(iss,dim2);
12079 :
12080 0 : attribute.reserve(dim1);
12081 :
12082 : Double_CPP v;
12083 0 : vector<AngularRate> aux2;
12084 0 : aux2.reserve(dim2);
12085 0 : for (unsigned int i = 0; i < dim1; i++) {
12086 0 : aux2.clear();
12087 0 : for (unsigned int j = 0; j < dim2; j++) {
12088 : //iss.read((char*) &v, sizeof(v));
12089 0 : TRYREAD(iss,v);
12090 :
12091 0 : aux2.push_back(AngularRate(v));
12092 :
12093 : }
12094 0 : attribute.push_back(aux2);
12095 : }
12096 0 : return attribute;
12097 0 : }
12098 :
12099 :
12100 0 : vector <vector <vector<AngularRate> > >& Parser::get3DAngularRateFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector <vector <vector<AngularRate> > >& attribute)
12101 : {
12102 0 : string xmlField = Parser::getField(xmlDoc,name);
12103 0 : if (xmlField.length() == 0) {
12104 0 : throw ConversionException("Error: Field \"" +
12105 0 : name + "\": Invalid XML syntax", tableName);
12106 : }
12107 :
12108 0 : string decodedString;
12109 0 : Base64 b64;
12110 0 : b64.decode(xmlField, decodedString);
12111 :
12112 0 : stringstream iss(stringstream::in | stringstream::binary);
12113 0 : iss.str(decodedString);
12114 :
12115 0 : attribute.clear();
12116 :
12117 0 : unsigned int ndim = 0;
12118 : //iss.read((char *)&ndim, sizeof(ndim));
12119 0 : TRYREAD(iss, ndim);
12120 0 : if (ndim != 3) {
12121 0 : throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 3.", tableName);
12122 : }
12123 :
12124 0 : unsigned int dim1 = 0;
12125 : //iss.read((char *)&dim1, sizeof(dim1));
12126 0 : TRYREAD(iss,dim1);
12127 :
12128 0 : unsigned int dim2 = 0;
12129 : //iss.read((char *)&dim2, sizeof(dim2));
12130 0 : TRYREAD(iss,dim2);
12131 :
12132 0 : unsigned int dim3 = 0;
12133 : //iss.read((char *)&dim2, sizeof(dim3));
12134 0 : TRYREAD(iss,dim3);
12135 :
12136 0 : attribute.reserve(dim1);
12137 :
12138 : Double_CPP v;
12139 0 : vector <vector<AngularRate> > aux2;
12140 0 : vector<AngularRate> aux3;
12141 0 : aux2.reserve(dim2);
12142 0 : aux3.reserve(dim3);
12143 :
12144 0 : for (unsigned int i = 0; i < dim1; i++) {
12145 0 : aux2.clear();
12146 0 : for (unsigned int j = 0; j < dim2; j++) {
12147 0 : aux3.clear();
12148 0 : for (unsigned int k = 0; k < dim3; k++) {
12149 : //iss.read((char*) &v, sizeof(v));
12150 0 : TRYREAD(iss,v);
12151 :
12152 0 : aux3.push_back(AngularRate(v));
12153 :
12154 : }
12155 0 : aux2.push_back(aux3);
12156 : }
12157 0 : attribute.push_back(aux2);
12158 : }
12159 0 : return attribute;
12160 : ;
12161 0 : }
12162 :
12163 :
12164 0 : vector <vector <vector <vector<AngularRate> > > >& Parser::get4DAngularRateFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector< vector <vector <vector<AngularRate> > > >& attribute)
12165 : {
12166 0 : string xmlField = Parser::getField(xmlDoc,name);
12167 0 : if (xmlField.length() == 0) {
12168 0 : throw ConversionException("Error: Field \"" +
12169 0 : name + "\": Invalid XML syntax", tableName);
12170 : }
12171 :
12172 0 : string decodedString;
12173 0 : Base64 b64;
12174 0 : b64.decode(xmlField, decodedString);
12175 :
12176 0 : stringstream iss(stringstream::in | stringstream::binary);
12177 0 : iss.str(decodedString);
12178 :
12179 0 : attribute.clear();
12180 :
12181 0 : unsigned int ndim = 0;
12182 : //iss.read((char *)&ndim, sizeof(ndim));
12183 0 : TRYREAD(iss, ndim);
12184 0 : if (ndim != 4) {
12185 0 : throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 4.", tableName);
12186 : }
12187 :
12188 0 : unsigned int dim1 = 0;
12189 : //iss.read((char *)&dim1, sizeof(dim1));
12190 0 : TRYREAD(iss,dim1);
12191 :
12192 0 : unsigned int dim2 = 0;
12193 : //iss.read((char *)&dim2, sizeof(dim2));
12194 0 : TRYREAD(iss,dim2);
12195 :
12196 0 : unsigned int dim3 = 0;
12197 : //iss.read((char *)&dim2, sizeof(dim3));
12198 0 : TRYREAD(iss,dim3);
12199 :
12200 0 : unsigned int dim4 = 0;
12201 : //iss.read((char *)&dim2, sizeof(dim3));
12202 0 : TRYREAD(iss,dim3);
12203 :
12204 0 : attribute.reserve(dim1);
12205 :
12206 : Double_CPP v;
12207 0 : vector <vector <vector<AngularRate> > > aux2;
12208 0 : vector <vector<AngularRate> > aux3;
12209 0 : vector<AngularRate> aux4;
12210 0 : aux2.reserve(dim2);
12211 0 : aux3.reserve(dim3);
12212 0 : aux4.reserve(dim4);
12213 :
12214 0 : for (unsigned int i = 0; i < dim1; i++) {
12215 0 : aux2.clear();
12216 0 : for (unsigned int j = 0; j < dim2; j++) {
12217 0 : aux3.clear();
12218 0 : for (unsigned int k = 0; k < dim3; k++) {
12219 0 : aux4.clear();
12220 0 : for (unsigned int l = 0; l < dim4; l++) {
12221 : //iss.read((char*) &v, sizeof(v));
12222 0 : TRYREAD(iss,v);
12223 :
12224 0 : aux4.push_back(AngularRate(v));
12225 :
12226 : }
12227 0 : aux3.push_back(aux4);
12228 : }
12229 0 : aux2.push_back(aux3);
12230 : }
12231 0 : attribute.push_back(aux2);
12232 : }
12233 0 : return attribute;
12234 : ;
12235 0 : }
12236 :
12237 :
12238 :
12239 :
12240 :
12241 :
12242 :
12243 0 : void Parser::toXMLBase64(vector<ArrayTime> data, const string &name, string &buf){
12244 0 : stringstream oss(stringstream::out | stringstream::binary);
12245 0 : string encoded;
12246 :
12247 0 : buf.append("<" + name + "> ");
12248 0 : int ndim = 1;
12249 0 : int dim1 = data.size();
12250 :
12251 0 : oss.write((char *)&ndim, sizeof(int));
12252 0 : oss.write((char *)&dim1, sizeof(dim1));
12253 :
12254 0 : for (unsigned int i = 0; i < data.size(); i++) {
12255 :
12256 0 : long v = data.at(i).get();
12257 :
12258 0 : oss.write((char *) &v, sizeof(v));
12259 : }
12260 :
12261 0 : Base64 b64;
12262 0 : b64.encode(oss.str(), encoded, false);
12263 0 : buf.append(encoded);
12264 0 : buf.append(" </" + name + "> ");
12265 0 : }
12266 :
12267 :
12268 0 : void Parser::toXMLBase64(vector< vector<ArrayTime> > data, const string &name, string &buf){
12269 0 : stringstream oss(stringstream::out | stringstream::binary);
12270 0 : string encoded;
12271 :
12272 0 : buf.append("<" + name + "> ");
12273 0 : int ndim = 2;
12274 0 : int dim1 = data.size();
12275 0 : int dim2 = data.at(0).size();
12276 :
12277 0 : oss.write((char *)&ndim, sizeof(int));
12278 0 : oss.write((char *)&dim1, sizeof(dim1));
12279 0 : oss.write((char *)&dim2, sizeof(dim2));
12280 0 : for (unsigned int i = 0; i < data.size(); i++)
12281 0 : for (unsigned int j = 0; j < data.at(0).size(); j++) {
12282 :
12283 0 : long v = data.at(i).at(j).get();
12284 :
12285 0 : oss.write((char *) &v, sizeof(v));
12286 : }
12287 :
12288 0 : Base64 b64;
12289 0 : b64.encode(oss.str(), encoded, false);
12290 0 : buf.append(encoded);
12291 0 : buf.append(" </" + name + "> ")
12292 : ;
12293 0 : }
12294 :
12295 :
12296 0 : void Parser::toXMLBase64(vector< vector< vector<ArrayTime> > > data, const string &name, string &buf){
12297 0 : stringstream oss(stringstream::out | stringstream::binary);
12298 0 : string encoded;
12299 :
12300 0 : buf.append("<" + name + "> ");
12301 0 : int ndim = 3;
12302 0 : int dim1 = data.size();
12303 0 : int dim2 = data.at(0).size();
12304 0 : int dim3 = data.at(0).at(0).size();
12305 :
12306 0 : oss.write((char *)&ndim, sizeof(int));
12307 0 : oss.write((char *)&dim1, sizeof(dim1));
12308 0 : oss.write((char *)&dim2, sizeof(dim2));
12309 0 : oss.write((char *)&dim3, sizeof(dim3));
12310 0 : for (unsigned int i = 0; i < data.size(); i++)
12311 0 : for (unsigned int j = 0; j < data.at(0).size(); j++)
12312 0 : for (unsigned int k = 0; k < data.at(0).at(0).size(); k++){
12313 :
12314 0 : long v = data.at(i).at(j).at(k).get();
12315 :
12316 0 : oss.write((char *) &v, sizeof(v));
12317 : }
12318 :
12319 0 : Base64 b64;
12320 0 : b64.encode(oss.str(), encoded, false);
12321 0 : buf.append(encoded);
12322 0 : buf.append(" </" + name + "> ")
12323 : ;
12324 0 : }
12325 :
12326 :
12327 0 : void Parser::toXMLBase64(vector<vector< vector< vector<ArrayTime> > > >data, const string &name, string &buf){
12328 0 : stringstream oss(stringstream::out | stringstream::binary);
12329 0 : string encoded;
12330 :
12331 0 : buf.append("<" + name + "> ");
12332 0 : int ndim = 3;
12333 0 : int dim1 = data.size();
12334 0 : int dim2 = data.at(0).size();
12335 0 : int dim3 = data.at(0).at(0).size();
12336 0 : int dim4 = data.at(0).at(0).at(0).size();
12337 :
12338 0 : oss.write((char *)&ndim, sizeof(int));
12339 0 : oss.write((char *)&dim1, sizeof(dim1));
12340 0 : oss.write((char *)&dim2, sizeof(dim2));
12341 0 : oss.write((char *)&dim3, sizeof(dim3));
12342 0 : oss.write((char *)&dim4, sizeof(dim4));
12343 0 : for (unsigned int i = 0; i < data.size(); i++)
12344 0 : for (unsigned int j = 0; j < data.at(0).size(); j++)
12345 0 : for (unsigned int k = 0; k < data.at(0).at(0).size(); k++)
12346 0 : for (unsigned int l = 0; l < data.at(0).at(0).at(0).size(); l++){
12347 :
12348 0 : long v = data.at(i).at(j).at(k).at(l).get();
12349 :
12350 0 : oss.write((char *) &v, sizeof(v));
12351 : }
12352 :
12353 0 : Base64 b64;
12354 0 : b64.encode(oss.str(), encoded, false);
12355 0 : buf.append(encoded);
12356 0 : buf.append(" </" + name + "> ")
12357 : ;
12358 0 : }
12359 :
12360 :
12361 : #ifndef Long_CPP
12362 :
12363 : #define Long_CPP int64_t
12364 :
12365 : #endif
12366 :
12367 :
12368 : #define TRYREAD(_stream_, _value_) _stream_.read((char*) &(_value_), sizeof(_value_)); \
12369 : if (_stream_.bad()) throw ConversionException("I/O error during read of " + name, tableName);
12370 :
12371 :
12372 0 : vector<ArrayTime>& Parser::get1DArrayTimeFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector<ArrayTime>& attribute)
12373 : {
12374 0 : string xmlField = Parser::getField(xmlDoc,name);
12375 0 : if (xmlField.length() == 0) {
12376 0 : throw ConversionException("Error: Field \"" +
12377 0 : name + "\": Invalid XML syntax", tableName);
12378 : }
12379 :
12380 0 : string decodedString;
12381 0 : Base64 b64;
12382 0 : b64.decode(xmlField, decodedString);
12383 :
12384 0 : stringstream iss(stringstream::in | stringstream::binary);
12385 0 : iss.str(decodedString);
12386 :
12387 0 : attribute.clear();
12388 :
12389 0 : unsigned int ndim = 0;
12390 : //iss.read((char *)&ndim, sizeof(ndim));
12391 0 : TRYREAD(iss,ndim);
12392 :
12393 0 : unsigned int dim1 = 0;
12394 : //iss.read((char *)&dim1, sizeof(dim1));
12395 0 : TRYREAD(iss,dim1);
12396 0 : if (ndim != 1) {
12397 0 : throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 1.", tableName);
12398 : }
12399 :
12400 0 : attribute.reserve(dim1);
12401 :
12402 : Long_CPP v;
12403 0 : for (unsigned int i = 0; i < dim1; i++) {
12404 : //iss.read((char*) &v, sizeof(v));
12405 0 : TRYREAD(iss,v);
12406 :
12407 0 : attribute.push_back(ArrayTime(v));
12408 :
12409 : }
12410 0 : return attribute;
12411 0 : }
12412 :
12413 :
12414 0 : vector <vector<ArrayTime> >& Parser::get2DArrayTimeFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector <vector<ArrayTime> >& attribute)
12415 : {
12416 0 : string xmlField = Parser::getField(xmlDoc,name);
12417 0 : if (xmlField.length() == 0) {
12418 0 : throw ConversionException("Error: Field \"" +
12419 0 : name + "\": Invalid XML syntax", tableName);
12420 : }
12421 :
12422 0 : string decodedString;
12423 0 : Base64 b64;
12424 0 : b64.decode(xmlField, decodedString);
12425 :
12426 0 : stringstream iss(stringstream::in | stringstream::binary);
12427 0 : iss.str(decodedString);
12428 :
12429 0 : attribute.clear();
12430 :
12431 0 : unsigned int ndim = 0;
12432 : //iss.read((char *)&ndim, sizeof(ndim));
12433 0 : TRYREAD(iss,ndim);
12434 :
12435 0 : if (ndim != 2) {
12436 0 : throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 2.", tableName);
12437 : }
12438 :
12439 0 : unsigned int dim1 = 0;
12440 : //iss.read((char *)&dim1, sizeof(dim1));
12441 0 : TRYREAD(iss,dim1);
12442 :
12443 0 : unsigned int dim2 = 0;
12444 : //iss.read((char *)&dim2, sizeof(dim2));
12445 0 : TRYREAD(iss,dim2);
12446 :
12447 0 : attribute.reserve(dim1);
12448 :
12449 : Long_CPP v;
12450 0 : vector<ArrayTime> aux2;
12451 0 : aux2.reserve(dim2);
12452 0 : for (unsigned int i = 0; i < dim1; i++) {
12453 0 : aux2.clear();
12454 0 : for (unsigned int j = 0; j < dim2; j++) {
12455 : //iss.read((char*) &v, sizeof(v));
12456 0 : TRYREAD(iss,v);
12457 :
12458 0 : aux2.push_back(ArrayTime(v));
12459 :
12460 : }
12461 0 : attribute.push_back(aux2);
12462 : }
12463 0 : return attribute;
12464 0 : }
12465 :
12466 :
12467 0 : vector <vector <vector<ArrayTime> > >& Parser::get3DArrayTimeFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector <vector <vector<ArrayTime> > >& attribute)
12468 : {
12469 0 : string xmlField = Parser::getField(xmlDoc,name);
12470 0 : if (xmlField.length() == 0) {
12471 0 : throw ConversionException("Error: Field \"" +
12472 0 : name + "\": Invalid XML syntax", tableName);
12473 : }
12474 :
12475 0 : string decodedString;
12476 0 : Base64 b64;
12477 0 : b64.decode(xmlField, decodedString);
12478 :
12479 0 : stringstream iss(stringstream::in | stringstream::binary);
12480 0 : iss.str(decodedString);
12481 :
12482 0 : attribute.clear();
12483 :
12484 0 : unsigned int ndim = 0;
12485 : //iss.read((char *)&ndim, sizeof(ndim));
12486 0 : TRYREAD(iss, ndim);
12487 0 : if (ndim != 3) {
12488 0 : throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 3.", tableName);
12489 : }
12490 :
12491 0 : unsigned int dim1 = 0;
12492 : //iss.read((char *)&dim1, sizeof(dim1));
12493 0 : TRYREAD(iss,dim1);
12494 :
12495 0 : unsigned int dim2 = 0;
12496 : //iss.read((char *)&dim2, sizeof(dim2));
12497 0 : TRYREAD(iss,dim2);
12498 :
12499 0 : unsigned int dim3 = 0;
12500 : //iss.read((char *)&dim2, sizeof(dim3));
12501 0 : TRYREAD(iss,dim3);
12502 :
12503 0 : attribute.reserve(dim1);
12504 :
12505 : Long_CPP v;
12506 0 : vector <vector<ArrayTime> > aux2;
12507 0 : vector<ArrayTime> aux3;
12508 0 : aux2.reserve(dim2);
12509 0 : aux3.reserve(dim3);
12510 :
12511 0 : for (unsigned int i = 0; i < dim1; i++) {
12512 0 : aux2.clear();
12513 0 : for (unsigned int j = 0; j < dim2; j++) {
12514 0 : aux3.clear();
12515 0 : for (unsigned int k = 0; k < dim3; k++) {
12516 : //iss.read((char*) &v, sizeof(v));
12517 0 : TRYREAD(iss,v);
12518 :
12519 0 : aux3.push_back(ArrayTime(v));
12520 :
12521 : }
12522 0 : aux2.push_back(aux3);
12523 : }
12524 0 : attribute.push_back(aux2);
12525 : }
12526 0 : return attribute;
12527 : ;
12528 0 : }
12529 :
12530 :
12531 0 : vector <vector <vector <vector<ArrayTime> > > >& Parser::get4DArrayTimeFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector< vector <vector <vector<ArrayTime> > > >& attribute)
12532 : {
12533 0 : string xmlField = Parser::getField(xmlDoc,name);
12534 0 : if (xmlField.length() == 0) {
12535 0 : throw ConversionException("Error: Field \"" +
12536 0 : name + "\": Invalid XML syntax", tableName);
12537 : }
12538 :
12539 0 : string decodedString;
12540 0 : Base64 b64;
12541 0 : b64.decode(xmlField, decodedString);
12542 :
12543 0 : stringstream iss(stringstream::in | stringstream::binary);
12544 0 : iss.str(decodedString);
12545 :
12546 0 : attribute.clear();
12547 :
12548 0 : unsigned int ndim = 0;
12549 : //iss.read((char *)&ndim, sizeof(ndim));
12550 0 : TRYREAD(iss, ndim);
12551 0 : if (ndim != 4) {
12552 0 : throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 4.", tableName);
12553 : }
12554 :
12555 0 : unsigned int dim1 = 0;
12556 : //iss.read((char *)&dim1, sizeof(dim1));
12557 0 : TRYREAD(iss,dim1);
12558 :
12559 0 : unsigned int dim2 = 0;
12560 : //iss.read((char *)&dim2, sizeof(dim2));
12561 0 : TRYREAD(iss,dim2);
12562 :
12563 0 : unsigned int dim3 = 0;
12564 : //iss.read((char *)&dim2, sizeof(dim3));
12565 0 : TRYREAD(iss,dim3);
12566 :
12567 0 : unsigned int dim4 = 0;
12568 : //iss.read((char *)&dim2, sizeof(dim3));
12569 0 : TRYREAD(iss,dim3);
12570 :
12571 0 : attribute.reserve(dim1);
12572 :
12573 : Long_CPP v;
12574 0 : vector <vector <vector<ArrayTime> > > aux2;
12575 0 : vector <vector<ArrayTime> > aux3;
12576 0 : vector<ArrayTime> aux4;
12577 0 : aux2.reserve(dim2);
12578 0 : aux3.reserve(dim3);
12579 0 : aux4.reserve(dim4);
12580 :
12581 0 : for (unsigned int i = 0; i < dim1; i++) {
12582 0 : aux2.clear();
12583 0 : for (unsigned int j = 0; j < dim2; j++) {
12584 0 : aux3.clear();
12585 0 : for (unsigned int k = 0; k < dim3; k++) {
12586 0 : aux4.clear();
12587 0 : for (unsigned int l = 0; l < dim4; l++) {
12588 : //iss.read((char*) &v, sizeof(v));
12589 0 : TRYREAD(iss,v);
12590 :
12591 0 : aux4.push_back(ArrayTime(v));
12592 :
12593 : }
12594 0 : aux3.push_back(aux4);
12595 : }
12596 0 : aux2.push_back(aux3);
12597 : }
12598 0 : attribute.push_back(aux2);
12599 : }
12600 0 : return attribute;
12601 : ;
12602 0 : }
12603 :
12604 :
12605 :
12606 :
12607 :
12608 :
12609 :
12610 :
12611 :
12612 :
12613 :
12614 :
12615 :
12616 :
12617 :
12618 :
12619 :
12620 :
12621 :
12622 :
12623 :
12624 :
12625 0 : void Parser::toXMLBase64(vector<Flux> data, const string &name, string &buf){
12626 0 : stringstream oss(stringstream::out | stringstream::binary);
12627 0 : string encoded;
12628 :
12629 0 : buf.append("<" + name + "> ");
12630 0 : int ndim = 1;
12631 0 : int dim1 = data.size();
12632 :
12633 0 : oss.write((char *)&ndim, sizeof(int));
12634 0 : oss.write((char *)&dim1, sizeof(dim1));
12635 :
12636 0 : for (unsigned int i = 0; i < data.size(); i++) {
12637 :
12638 0 : double v = data.at(i).get();
12639 :
12640 0 : oss.write((char *) &v, sizeof(v));
12641 : }
12642 :
12643 0 : Base64 b64;
12644 0 : b64.encode(oss.str(), encoded, false);
12645 0 : buf.append(encoded);
12646 0 : buf.append(" </" + name + "> ");
12647 0 : }
12648 :
12649 :
12650 0 : void Parser::toXMLBase64(vector< vector<Flux> > data, const string &name, string &buf){
12651 0 : stringstream oss(stringstream::out | stringstream::binary);
12652 0 : string encoded;
12653 :
12654 0 : buf.append("<" + name + "> ");
12655 0 : int ndim = 2;
12656 0 : int dim1 = data.size();
12657 0 : int dim2 = data.at(0).size();
12658 :
12659 0 : oss.write((char *)&ndim, sizeof(int));
12660 0 : oss.write((char *)&dim1, sizeof(dim1));
12661 0 : oss.write((char *)&dim2, sizeof(dim2));
12662 0 : for (unsigned int i = 0; i < data.size(); i++)
12663 0 : for (unsigned int j = 0; j < data.at(0).size(); j++) {
12664 :
12665 0 : double v = data.at(i).at(j).get();
12666 :
12667 0 : oss.write((char *) &v, sizeof(v));
12668 : }
12669 :
12670 0 : Base64 b64;
12671 0 : b64.encode(oss.str(), encoded, false);
12672 0 : buf.append(encoded);
12673 0 : buf.append(" </" + name + "> ")
12674 : ;
12675 0 : }
12676 :
12677 :
12678 0 : void Parser::toXMLBase64(vector< vector< vector<Flux> > > data, const string &name, string &buf){
12679 0 : stringstream oss(stringstream::out | stringstream::binary);
12680 0 : string encoded;
12681 :
12682 0 : buf.append("<" + name + "> ");
12683 0 : int ndim = 3;
12684 0 : int dim1 = data.size();
12685 0 : int dim2 = data.at(0).size();
12686 0 : int dim3 = data.at(0).at(0).size();
12687 :
12688 0 : oss.write((char *)&ndim, sizeof(int));
12689 0 : oss.write((char *)&dim1, sizeof(dim1));
12690 0 : oss.write((char *)&dim2, sizeof(dim2));
12691 0 : oss.write((char *)&dim3, sizeof(dim3));
12692 0 : for (unsigned int i = 0; i < data.size(); i++)
12693 0 : for (unsigned int j = 0; j < data.at(0).size(); j++)
12694 0 : for (unsigned int k = 0; k < data.at(0).at(0).size(); k++){
12695 :
12696 0 : double v = data.at(i).at(j).at(k).get();
12697 :
12698 0 : oss.write((char *) &v, sizeof(v));
12699 : }
12700 :
12701 0 : Base64 b64;
12702 0 : b64.encode(oss.str(), encoded, false);
12703 0 : buf.append(encoded);
12704 0 : buf.append(" </" + name + "> ")
12705 : ;
12706 0 : }
12707 :
12708 :
12709 0 : void Parser::toXMLBase64(vector<vector< vector< vector<Flux> > > >data, const string &name, string &buf){
12710 0 : stringstream oss(stringstream::out | stringstream::binary);
12711 0 : string encoded;
12712 :
12713 0 : buf.append("<" + name + "> ");
12714 0 : int ndim = 3;
12715 0 : int dim1 = data.size();
12716 0 : int dim2 = data.at(0).size();
12717 0 : int dim3 = data.at(0).at(0).size();
12718 0 : int dim4 = data.at(0).at(0).at(0).size();
12719 :
12720 0 : oss.write((char *)&ndim, sizeof(int));
12721 0 : oss.write((char *)&dim1, sizeof(dim1));
12722 0 : oss.write((char *)&dim2, sizeof(dim2));
12723 0 : oss.write((char *)&dim3, sizeof(dim3));
12724 0 : oss.write((char *)&dim4, sizeof(dim4));
12725 0 : for (unsigned int i = 0; i < data.size(); i++)
12726 0 : for (unsigned int j = 0; j < data.at(0).size(); j++)
12727 0 : for (unsigned int k = 0; k < data.at(0).at(0).size(); k++)
12728 0 : for (unsigned int l = 0; l < data.at(0).at(0).at(0).size(); l++){
12729 :
12730 0 : double v = data.at(i).at(j).at(k).at(l).get();
12731 :
12732 0 : oss.write((char *) &v, sizeof(v));
12733 : }
12734 :
12735 0 : Base64 b64;
12736 0 : b64.encode(oss.str(), encoded, false);
12737 0 : buf.append(encoded);
12738 0 : buf.append(" </" + name + "> ")
12739 : ;
12740 0 : }
12741 :
12742 :
12743 : #ifndef Double_CPP
12744 :
12745 : #define Double_CPP double
12746 :
12747 : #endif
12748 :
12749 :
12750 : #define TRYREAD(_stream_, _value_) _stream_.read((char*) &(_value_), sizeof(_value_)); \
12751 : if (_stream_.bad()) throw ConversionException("I/O error during read of " + name, tableName);
12752 :
12753 :
12754 0 : vector<Flux>& Parser::get1DFluxFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector<Flux>& attribute)
12755 : {
12756 0 : string xmlField = Parser::getField(xmlDoc,name);
12757 0 : if (xmlField.length() == 0) {
12758 0 : throw ConversionException("Error: Field \"" +
12759 0 : name + "\": Invalid XML syntax", tableName);
12760 : }
12761 :
12762 0 : string decodedString;
12763 0 : Base64 b64;
12764 0 : b64.decode(xmlField, decodedString);
12765 :
12766 0 : stringstream iss(stringstream::in | stringstream::binary);
12767 0 : iss.str(decodedString);
12768 :
12769 0 : attribute.clear();
12770 :
12771 0 : unsigned int ndim = 0;
12772 : //iss.read((char *)&ndim, sizeof(ndim));
12773 0 : TRYREAD(iss,ndim);
12774 :
12775 0 : unsigned int dim1 = 0;
12776 : //iss.read((char *)&dim1, sizeof(dim1));
12777 0 : TRYREAD(iss,dim1);
12778 0 : if (ndim != 1) {
12779 0 : throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 1.", tableName);
12780 : }
12781 :
12782 0 : attribute.reserve(dim1);
12783 :
12784 : Double_CPP v;
12785 0 : for (unsigned int i = 0; i < dim1; i++) {
12786 : //iss.read((char*) &v, sizeof(v));
12787 0 : TRYREAD(iss,v);
12788 :
12789 0 : attribute.push_back(Flux(v));
12790 :
12791 : }
12792 0 : return attribute;
12793 0 : }
12794 :
12795 :
12796 0 : vector <vector<Flux> >& Parser::get2DFluxFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector <vector<Flux> >& attribute)
12797 : {
12798 0 : string xmlField = Parser::getField(xmlDoc,name);
12799 0 : if (xmlField.length() == 0) {
12800 0 : throw ConversionException("Error: Field \"" +
12801 0 : name + "\": Invalid XML syntax", tableName);
12802 : }
12803 :
12804 0 : string decodedString;
12805 0 : Base64 b64;
12806 0 : b64.decode(xmlField, decodedString);
12807 :
12808 0 : stringstream iss(stringstream::in | stringstream::binary);
12809 0 : iss.str(decodedString);
12810 :
12811 0 : attribute.clear();
12812 :
12813 0 : unsigned int ndim = 0;
12814 : //iss.read((char *)&ndim, sizeof(ndim));
12815 0 : TRYREAD(iss,ndim);
12816 :
12817 0 : if (ndim != 2) {
12818 0 : throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 2.", tableName);
12819 : }
12820 :
12821 0 : unsigned int dim1 = 0;
12822 : //iss.read((char *)&dim1, sizeof(dim1));
12823 0 : TRYREAD(iss,dim1);
12824 :
12825 0 : unsigned int dim2 = 0;
12826 : //iss.read((char *)&dim2, sizeof(dim2));
12827 0 : TRYREAD(iss,dim2);
12828 :
12829 0 : attribute.reserve(dim1);
12830 :
12831 : Double_CPP v;
12832 0 : vector<Flux> aux2;
12833 0 : aux2.reserve(dim2);
12834 0 : for (unsigned int i = 0; i < dim1; i++) {
12835 0 : aux2.clear();
12836 0 : for (unsigned int j = 0; j < dim2; j++) {
12837 : //iss.read((char*) &v, sizeof(v));
12838 0 : TRYREAD(iss,v);
12839 :
12840 0 : aux2.push_back(Flux(v));
12841 :
12842 : }
12843 0 : attribute.push_back(aux2);
12844 : }
12845 0 : return attribute;
12846 0 : }
12847 :
12848 :
12849 0 : vector <vector <vector<Flux> > >& Parser::get3DFluxFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector <vector <vector<Flux> > >& attribute)
12850 : {
12851 0 : string xmlField = Parser::getField(xmlDoc,name);
12852 0 : if (xmlField.length() == 0) {
12853 0 : throw ConversionException("Error: Field \"" +
12854 0 : name + "\": Invalid XML syntax", tableName);
12855 : }
12856 :
12857 0 : string decodedString;
12858 0 : Base64 b64;
12859 0 : b64.decode(xmlField, decodedString);
12860 :
12861 0 : stringstream iss(stringstream::in | stringstream::binary);
12862 0 : iss.str(decodedString);
12863 :
12864 0 : attribute.clear();
12865 :
12866 0 : unsigned int ndim = 0;
12867 : //iss.read((char *)&ndim, sizeof(ndim));
12868 0 : TRYREAD(iss, ndim);
12869 0 : if (ndim != 3) {
12870 0 : throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 3.", tableName);
12871 : }
12872 :
12873 0 : unsigned int dim1 = 0;
12874 : //iss.read((char *)&dim1, sizeof(dim1));
12875 0 : TRYREAD(iss,dim1);
12876 :
12877 0 : unsigned int dim2 = 0;
12878 : //iss.read((char *)&dim2, sizeof(dim2));
12879 0 : TRYREAD(iss,dim2);
12880 :
12881 0 : unsigned int dim3 = 0;
12882 : //iss.read((char *)&dim2, sizeof(dim3));
12883 0 : TRYREAD(iss,dim3);
12884 :
12885 0 : attribute.reserve(dim1);
12886 :
12887 : Double_CPP v;
12888 0 : vector <vector<Flux> > aux2;
12889 0 : vector<Flux> aux3;
12890 0 : aux2.reserve(dim2);
12891 0 : aux3.reserve(dim3);
12892 :
12893 0 : for (unsigned int i = 0; i < dim1; i++) {
12894 0 : aux2.clear();
12895 0 : for (unsigned int j = 0; j < dim2; j++) {
12896 0 : aux3.clear();
12897 0 : for (unsigned int k = 0; k < dim3; k++) {
12898 : //iss.read((char*) &v, sizeof(v));
12899 0 : TRYREAD(iss,v);
12900 :
12901 0 : aux3.push_back(Flux(v));
12902 :
12903 : }
12904 0 : aux2.push_back(aux3);
12905 : }
12906 0 : attribute.push_back(aux2);
12907 : }
12908 0 : return attribute;
12909 : ;
12910 0 : }
12911 :
12912 :
12913 0 : vector <vector <vector <vector<Flux> > > >& Parser::get4DFluxFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector< vector <vector <vector<Flux> > > >& attribute)
12914 : {
12915 0 : string xmlField = Parser::getField(xmlDoc,name);
12916 0 : if (xmlField.length() == 0) {
12917 0 : throw ConversionException("Error: Field \"" +
12918 0 : name + "\": Invalid XML syntax", tableName);
12919 : }
12920 :
12921 0 : string decodedString;
12922 0 : Base64 b64;
12923 0 : b64.decode(xmlField, decodedString);
12924 :
12925 0 : stringstream iss(stringstream::in | stringstream::binary);
12926 0 : iss.str(decodedString);
12927 :
12928 0 : attribute.clear();
12929 :
12930 0 : unsigned int ndim = 0;
12931 : //iss.read((char *)&ndim, sizeof(ndim));
12932 0 : TRYREAD(iss, ndim);
12933 0 : if (ndim != 4) {
12934 0 : throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 4.", tableName);
12935 : }
12936 :
12937 0 : unsigned int dim1 = 0;
12938 : //iss.read((char *)&dim1, sizeof(dim1));
12939 0 : TRYREAD(iss,dim1);
12940 :
12941 0 : unsigned int dim2 = 0;
12942 : //iss.read((char *)&dim2, sizeof(dim2));
12943 0 : TRYREAD(iss,dim2);
12944 :
12945 0 : unsigned int dim3 = 0;
12946 : //iss.read((char *)&dim2, sizeof(dim3));
12947 0 : TRYREAD(iss,dim3);
12948 :
12949 0 : unsigned int dim4 = 0;
12950 : //iss.read((char *)&dim2, sizeof(dim3));
12951 0 : TRYREAD(iss,dim3);
12952 :
12953 0 : attribute.reserve(dim1);
12954 :
12955 : Double_CPP v;
12956 0 : vector <vector <vector<Flux> > > aux2;
12957 0 : vector <vector<Flux> > aux3;
12958 0 : vector<Flux> aux4;
12959 0 : aux2.reserve(dim2);
12960 0 : aux3.reserve(dim3);
12961 0 : aux4.reserve(dim4);
12962 :
12963 0 : for (unsigned int i = 0; i < dim1; i++) {
12964 0 : aux2.clear();
12965 0 : for (unsigned int j = 0; j < dim2; j++) {
12966 0 : aux3.clear();
12967 0 : for (unsigned int k = 0; k < dim3; k++) {
12968 0 : aux4.clear();
12969 0 : for (unsigned int l = 0; l < dim4; l++) {
12970 : //iss.read((char*) &v, sizeof(v));
12971 0 : TRYREAD(iss,v);
12972 :
12973 0 : aux4.push_back(Flux(v));
12974 :
12975 : }
12976 0 : aux3.push_back(aux4);
12977 : }
12978 0 : aux2.push_back(aux3);
12979 : }
12980 0 : attribute.push_back(aux2);
12981 : }
12982 0 : return attribute;
12983 : ;
12984 0 : }
12985 :
12986 :
12987 :
12988 :
12989 :
12990 :
12991 :
12992 0 : void Parser::toXMLBase64(vector<Frequency> data, const string &name, string &buf){
12993 0 : stringstream oss(stringstream::out | stringstream::binary);
12994 0 : string encoded;
12995 :
12996 0 : buf.append("<" + name + "> ");
12997 0 : int ndim = 1;
12998 0 : int dim1 = data.size();
12999 :
13000 0 : oss.write((char *)&ndim, sizeof(int));
13001 0 : oss.write((char *)&dim1, sizeof(dim1));
13002 :
13003 0 : for (unsigned int i = 0; i < data.size(); i++) {
13004 :
13005 0 : double v = data.at(i).get();
13006 :
13007 0 : oss.write((char *) &v, sizeof(v));
13008 : }
13009 :
13010 0 : Base64 b64;
13011 0 : b64.encode(oss.str(), encoded, false);
13012 0 : buf.append(encoded);
13013 0 : buf.append(" </" + name + "> ");
13014 0 : }
13015 :
13016 :
13017 0 : void Parser::toXMLBase64(vector< vector<Frequency> > data, const string &name, string &buf){
13018 0 : stringstream oss(stringstream::out | stringstream::binary);
13019 0 : string encoded;
13020 :
13021 0 : buf.append("<" + name + "> ");
13022 0 : int ndim = 2;
13023 0 : int dim1 = data.size();
13024 0 : int dim2 = data.at(0).size();
13025 :
13026 0 : oss.write((char *)&ndim, sizeof(int));
13027 0 : oss.write((char *)&dim1, sizeof(dim1));
13028 0 : oss.write((char *)&dim2, sizeof(dim2));
13029 0 : for (unsigned int i = 0; i < data.size(); i++)
13030 0 : for (unsigned int j = 0; j < data.at(0).size(); j++) {
13031 :
13032 0 : double v = data.at(i).at(j).get();
13033 :
13034 0 : oss.write((char *) &v, sizeof(v));
13035 : }
13036 :
13037 0 : Base64 b64;
13038 0 : b64.encode(oss.str(), encoded, false);
13039 0 : buf.append(encoded);
13040 0 : buf.append(" </" + name + "> ")
13041 : ;
13042 0 : }
13043 :
13044 :
13045 0 : void Parser::toXMLBase64(vector< vector< vector<Frequency> > > data, const string &name, string &buf){
13046 0 : stringstream oss(stringstream::out | stringstream::binary);
13047 0 : string encoded;
13048 :
13049 0 : buf.append("<" + name + "> ");
13050 0 : int ndim = 3;
13051 0 : int dim1 = data.size();
13052 0 : int dim2 = data.at(0).size();
13053 0 : int dim3 = data.at(0).at(0).size();
13054 :
13055 0 : oss.write((char *)&ndim, sizeof(int));
13056 0 : oss.write((char *)&dim1, sizeof(dim1));
13057 0 : oss.write((char *)&dim2, sizeof(dim2));
13058 0 : oss.write((char *)&dim3, sizeof(dim3));
13059 0 : for (unsigned int i = 0; i < data.size(); i++)
13060 0 : for (unsigned int j = 0; j < data.at(0).size(); j++)
13061 0 : for (unsigned int k = 0; k < data.at(0).at(0).size(); k++){
13062 :
13063 0 : double v = data.at(i).at(j).at(k).get();
13064 :
13065 0 : oss.write((char *) &v, sizeof(v));
13066 : }
13067 :
13068 0 : Base64 b64;
13069 0 : b64.encode(oss.str(), encoded, false);
13070 0 : buf.append(encoded);
13071 0 : buf.append(" </" + name + "> ")
13072 : ;
13073 0 : }
13074 :
13075 :
13076 0 : void Parser::toXMLBase64(vector<vector< vector< vector<Frequency> > > >data, const string &name, string &buf){
13077 0 : stringstream oss(stringstream::out | stringstream::binary);
13078 0 : string encoded;
13079 :
13080 0 : buf.append("<" + name + "> ");
13081 0 : int ndim = 3;
13082 0 : int dim1 = data.size();
13083 0 : int dim2 = data.at(0).size();
13084 0 : int dim3 = data.at(0).at(0).size();
13085 0 : int dim4 = data.at(0).at(0).at(0).size();
13086 :
13087 0 : oss.write((char *)&ndim, sizeof(int));
13088 0 : oss.write((char *)&dim1, sizeof(dim1));
13089 0 : oss.write((char *)&dim2, sizeof(dim2));
13090 0 : oss.write((char *)&dim3, sizeof(dim3));
13091 0 : oss.write((char *)&dim4, sizeof(dim4));
13092 0 : for (unsigned int i = 0; i < data.size(); i++)
13093 0 : for (unsigned int j = 0; j < data.at(0).size(); j++)
13094 0 : for (unsigned int k = 0; k < data.at(0).at(0).size(); k++)
13095 0 : for (unsigned int l = 0; l < data.at(0).at(0).at(0).size(); l++){
13096 :
13097 0 : double v = data.at(i).at(j).at(k).at(l).get();
13098 :
13099 0 : oss.write((char *) &v, sizeof(v));
13100 : }
13101 :
13102 0 : Base64 b64;
13103 0 : b64.encode(oss.str(), encoded, false);
13104 0 : buf.append(encoded);
13105 0 : buf.append(" </" + name + "> ")
13106 : ;
13107 0 : }
13108 :
13109 :
13110 : #ifndef Double_CPP
13111 :
13112 : #define Double_CPP double
13113 :
13114 : #endif
13115 :
13116 :
13117 : #define TRYREAD(_stream_, _value_) _stream_.read((char*) &(_value_), sizeof(_value_)); \
13118 : if (_stream_.bad()) throw ConversionException("I/O error during read of " + name, tableName);
13119 :
13120 :
13121 0 : vector<Frequency>& Parser::get1DFrequencyFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector<Frequency>& attribute)
13122 : {
13123 0 : string xmlField = Parser::getField(xmlDoc,name);
13124 0 : if (xmlField.length() == 0) {
13125 0 : throw ConversionException("Error: Field \"" +
13126 0 : name + "\": Invalid XML syntax", tableName);
13127 : }
13128 :
13129 0 : string decodedString;
13130 0 : Base64 b64;
13131 0 : b64.decode(xmlField, decodedString);
13132 :
13133 0 : stringstream iss(stringstream::in | stringstream::binary);
13134 0 : iss.str(decodedString);
13135 :
13136 0 : attribute.clear();
13137 :
13138 0 : unsigned int ndim = 0;
13139 : //iss.read((char *)&ndim, sizeof(ndim));
13140 0 : TRYREAD(iss,ndim);
13141 :
13142 0 : unsigned int dim1 = 0;
13143 : //iss.read((char *)&dim1, sizeof(dim1));
13144 0 : TRYREAD(iss,dim1);
13145 0 : if (ndim != 1) {
13146 0 : throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 1.", tableName);
13147 : }
13148 :
13149 0 : attribute.reserve(dim1);
13150 :
13151 : Double_CPP v;
13152 0 : for (unsigned int i = 0; i < dim1; i++) {
13153 : //iss.read((char*) &v, sizeof(v));
13154 0 : TRYREAD(iss,v);
13155 :
13156 0 : attribute.push_back(Frequency(v));
13157 :
13158 : }
13159 0 : return attribute;
13160 0 : }
13161 :
13162 :
13163 0 : vector <vector<Frequency> >& Parser::get2DFrequencyFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector <vector<Frequency> >& attribute)
13164 : {
13165 0 : string xmlField = Parser::getField(xmlDoc,name);
13166 0 : if (xmlField.length() == 0) {
13167 0 : throw ConversionException("Error: Field \"" +
13168 0 : name + "\": Invalid XML syntax", tableName);
13169 : }
13170 :
13171 0 : string decodedString;
13172 0 : Base64 b64;
13173 0 : b64.decode(xmlField, decodedString);
13174 :
13175 0 : stringstream iss(stringstream::in | stringstream::binary);
13176 0 : iss.str(decodedString);
13177 :
13178 0 : attribute.clear();
13179 :
13180 0 : unsigned int ndim = 0;
13181 : //iss.read((char *)&ndim, sizeof(ndim));
13182 0 : TRYREAD(iss,ndim);
13183 :
13184 0 : if (ndim != 2) {
13185 0 : throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 2.", tableName);
13186 : }
13187 :
13188 0 : unsigned int dim1 = 0;
13189 : //iss.read((char *)&dim1, sizeof(dim1));
13190 0 : TRYREAD(iss,dim1);
13191 :
13192 0 : unsigned int dim2 = 0;
13193 : //iss.read((char *)&dim2, sizeof(dim2));
13194 0 : TRYREAD(iss,dim2);
13195 :
13196 0 : attribute.reserve(dim1);
13197 :
13198 : Double_CPP v;
13199 0 : vector<Frequency> aux2;
13200 0 : aux2.reserve(dim2);
13201 0 : for (unsigned int i = 0; i < dim1; i++) {
13202 0 : aux2.clear();
13203 0 : for (unsigned int j = 0; j < dim2; j++) {
13204 : //iss.read((char*) &v, sizeof(v));
13205 0 : TRYREAD(iss,v);
13206 :
13207 0 : aux2.push_back(Frequency(v));
13208 :
13209 : }
13210 0 : attribute.push_back(aux2);
13211 : }
13212 0 : return attribute;
13213 0 : }
13214 :
13215 :
13216 0 : vector <vector <vector<Frequency> > >& Parser::get3DFrequencyFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector <vector <vector<Frequency> > >& attribute)
13217 : {
13218 0 : string xmlField = Parser::getField(xmlDoc,name);
13219 0 : if (xmlField.length() == 0) {
13220 0 : throw ConversionException("Error: Field \"" +
13221 0 : name + "\": Invalid XML syntax", tableName);
13222 : }
13223 :
13224 0 : string decodedString;
13225 0 : Base64 b64;
13226 0 : b64.decode(xmlField, decodedString);
13227 :
13228 0 : stringstream iss(stringstream::in | stringstream::binary);
13229 0 : iss.str(decodedString);
13230 :
13231 0 : attribute.clear();
13232 :
13233 0 : unsigned int ndim = 0;
13234 : //iss.read((char *)&ndim, sizeof(ndim));
13235 0 : TRYREAD(iss, ndim);
13236 0 : if (ndim != 3) {
13237 0 : throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 3.", tableName);
13238 : }
13239 :
13240 0 : unsigned int dim1 = 0;
13241 : //iss.read((char *)&dim1, sizeof(dim1));
13242 0 : TRYREAD(iss,dim1);
13243 :
13244 0 : unsigned int dim2 = 0;
13245 : //iss.read((char *)&dim2, sizeof(dim2));
13246 0 : TRYREAD(iss,dim2);
13247 :
13248 0 : unsigned int dim3 = 0;
13249 : //iss.read((char *)&dim2, sizeof(dim3));
13250 0 : TRYREAD(iss,dim3);
13251 :
13252 0 : attribute.reserve(dim1);
13253 :
13254 : Double_CPP v;
13255 0 : vector <vector<Frequency> > aux2;
13256 0 : vector<Frequency> aux3;
13257 0 : aux2.reserve(dim2);
13258 0 : aux3.reserve(dim3);
13259 :
13260 0 : for (unsigned int i = 0; i < dim1; i++) {
13261 0 : aux2.clear();
13262 0 : for (unsigned int j = 0; j < dim2; j++) {
13263 0 : aux3.clear();
13264 0 : for (unsigned int k = 0; k < dim3; k++) {
13265 : //iss.read((char*) &v, sizeof(v));
13266 0 : TRYREAD(iss,v);
13267 :
13268 0 : aux3.push_back(Frequency(v));
13269 :
13270 : }
13271 0 : aux2.push_back(aux3);
13272 : }
13273 0 : attribute.push_back(aux2);
13274 : }
13275 0 : return attribute;
13276 : ;
13277 0 : }
13278 :
13279 :
13280 0 : vector <vector <vector <vector<Frequency> > > >& Parser::get4DFrequencyFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector< vector <vector <vector<Frequency> > > >& attribute)
13281 : {
13282 0 : string xmlField = Parser::getField(xmlDoc,name);
13283 0 : if (xmlField.length() == 0) {
13284 0 : throw ConversionException("Error: Field \"" +
13285 0 : name + "\": Invalid XML syntax", tableName);
13286 : }
13287 :
13288 0 : string decodedString;
13289 0 : Base64 b64;
13290 0 : b64.decode(xmlField, decodedString);
13291 :
13292 0 : stringstream iss(stringstream::in | stringstream::binary);
13293 0 : iss.str(decodedString);
13294 :
13295 0 : attribute.clear();
13296 :
13297 0 : unsigned int ndim = 0;
13298 : //iss.read((char *)&ndim, sizeof(ndim));
13299 0 : TRYREAD(iss, ndim);
13300 0 : if (ndim != 4) {
13301 0 : throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 4.", tableName);
13302 : }
13303 :
13304 0 : unsigned int dim1 = 0;
13305 : //iss.read((char *)&dim1, sizeof(dim1));
13306 0 : TRYREAD(iss,dim1);
13307 :
13308 0 : unsigned int dim2 = 0;
13309 : //iss.read((char *)&dim2, sizeof(dim2));
13310 0 : TRYREAD(iss,dim2);
13311 :
13312 0 : unsigned int dim3 = 0;
13313 : //iss.read((char *)&dim2, sizeof(dim3));
13314 0 : TRYREAD(iss,dim3);
13315 :
13316 0 : unsigned int dim4 = 0;
13317 : //iss.read((char *)&dim2, sizeof(dim3));
13318 0 : TRYREAD(iss,dim3);
13319 :
13320 0 : attribute.reserve(dim1);
13321 :
13322 : Double_CPP v;
13323 0 : vector <vector <vector<Frequency> > > aux2;
13324 0 : vector <vector<Frequency> > aux3;
13325 0 : vector<Frequency> aux4;
13326 0 : aux2.reserve(dim2);
13327 0 : aux3.reserve(dim3);
13328 0 : aux4.reserve(dim4);
13329 :
13330 0 : for (unsigned int i = 0; i < dim1; i++) {
13331 0 : aux2.clear();
13332 0 : for (unsigned int j = 0; j < dim2; j++) {
13333 0 : aux3.clear();
13334 0 : for (unsigned int k = 0; k < dim3; k++) {
13335 0 : aux4.clear();
13336 0 : for (unsigned int l = 0; l < dim4; l++) {
13337 : //iss.read((char*) &v, sizeof(v));
13338 0 : TRYREAD(iss,v);
13339 :
13340 0 : aux4.push_back(Frequency(v));
13341 :
13342 : }
13343 0 : aux3.push_back(aux4);
13344 : }
13345 0 : aux2.push_back(aux3);
13346 : }
13347 0 : attribute.push_back(aux2);
13348 : }
13349 0 : return attribute;
13350 : ;
13351 0 : }
13352 :
13353 :
13354 :
13355 :
13356 :
13357 :
13358 :
13359 0 : void Parser::toXMLBase64(vector<Humidity> data, const string &name, string &buf){
13360 0 : stringstream oss(stringstream::out | stringstream::binary);
13361 0 : string encoded;
13362 :
13363 0 : buf.append("<" + name + "> ");
13364 0 : int ndim = 1;
13365 0 : int dim1 = data.size();
13366 :
13367 0 : oss.write((char *)&ndim, sizeof(int));
13368 0 : oss.write((char *)&dim1, sizeof(dim1));
13369 :
13370 0 : for (unsigned int i = 0; i < data.size(); i++) {
13371 :
13372 0 : double v = data.at(i).get();
13373 :
13374 0 : oss.write((char *) &v, sizeof(v));
13375 : }
13376 :
13377 0 : Base64 b64;
13378 0 : b64.encode(oss.str(), encoded, false);
13379 0 : buf.append(encoded);
13380 0 : buf.append(" </" + name + "> ");
13381 0 : }
13382 :
13383 :
13384 0 : void Parser::toXMLBase64(vector< vector<Humidity> > data, const string &name, string &buf){
13385 0 : stringstream oss(stringstream::out | stringstream::binary);
13386 0 : string encoded;
13387 :
13388 0 : buf.append("<" + name + "> ");
13389 0 : int ndim = 2;
13390 0 : int dim1 = data.size();
13391 0 : int dim2 = data.at(0).size();
13392 :
13393 0 : oss.write((char *)&ndim, sizeof(int));
13394 0 : oss.write((char *)&dim1, sizeof(dim1));
13395 0 : oss.write((char *)&dim2, sizeof(dim2));
13396 0 : for (unsigned int i = 0; i < data.size(); i++)
13397 0 : for (unsigned int j = 0; j < data.at(0).size(); j++) {
13398 :
13399 0 : double v = data.at(i).at(j).get();
13400 :
13401 0 : oss.write((char *) &v, sizeof(v));
13402 : }
13403 :
13404 0 : Base64 b64;
13405 0 : b64.encode(oss.str(), encoded, false);
13406 0 : buf.append(encoded);
13407 0 : buf.append(" </" + name + "> ")
13408 : ;
13409 0 : }
13410 :
13411 :
13412 0 : void Parser::toXMLBase64(vector< vector< vector<Humidity> > > data, const string &name, string &buf){
13413 0 : stringstream oss(stringstream::out | stringstream::binary);
13414 0 : string encoded;
13415 :
13416 0 : buf.append("<" + name + "> ");
13417 0 : int ndim = 3;
13418 0 : int dim1 = data.size();
13419 0 : int dim2 = data.at(0).size();
13420 0 : int dim3 = data.at(0).at(0).size();
13421 :
13422 0 : oss.write((char *)&ndim, sizeof(int));
13423 0 : oss.write((char *)&dim1, sizeof(dim1));
13424 0 : oss.write((char *)&dim2, sizeof(dim2));
13425 0 : oss.write((char *)&dim3, sizeof(dim3));
13426 0 : for (unsigned int i = 0; i < data.size(); i++)
13427 0 : for (unsigned int j = 0; j < data.at(0).size(); j++)
13428 0 : for (unsigned int k = 0; k < data.at(0).at(0).size(); k++){
13429 :
13430 0 : double v = data.at(i).at(j).at(k).get();
13431 :
13432 0 : oss.write((char *) &v, sizeof(v));
13433 : }
13434 :
13435 0 : Base64 b64;
13436 0 : b64.encode(oss.str(), encoded, false);
13437 0 : buf.append(encoded);
13438 0 : buf.append(" </" + name + "> ")
13439 : ;
13440 0 : }
13441 :
13442 :
13443 0 : void Parser::toXMLBase64(vector<vector< vector< vector<Humidity> > > >data, const string &name, string &buf){
13444 0 : stringstream oss(stringstream::out | stringstream::binary);
13445 0 : string encoded;
13446 :
13447 0 : buf.append("<" + name + "> ");
13448 0 : int ndim = 3;
13449 0 : int dim1 = data.size();
13450 0 : int dim2 = data.at(0).size();
13451 0 : int dim3 = data.at(0).at(0).size();
13452 0 : int dim4 = data.at(0).at(0).at(0).size();
13453 :
13454 0 : oss.write((char *)&ndim, sizeof(int));
13455 0 : oss.write((char *)&dim1, sizeof(dim1));
13456 0 : oss.write((char *)&dim2, sizeof(dim2));
13457 0 : oss.write((char *)&dim3, sizeof(dim3));
13458 0 : oss.write((char *)&dim4, sizeof(dim4));
13459 0 : for (unsigned int i = 0; i < data.size(); i++)
13460 0 : for (unsigned int j = 0; j < data.at(0).size(); j++)
13461 0 : for (unsigned int k = 0; k < data.at(0).at(0).size(); k++)
13462 0 : for (unsigned int l = 0; l < data.at(0).at(0).at(0).size(); l++){
13463 :
13464 0 : double v = data.at(i).at(j).at(k).at(l).get();
13465 :
13466 0 : oss.write((char *) &v, sizeof(v));
13467 : }
13468 :
13469 0 : Base64 b64;
13470 0 : b64.encode(oss.str(), encoded, false);
13471 0 : buf.append(encoded);
13472 0 : buf.append(" </" + name + "> ")
13473 : ;
13474 0 : }
13475 :
13476 :
13477 : #ifndef Double_CPP
13478 :
13479 : #define Double_CPP double
13480 :
13481 : #endif
13482 :
13483 :
13484 : #define TRYREAD(_stream_, _value_) _stream_.read((char*) &(_value_), sizeof(_value_)); \
13485 : if (_stream_.bad()) throw ConversionException("I/O error during read of " + name, tableName);
13486 :
13487 :
13488 0 : vector<Humidity>& Parser::get1DHumidityFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector<Humidity>& attribute)
13489 : {
13490 0 : string xmlField = Parser::getField(xmlDoc,name);
13491 0 : if (xmlField.length() == 0) {
13492 0 : throw ConversionException("Error: Field \"" +
13493 0 : name + "\": Invalid XML syntax", tableName);
13494 : }
13495 :
13496 0 : string decodedString;
13497 0 : Base64 b64;
13498 0 : b64.decode(xmlField, decodedString);
13499 :
13500 0 : stringstream iss(stringstream::in | stringstream::binary);
13501 0 : iss.str(decodedString);
13502 :
13503 0 : attribute.clear();
13504 :
13505 0 : unsigned int ndim = 0;
13506 : //iss.read((char *)&ndim, sizeof(ndim));
13507 0 : TRYREAD(iss,ndim);
13508 :
13509 0 : unsigned int dim1 = 0;
13510 : //iss.read((char *)&dim1, sizeof(dim1));
13511 0 : TRYREAD(iss,dim1);
13512 0 : if (ndim != 1) {
13513 0 : throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 1.", tableName);
13514 : }
13515 :
13516 0 : attribute.reserve(dim1);
13517 :
13518 : Double_CPP v;
13519 0 : for (unsigned int i = 0; i < dim1; i++) {
13520 : //iss.read((char*) &v, sizeof(v));
13521 0 : TRYREAD(iss,v);
13522 :
13523 0 : attribute.push_back(Humidity(v));
13524 :
13525 : }
13526 0 : return attribute;
13527 0 : }
13528 :
13529 :
13530 0 : vector <vector<Humidity> >& Parser::get2DHumidityFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector <vector<Humidity> >& attribute)
13531 : {
13532 0 : string xmlField = Parser::getField(xmlDoc,name);
13533 0 : if (xmlField.length() == 0) {
13534 0 : throw ConversionException("Error: Field \"" +
13535 0 : name + "\": Invalid XML syntax", tableName);
13536 : }
13537 :
13538 0 : string decodedString;
13539 0 : Base64 b64;
13540 0 : b64.decode(xmlField, decodedString);
13541 :
13542 0 : stringstream iss(stringstream::in | stringstream::binary);
13543 0 : iss.str(decodedString);
13544 :
13545 0 : attribute.clear();
13546 :
13547 0 : unsigned int ndim = 0;
13548 : //iss.read((char *)&ndim, sizeof(ndim));
13549 0 : TRYREAD(iss,ndim);
13550 :
13551 0 : if (ndim != 2) {
13552 0 : throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 2.", tableName);
13553 : }
13554 :
13555 0 : unsigned int dim1 = 0;
13556 : //iss.read((char *)&dim1, sizeof(dim1));
13557 0 : TRYREAD(iss,dim1);
13558 :
13559 0 : unsigned int dim2 = 0;
13560 : //iss.read((char *)&dim2, sizeof(dim2));
13561 0 : TRYREAD(iss,dim2);
13562 :
13563 0 : attribute.reserve(dim1);
13564 :
13565 : Double_CPP v;
13566 0 : vector<Humidity> aux2;
13567 0 : aux2.reserve(dim2);
13568 0 : for (unsigned int i = 0; i < dim1; i++) {
13569 0 : aux2.clear();
13570 0 : for (unsigned int j = 0; j < dim2; j++) {
13571 : //iss.read((char*) &v, sizeof(v));
13572 0 : TRYREAD(iss,v);
13573 :
13574 0 : aux2.push_back(Humidity(v));
13575 :
13576 : }
13577 0 : attribute.push_back(aux2);
13578 : }
13579 0 : return attribute;
13580 0 : }
13581 :
13582 :
13583 0 : vector <vector <vector<Humidity> > >& Parser::get3DHumidityFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector <vector <vector<Humidity> > >& attribute)
13584 : {
13585 0 : string xmlField = Parser::getField(xmlDoc,name);
13586 0 : if (xmlField.length() == 0) {
13587 0 : throw ConversionException("Error: Field \"" +
13588 0 : name + "\": Invalid XML syntax", tableName);
13589 : }
13590 :
13591 0 : string decodedString;
13592 0 : Base64 b64;
13593 0 : b64.decode(xmlField, decodedString);
13594 :
13595 0 : stringstream iss(stringstream::in | stringstream::binary);
13596 0 : iss.str(decodedString);
13597 :
13598 0 : attribute.clear();
13599 :
13600 0 : unsigned int ndim = 0;
13601 : //iss.read((char *)&ndim, sizeof(ndim));
13602 0 : TRYREAD(iss, ndim);
13603 0 : if (ndim != 3) {
13604 0 : throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 3.", tableName);
13605 : }
13606 :
13607 0 : unsigned int dim1 = 0;
13608 : //iss.read((char *)&dim1, sizeof(dim1));
13609 0 : TRYREAD(iss,dim1);
13610 :
13611 0 : unsigned int dim2 = 0;
13612 : //iss.read((char *)&dim2, sizeof(dim2));
13613 0 : TRYREAD(iss,dim2);
13614 :
13615 0 : unsigned int dim3 = 0;
13616 : //iss.read((char *)&dim2, sizeof(dim3));
13617 0 : TRYREAD(iss,dim3);
13618 :
13619 0 : attribute.reserve(dim1);
13620 :
13621 : Double_CPP v;
13622 0 : vector <vector<Humidity> > aux2;
13623 0 : vector<Humidity> aux3;
13624 0 : aux2.reserve(dim2);
13625 0 : aux3.reserve(dim3);
13626 :
13627 0 : for (unsigned int i = 0; i < dim1; i++) {
13628 0 : aux2.clear();
13629 0 : for (unsigned int j = 0; j < dim2; j++) {
13630 0 : aux3.clear();
13631 0 : for (unsigned int k = 0; k < dim3; k++) {
13632 : //iss.read((char*) &v, sizeof(v));
13633 0 : TRYREAD(iss,v);
13634 :
13635 0 : aux3.push_back(Humidity(v));
13636 :
13637 : }
13638 0 : aux2.push_back(aux3);
13639 : }
13640 0 : attribute.push_back(aux2);
13641 : }
13642 0 : return attribute;
13643 : ;
13644 0 : }
13645 :
13646 :
13647 0 : vector <vector <vector <vector<Humidity> > > >& Parser::get4DHumidityFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector< vector <vector <vector<Humidity> > > >& attribute)
13648 : {
13649 0 : string xmlField = Parser::getField(xmlDoc,name);
13650 0 : if (xmlField.length() == 0) {
13651 0 : throw ConversionException("Error: Field \"" +
13652 0 : name + "\": Invalid XML syntax", tableName);
13653 : }
13654 :
13655 0 : string decodedString;
13656 0 : Base64 b64;
13657 0 : b64.decode(xmlField, decodedString);
13658 :
13659 0 : stringstream iss(stringstream::in | stringstream::binary);
13660 0 : iss.str(decodedString);
13661 :
13662 0 : attribute.clear();
13663 :
13664 0 : unsigned int ndim = 0;
13665 : //iss.read((char *)&ndim, sizeof(ndim));
13666 0 : TRYREAD(iss, ndim);
13667 0 : if (ndim != 4) {
13668 0 : throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 4.", tableName);
13669 : }
13670 :
13671 0 : unsigned int dim1 = 0;
13672 : //iss.read((char *)&dim1, sizeof(dim1));
13673 0 : TRYREAD(iss,dim1);
13674 :
13675 0 : unsigned int dim2 = 0;
13676 : //iss.read((char *)&dim2, sizeof(dim2));
13677 0 : TRYREAD(iss,dim2);
13678 :
13679 0 : unsigned int dim3 = 0;
13680 : //iss.read((char *)&dim2, sizeof(dim3));
13681 0 : TRYREAD(iss,dim3);
13682 :
13683 0 : unsigned int dim4 = 0;
13684 : //iss.read((char *)&dim2, sizeof(dim3));
13685 0 : TRYREAD(iss,dim3);
13686 :
13687 0 : attribute.reserve(dim1);
13688 :
13689 : Double_CPP v;
13690 0 : vector <vector <vector<Humidity> > > aux2;
13691 0 : vector <vector<Humidity> > aux3;
13692 0 : vector<Humidity> aux4;
13693 0 : aux2.reserve(dim2);
13694 0 : aux3.reserve(dim3);
13695 0 : aux4.reserve(dim4);
13696 :
13697 0 : for (unsigned int i = 0; i < dim1; i++) {
13698 0 : aux2.clear();
13699 0 : for (unsigned int j = 0; j < dim2; j++) {
13700 0 : aux3.clear();
13701 0 : for (unsigned int k = 0; k < dim3; k++) {
13702 0 : aux4.clear();
13703 0 : for (unsigned int l = 0; l < dim4; l++) {
13704 : //iss.read((char*) &v, sizeof(v));
13705 0 : TRYREAD(iss,v);
13706 :
13707 0 : aux4.push_back(Humidity(v));
13708 :
13709 : }
13710 0 : aux3.push_back(aux4);
13711 : }
13712 0 : aux2.push_back(aux3);
13713 : }
13714 0 : attribute.push_back(aux2);
13715 : }
13716 0 : return attribute;
13717 : ;
13718 0 : }
13719 :
13720 :
13721 :
13722 :
13723 :
13724 :
13725 :
13726 0 : void Parser::toXMLBase64(vector<Interval> data, const string &name, string &buf){
13727 0 : stringstream oss(stringstream::out | stringstream::binary);
13728 0 : string encoded;
13729 :
13730 0 : buf.append("<" + name + "> ");
13731 0 : int ndim = 1;
13732 0 : int dim1 = data.size();
13733 :
13734 0 : oss.write((char *)&ndim, sizeof(int));
13735 0 : oss.write((char *)&dim1, sizeof(dim1));
13736 :
13737 0 : for (unsigned int i = 0; i < data.size(); i++) {
13738 :
13739 0 : long v = data.at(i).get();
13740 :
13741 0 : oss.write((char *) &v, sizeof(v));
13742 : }
13743 :
13744 0 : Base64 b64;
13745 0 : b64.encode(oss.str(), encoded, false);
13746 0 : buf.append(encoded);
13747 0 : buf.append(" </" + name + "> ");
13748 0 : }
13749 :
13750 :
13751 0 : void Parser::toXMLBase64(vector< vector<Interval> > data, const string &name, string &buf){
13752 0 : stringstream oss(stringstream::out | stringstream::binary);
13753 0 : string encoded;
13754 :
13755 0 : buf.append("<" + name + "> ");
13756 0 : int ndim = 2;
13757 0 : int dim1 = data.size();
13758 0 : int dim2 = data.at(0).size();
13759 :
13760 0 : oss.write((char *)&ndim, sizeof(int));
13761 0 : oss.write((char *)&dim1, sizeof(dim1));
13762 0 : oss.write((char *)&dim2, sizeof(dim2));
13763 0 : for (unsigned int i = 0; i < data.size(); i++)
13764 0 : for (unsigned int j = 0; j < data.at(0).size(); j++) {
13765 :
13766 0 : long v = data.at(i).at(j).get();
13767 :
13768 0 : oss.write((char *) &v, sizeof(v));
13769 : }
13770 :
13771 0 : Base64 b64;
13772 0 : b64.encode(oss.str(), encoded, false);
13773 0 : buf.append(encoded);
13774 0 : buf.append(" </" + name + "> ")
13775 : ;
13776 0 : }
13777 :
13778 :
13779 0 : void Parser::toXMLBase64(vector< vector< vector<Interval> > > data, const string &name, string &buf){
13780 0 : stringstream oss(stringstream::out | stringstream::binary);
13781 0 : string encoded;
13782 :
13783 0 : buf.append("<" + name + "> ");
13784 0 : int ndim = 3;
13785 0 : int dim1 = data.size();
13786 0 : int dim2 = data.at(0).size();
13787 0 : int dim3 = data.at(0).at(0).size();
13788 :
13789 0 : oss.write((char *)&ndim, sizeof(int));
13790 0 : oss.write((char *)&dim1, sizeof(dim1));
13791 0 : oss.write((char *)&dim2, sizeof(dim2));
13792 0 : oss.write((char *)&dim3, sizeof(dim3));
13793 0 : for (unsigned int i = 0; i < data.size(); i++)
13794 0 : for (unsigned int j = 0; j < data.at(0).size(); j++)
13795 0 : for (unsigned int k = 0; k < data.at(0).at(0).size(); k++){
13796 :
13797 0 : long v = data.at(i).at(j).at(k).get();
13798 :
13799 0 : oss.write((char *) &v, sizeof(v));
13800 : }
13801 :
13802 0 : Base64 b64;
13803 0 : b64.encode(oss.str(), encoded, false);
13804 0 : buf.append(encoded);
13805 0 : buf.append(" </" + name + "> ")
13806 : ;
13807 0 : }
13808 :
13809 :
13810 0 : void Parser::toXMLBase64(vector<vector< vector< vector<Interval> > > >data, const string &name, string &buf){
13811 0 : stringstream oss(stringstream::out | stringstream::binary);
13812 0 : string encoded;
13813 :
13814 0 : buf.append("<" + name + "> ");
13815 0 : int ndim = 3;
13816 0 : int dim1 = data.size();
13817 0 : int dim2 = data.at(0).size();
13818 0 : int dim3 = data.at(0).at(0).size();
13819 0 : int dim4 = data.at(0).at(0).at(0).size();
13820 :
13821 0 : oss.write((char *)&ndim, sizeof(int));
13822 0 : oss.write((char *)&dim1, sizeof(dim1));
13823 0 : oss.write((char *)&dim2, sizeof(dim2));
13824 0 : oss.write((char *)&dim3, sizeof(dim3));
13825 0 : oss.write((char *)&dim4, sizeof(dim4));
13826 0 : for (unsigned int i = 0; i < data.size(); i++)
13827 0 : for (unsigned int j = 0; j < data.at(0).size(); j++)
13828 0 : for (unsigned int k = 0; k < data.at(0).at(0).size(); k++)
13829 0 : for (unsigned int l = 0; l < data.at(0).at(0).at(0).size(); l++){
13830 :
13831 0 : long v = data.at(i).at(j).at(k).at(l).get();
13832 :
13833 0 : oss.write((char *) &v, sizeof(v));
13834 : }
13835 :
13836 0 : Base64 b64;
13837 0 : b64.encode(oss.str(), encoded, false);
13838 0 : buf.append(encoded);
13839 0 : buf.append(" </" + name + "> ")
13840 : ;
13841 0 : }
13842 :
13843 :
13844 : #ifndef Long_CPP
13845 :
13846 : #define Long_CPP int64_t
13847 :
13848 : #endif
13849 :
13850 :
13851 : #define TRYREAD(_stream_, _value_) _stream_.read((char*) &(_value_), sizeof(_value_)); \
13852 : if (_stream_.bad()) throw ConversionException("I/O error during read of " + name, tableName);
13853 :
13854 :
13855 0 : vector<Interval>& Parser::get1DIntervalFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector<Interval>& attribute)
13856 : {
13857 0 : string xmlField = Parser::getField(xmlDoc,name);
13858 0 : if (xmlField.length() == 0) {
13859 0 : throw ConversionException("Error: Field \"" +
13860 0 : name + "\": Invalid XML syntax", tableName);
13861 : }
13862 :
13863 0 : string decodedString;
13864 0 : Base64 b64;
13865 0 : b64.decode(xmlField, decodedString);
13866 :
13867 0 : stringstream iss(stringstream::in | stringstream::binary);
13868 0 : iss.str(decodedString);
13869 :
13870 0 : attribute.clear();
13871 :
13872 0 : unsigned int ndim = 0;
13873 : //iss.read((char *)&ndim, sizeof(ndim));
13874 0 : TRYREAD(iss,ndim);
13875 :
13876 0 : unsigned int dim1 = 0;
13877 : //iss.read((char *)&dim1, sizeof(dim1));
13878 0 : TRYREAD(iss,dim1);
13879 0 : if (ndim != 1) {
13880 0 : throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 1.", tableName);
13881 : }
13882 :
13883 0 : attribute.reserve(dim1);
13884 :
13885 : Long_CPP v;
13886 0 : for (unsigned int i = 0; i < dim1; i++) {
13887 : //iss.read((char*) &v, sizeof(v));
13888 0 : TRYREAD(iss,v);
13889 :
13890 0 : attribute.push_back(Interval(v));
13891 :
13892 : }
13893 0 : return attribute;
13894 0 : }
13895 :
13896 :
13897 0 : vector <vector<Interval> >& Parser::get2DIntervalFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector <vector<Interval> >& attribute)
13898 : {
13899 0 : string xmlField = Parser::getField(xmlDoc,name);
13900 0 : if (xmlField.length() == 0) {
13901 0 : throw ConversionException("Error: Field \"" +
13902 0 : name + "\": Invalid XML syntax", tableName);
13903 : }
13904 :
13905 0 : string decodedString;
13906 0 : Base64 b64;
13907 0 : b64.decode(xmlField, decodedString);
13908 :
13909 0 : stringstream iss(stringstream::in | stringstream::binary);
13910 0 : iss.str(decodedString);
13911 :
13912 0 : attribute.clear();
13913 :
13914 0 : unsigned int ndim = 0;
13915 : //iss.read((char *)&ndim, sizeof(ndim));
13916 0 : TRYREAD(iss,ndim);
13917 :
13918 0 : if (ndim != 2) {
13919 0 : throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 2.", tableName);
13920 : }
13921 :
13922 0 : unsigned int dim1 = 0;
13923 : //iss.read((char *)&dim1, sizeof(dim1));
13924 0 : TRYREAD(iss,dim1);
13925 :
13926 0 : unsigned int dim2 = 0;
13927 : //iss.read((char *)&dim2, sizeof(dim2));
13928 0 : TRYREAD(iss,dim2);
13929 :
13930 0 : attribute.reserve(dim1);
13931 :
13932 : Long_CPP v;
13933 0 : vector<Interval> aux2;
13934 0 : aux2.reserve(dim2);
13935 0 : for (unsigned int i = 0; i < dim1; i++) {
13936 0 : aux2.clear();
13937 0 : for (unsigned int j = 0; j < dim2; j++) {
13938 : //iss.read((char*) &v, sizeof(v));
13939 0 : TRYREAD(iss,v);
13940 :
13941 0 : aux2.push_back(Interval(v));
13942 :
13943 : }
13944 0 : attribute.push_back(aux2);
13945 : }
13946 0 : return attribute;
13947 0 : }
13948 :
13949 :
13950 0 : vector <vector <vector<Interval> > >& Parser::get3DIntervalFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector <vector <vector<Interval> > >& attribute)
13951 : {
13952 0 : string xmlField = Parser::getField(xmlDoc,name);
13953 0 : if (xmlField.length() == 0) {
13954 0 : throw ConversionException("Error: Field \"" +
13955 0 : name + "\": Invalid XML syntax", tableName);
13956 : }
13957 :
13958 0 : string decodedString;
13959 0 : Base64 b64;
13960 0 : b64.decode(xmlField, decodedString);
13961 :
13962 0 : stringstream iss(stringstream::in | stringstream::binary);
13963 0 : iss.str(decodedString);
13964 :
13965 0 : attribute.clear();
13966 :
13967 0 : unsigned int ndim = 0;
13968 : //iss.read((char *)&ndim, sizeof(ndim));
13969 0 : TRYREAD(iss, ndim);
13970 0 : if (ndim != 3) {
13971 0 : throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 3.", tableName);
13972 : }
13973 :
13974 0 : unsigned int dim1 = 0;
13975 : //iss.read((char *)&dim1, sizeof(dim1));
13976 0 : TRYREAD(iss,dim1);
13977 :
13978 0 : unsigned int dim2 = 0;
13979 : //iss.read((char *)&dim2, sizeof(dim2));
13980 0 : TRYREAD(iss,dim2);
13981 :
13982 0 : unsigned int dim3 = 0;
13983 : //iss.read((char *)&dim2, sizeof(dim3));
13984 0 : TRYREAD(iss,dim3);
13985 :
13986 0 : attribute.reserve(dim1);
13987 :
13988 : Long_CPP v;
13989 0 : vector <vector<Interval> > aux2;
13990 0 : vector<Interval> aux3;
13991 0 : aux2.reserve(dim2);
13992 0 : aux3.reserve(dim3);
13993 :
13994 0 : for (unsigned int i = 0; i < dim1; i++) {
13995 0 : aux2.clear();
13996 0 : for (unsigned int j = 0; j < dim2; j++) {
13997 0 : aux3.clear();
13998 0 : for (unsigned int k = 0; k < dim3; k++) {
13999 : //iss.read((char*) &v, sizeof(v));
14000 0 : TRYREAD(iss,v);
14001 :
14002 0 : aux3.push_back(Interval(v));
14003 :
14004 : }
14005 0 : aux2.push_back(aux3);
14006 : }
14007 0 : attribute.push_back(aux2);
14008 : }
14009 0 : return attribute;
14010 : ;
14011 0 : }
14012 :
14013 :
14014 0 : vector <vector <vector <vector<Interval> > > >& Parser::get4DIntervalFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector< vector <vector <vector<Interval> > > >& attribute)
14015 : {
14016 0 : string xmlField = Parser::getField(xmlDoc,name);
14017 0 : if (xmlField.length() == 0) {
14018 0 : throw ConversionException("Error: Field \"" +
14019 0 : name + "\": Invalid XML syntax", tableName);
14020 : }
14021 :
14022 0 : string decodedString;
14023 0 : Base64 b64;
14024 0 : b64.decode(xmlField, decodedString);
14025 :
14026 0 : stringstream iss(stringstream::in | stringstream::binary);
14027 0 : iss.str(decodedString);
14028 :
14029 0 : attribute.clear();
14030 :
14031 0 : unsigned int ndim = 0;
14032 : //iss.read((char *)&ndim, sizeof(ndim));
14033 0 : TRYREAD(iss, ndim);
14034 0 : if (ndim != 4) {
14035 0 : throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 4.", tableName);
14036 : }
14037 :
14038 0 : unsigned int dim1 = 0;
14039 : //iss.read((char *)&dim1, sizeof(dim1));
14040 0 : TRYREAD(iss,dim1);
14041 :
14042 0 : unsigned int dim2 = 0;
14043 : //iss.read((char *)&dim2, sizeof(dim2));
14044 0 : TRYREAD(iss,dim2);
14045 :
14046 0 : unsigned int dim3 = 0;
14047 : //iss.read((char *)&dim2, sizeof(dim3));
14048 0 : TRYREAD(iss,dim3);
14049 :
14050 0 : unsigned int dim4 = 0;
14051 : //iss.read((char *)&dim2, sizeof(dim3));
14052 0 : TRYREAD(iss,dim3);
14053 :
14054 0 : attribute.reserve(dim1);
14055 :
14056 : Long_CPP v;
14057 0 : vector <vector <vector<Interval> > > aux2;
14058 0 : vector <vector<Interval> > aux3;
14059 0 : vector<Interval> aux4;
14060 0 : aux2.reserve(dim2);
14061 0 : aux3.reserve(dim3);
14062 0 : aux4.reserve(dim4);
14063 :
14064 0 : for (unsigned int i = 0; i < dim1; i++) {
14065 0 : aux2.clear();
14066 0 : for (unsigned int j = 0; j < dim2; j++) {
14067 0 : aux3.clear();
14068 0 : for (unsigned int k = 0; k < dim3; k++) {
14069 0 : aux4.clear();
14070 0 : for (unsigned int l = 0; l < dim4; l++) {
14071 : //iss.read((char*) &v, sizeof(v));
14072 0 : TRYREAD(iss,v);
14073 :
14074 0 : aux4.push_back(Interval(v));
14075 :
14076 : }
14077 0 : aux3.push_back(aux4);
14078 : }
14079 0 : aux2.push_back(aux3);
14080 : }
14081 0 : attribute.push_back(aux2);
14082 : }
14083 0 : return attribute;
14084 : ;
14085 0 : }
14086 :
14087 :
14088 :
14089 :
14090 :
14091 :
14092 :
14093 0 : void Parser::toXMLBase64(vector<Length> data, const string &name, string &buf){
14094 0 : stringstream oss(stringstream::out | stringstream::binary);
14095 0 : string encoded;
14096 :
14097 0 : buf.append("<" + name + "> ");
14098 0 : int ndim = 1;
14099 0 : int dim1 = data.size();
14100 :
14101 0 : oss.write((char *)&ndim, sizeof(int));
14102 0 : oss.write((char *)&dim1, sizeof(dim1));
14103 :
14104 0 : for (unsigned int i = 0; i < data.size(); i++) {
14105 :
14106 0 : double v = data.at(i).get();
14107 :
14108 0 : oss.write((char *) &v, sizeof(v));
14109 : }
14110 :
14111 0 : Base64 b64;
14112 0 : b64.encode(oss.str(), encoded, false);
14113 0 : buf.append(encoded);
14114 0 : buf.append(" </" + name + "> ");
14115 0 : }
14116 :
14117 :
14118 0 : void Parser::toXMLBase64(vector< vector<Length> > data, const string &name, string &buf){
14119 0 : stringstream oss(stringstream::out | stringstream::binary);
14120 0 : string encoded;
14121 :
14122 0 : buf.append("<" + name + "> ");
14123 0 : int ndim = 2;
14124 0 : int dim1 = data.size();
14125 0 : int dim2 = data.at(0).size();
14126 :
14127 0 : oss.write((char *)&ndim, sizeof(int));
14128 0 : oss.write((char *)&dim1, sizeof(dim1));
14129 0 : oss.write((char *)&dim2, sizeof(dim2));
14130 0 : for (unsigned int i = 0; i < data.size(); i++)
14131 0 : for (unsigned int j = 0; j < data.at(0).size(); j++) {
14132 :
14133 0 : double v = data.at(i).at(j).get();
14134 :
14135 0 : oss.write((char *) &v, sizeof(v));
14136 : }
14137 :
14138 0 : Base64 b64;
14139 0 : b64.encode(oss.str(), encoded, false);
14140 0 : buf.append(encoded);
14141 0 : buf.append(" </" + name + "> ")
14142 : ;
14143 0 : }
14144 :
14145 :
14146 0 : void Parser::toXMLBase64(vector< vector< vector<Length> > > data, const string &name, string &buf){
14147 0 : stringstream oss(stringstream::out | stringstream::binary);
14148 0 : string encoded;
14149 :
14150 0 : buf.append("<" + name + "> ");
14151 0 : int ndim = 3;
14152 0 : int dim1 = data.size();
14153 0 : int dim2 = data.at(0).size();
14154 0 : int dim3 = data.at(0).at(0).size();
14155 :
14156 0 : oss.write((char *)&ndim, sizeof(int));
14157 0 : oss.write((char *)&dim1, sizeof(dim1));
14158 0 : oss.write((char *)&dim2, sizeof(dim2));
14159 0 : oss.write((char *)&dim3, sizeof(dim3));
14160 0 : for (unsigned int i = 0; i < data.size(); i++)
14161 0 : for (unsigned int j = 0; j < data.at(0).size(); j++)
14162 0 : for (unsigned int k = 0; k < data.at(0).at(0).size(); k++){
14163 :
14164 0 : double v = data.at(i).at(j).at(k).get();
14165 :
14166 0 : oss.write((char *) &v, sizeof(v));
14167 : }
14168 :
14169 0 : Base64 b64;
14170 0 : b64.encode(oss.str(), encoded, false);
14171 0 : buf.append(encoded);
14172 0 : buf.append(" </" + name + "> ")
14173 : ;
14174 0 : }
14175 :
14176 :
14177 0 : void Parser::toXMLBase64(vector<vector< vector< vector<Length> > > >data, const string &name, string &buf){
14178 0 : stringstream oss(stringstream::out | stringstream::binary);
14179 0 : string encoded;
14180 :
14181 0 : buf.append("<" + name + "> ");
14182 0 : int ndim = 3;
14183 0 : int dim1 = data.size();
14184 0 : int dim2 = data.at(0).size();
14185 0 : int dim3 = data.at(0).at(0).size();
14186 0 : int dim4 = data.at(0).at(0).at(0).size();
14187 :
14188 0 : oss.write((char *)&ndim, sizeof(int));
14189 0 : oss.write((char *)&dim1, sizeof(dim1));
14190 0 : oss.write((char *)&dim2, sizeof(dim2));
14191 0 : oss.write((char *)&dim3, sizeof(dim3));
14192 0 : oss.write((char *)&dim4, sizeof(dim4));
14193 0 : for (unsigned int i = 0; i < data.size(); i++)
14194 0 : for (unsigned int j = 0; j < data.at(0).size(); j++)
14195 0 : for (unsigned int k = 0; k < data.at(0).at(0).size(); k++)
14196 0 : for (unsigned int l = 0; l < data.at(0).at(0).at(0).size(); l++){
14197 :
14198 0 : double v = data.at(i).at(j).at(k).at(l).get();
14199 :
14200 0 : oss.write((char *) &v, sizeof(v));
14201 : }
14202 :
14203 0 : Base64 b64;
14204 0 : b64.encode(oss.str(), encoded, false);
14205 0 : buf.append(encoded);
14206 0 : buf.append(" </" + name + "> ")
14207 : ;
14208 0 : }
14209 :
14210 :
14211 : #ifndef Double_CPP
14212 :
14213 : #define Double_CPP double
14214 :
14215 : #endif
14216 :
14217 :
14218 : #define TRYREAD(_stream_, _value_) _stream_.read((char*) &(_value_), sizeof(_value_)); \
14219 : if (_stream_.bad()) throw ConversionException("I/O error during read of " + name, tableName);
14220 :
14221 :
14222 0 : vector<Length>& Parser::get1DLengthFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector<Length>& attribute)
14223 : {
14224 0 : string xmlField = Parser::getField(xmlDoc,name);
14225 0 : if (xmlField.length() == 0) {
14226 0 : throw ConversionException("Error: Field \"" +
14227 0 : name + "\": Invalid XML syntax", tableName);
14228 : }
14229 :
14230 0 : string decodedString;
14231 0 : Base64 b64;
14232 0 : b64.decode(xmlField, decodedString);
14233 :
14234 0 : stringstream iss(stringstream::in | stringstream::binary);
14235 0 : iss.str(decodedString);
14236 :
14237 0 : attribute.clear();
14238 :
14239 0 : unsigned int ndim = 0;
14240 : //iss.read((char *)&ndim, sizeof(ndim));
14241 0 : TRYREAD(iss,ndim);
14242 :
14243 0 : unsigned int dim1 = 0;
14244 : //iss.read((char *)&dim1, sizeof(dim1));
14245 0 : TRYREAD(iss,dim1);
14246 0 : if (ndim != 1) {
14247 0 : throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 1.", tableName);
14248 : }
14249 :
14250 0 : attribute.reserve(dim1);
14251 :
14252 : Double_CPP v;
14253 0 : for (unsigned int i = 0; i < dim1; i++) {
14254 : //iss.read((char*) &v, sizeof(v));
14255 0 : TRYREAD(iss,v);
14256 :
14257 0 : attribute.push_back(Length(v));
14258 :
14259 : }
14260 0 : return attribute;
14261 0 : }
14262 :
14263 :
14264 0 : vector <vector<Length> >& Parser::get2DLengthFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector <vector<Length> >& attribute)
14265 : {
14266 0 : string xmlField = Parser::getField(xmlDoc,name);
14267 0 : if (xmlField.length() == 0) {
14268 0 : throw ConversionException("Error: Field \"" +
14269 0 : name + "\": Invalid XML syntax", tableName);
14270 : }
14271 :
14272 0 : string decodedString;
14273 0 : Base64 b64;
14274 0 : b64.decode(xmlField, decodedString);
14275 :
14276 0 : stringstream iss(stringstream::in | stringstream::binary);
14277 0 : iss.str(decodedString);
14278 :
14279 0 : attribute.clear();
14280 :
14281 0 : unsigned int ndim = 0;
14282 : //iss.read((char *)&ndim, sizeof(ndim));
14283 0 : TRYREAD(iss,ndim);
14284 :
14285 0 : if (ndim != 2) {
14286 0 : throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 2.", tableName);
14287 : }
14288 :
14289 0 : unsigned int dim1 = 0;
14290 : //iss.read((char *)&dim1, sizeof(dim1));
14291 0 : TRYREAD(iss,dim1);
14292 :
14293 0 : unsigned int dim2 = 0;
14294 : //iss.read((char *)&dim2, sizeof(dim2));
14295 0 : TRYREAD(iss,dim2);
14296 :
14297 0 : attribute.reserve(dim1);
14298 :
14299 : Double_CPP v;
14300 0 : vector<Length> aux2;
14301 0 : aux2.reserve(dim2);
14302 0 : for (unsigned int i = 0; i < dim1; i++) {
14303 0 : aux2.clear();
14304 0 : for (unsigned int j = 0; j < dim2; j++) {
14305 : //iss.read((char*) &v, sizeof(v));
14306 0 : TRYREAD(iss,v);
14307 :
14308 0 : aux2.push_back(Length(v));
14309 :
14310 : }
14311 0 : attribute.push_back(aux2);
14312 : }
14313 0 : return attribute;
14314 0 : }
14315 :
14316 :
14317 0 : vector <vector <vector<Length> > >& Parser::get3DLengthFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector <vector <vector<Length> > >& attribute)
14318 : {
14319 0 : string xmlField = Parser::getField(xmlDoc,name);
14320 0 : if (xmlField.length() == 0) {
14321 0 : throw ConversionException("Error: Field \"" +
14322 0 : name + "\": Invalid XML syntax", tableName);
14323 : }
14324 :
14325 0 : string decodedString;
14326 0 : Base64 b64;
14327 0 : b64.decode(xmlField, decodedString);
14328 :
14329 0 : stringstream iss(stringstream::in | stringstream::binary);
14330 0 : iss.str(decodedString);
14331 :
14332 0 : attribute.clear();
14333 :
14334 0 : unsigned int ndim = 0;
14335 : //iss.read((char *)&ndim, sizeof(ndim));
14336 0 : TRYREAD(iss, ndim);
14337 0 : if (ndim != 3) {
14338 0 : throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 3.", tableName);
14339 : }
14340 :
14341 0 : unsigned int dim1 = 0;
14342 : //iss.read((char *)&dim1, sizeof(dim1));
14343 0 : TRYREAD(iss,dim1);
14344 :
14345 0 : unsigned int dim2 = 0;
14346 : //iss.read((char *)&dim2, sizeof(dim2));
14347 0 : TRYREAD(iss,dim2);
14348 :
14349 0 : unsigned int dim3 = 0;
14350 : //iss.read((char *)&dim2, sizeof(dim3));
14351 0 : TRYREAD(iss,dim3);
14352 :
14353 0 : attribute.reserve(dim1);
14354 :
14355 : Double_CPP v;
14356 0 : vector <vector<Length> > aux2;
14357 0 : vector<Length> aux3;
14358 0 : aux2.reserve(dim2);
14359 0 : aux3.reserve(dim3);
14360 :
14361 0 : for (unsigned int i = 0; i < dim1; i++) {
14362 0 : aux2.clear();
14363 0 : for (unsigned int j = 0; j < dim2; j++) {
14364 0 : aux3.clear();
14365 0 : for (unsigned int k = 0; k < dim3; k++) {
14366 : //iss.read((char*) &v, sizeof(v));
14367 0 : TRYREAD(iss,v);
14368 :
14369 0 : aux3.push_back(Length(v));
14370 :
14371 : }
14372 0 : aux2.push_back(aux3);
14373 : }
14374 0 : attribute.push_back(aux2);
14375 : }
14376 0 : return attribute;
14377 : ;
14378 0 : }
14379 :
14380 :
14381 0 : vector <vector <vector <vector<Length> > > >& Parser::get4DLengthFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector< vector <vector <vector<Length> > > >& attribute)
14382 : {
14383 0 : string xmlField = Parser::getField(xmlDoc,name);
14384 0 : if (xmlField.length() == 0) {
14385 0 : throw ConversionException("Error: Field \"" +
14386 0 : name + "\": Invalid XML syntax", tableName);
14387 : }
14388 :
14389 0 : string decodedString;
14390 0 : Base64 b64;
14391 0 : b64.decode(xmlField, decodedString);
14392 :
14393 0 : stringstream iss(stringstream::in | stringstream::binary);
14394 0 : iss.str(decodedString);
14395 :
14396 0 : attribute.clear();
14397 :
14398 0 : unsigned int ndim = 0;
14399 : //iss.read((char *)&ndim, sizeof(ndim));
14400 0 : TRYREAD(iss, ndim);
14401 0 : if (ndim != 4) {
14402 0 : throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 4.", tableName);
14403 : }
14404 :
14405 0 : unsigned int dim1 = 0;
14406 : //iss.read((char *)&dim1, sizeof(dim1));
14407 0 : TRYREAD(iss,dim1);
14408 :
14409 0 : unsigned int dim2 = 0;
14410 : //iss.read((char *)&dim2, sizeof(dim2));
14411 0 : TRYREAD(iss,dim2);
14412 :
14413 0 : unsigned int dim3 = 0;
14414 : //iss.read((char *)&dim2, sizeof(dim3));
14415 0 : TRYREAD(iss,dim3);
14416 :
14417 0 : unsigned int dim4 = 0;
14418 : //iss.read((char *)&dim2, sizeof(dim3));
14419 0 : TRYREAD(iss,dim3);
14420 :
14421 0 : attribute.reserve(dim1);
14422 :
14423 : Double_CPP v;
14424 0 : vector <vector <vector<Length> > > aux2;
14425 0 : vector <vector<Length> > aux3;
14426 0 : vector<Length> aux4;
14427 0 : aux2.reserve(dim2);
14428 0 : aux3.reserve(dim3);
14429 0 : aux4.reserve(dim4);
14430 :
14431 0 : for (unsigned int i = 0; i < dim1; i++) {
14432 0 : aux2.clear();
14433 0 : for (unsigned int j = 0; j < dim2; j++) {
14434 0 : aux3.clear();
14435 0 : for (unsigned int k = 0; k < dim3; k++) {
14436 0 : aux4.clear();
14437 0 : for (unsigned int l = 0; l < dim4; l++) {
14438 : //iss.read((char*) &v, sizeof(v));
14439 0 : TRYREAD(iss,v);
14440 :
14441 0 : aux4.push_back(Length(v));
14442 :
14443 : }
14444 0 : aux3.push_back(aux4);
14445 : }
14446 0 : aux2.push_back(aux3);
14447 : }
14448 0 : attribute.push_back(aux2);
14449 : }
14450 0 : return attribute;
14451 : ;
14452 0 : }
14453 :
14454 :
14455 :
14456 :
14457 :
14458 :
14459 :
14460 0 : void Parser::toXMLBase64(vector<Pressure> data, const string &name, string &buf){
14461 0 : stringstream oss(stringstream::out | stringstream::binary);
14462 0 : string encoded;
14463 :
14464 0 : buf.append("<" + name + "> ");
14465 0 : int ndim = 1;
14466 0 : int dim1 = data.size();
14467 :
14468 0 : oss.write((char *)&ndim, sizeof(int));
14469 0 : oss.write((char *)&dim1, sizeof(dim1));
14470 :
14471 0 : for (unsigned int i = 0; i < data.size(); i++) {
14472 :
14473 0 : double v = data.at(i).get();
14474 :
14475 0 : oss.write((char *) &v, sizeof(v));
14476 : }
14477 :
14478 0 : Base64 b64;
14479 0 : b64.encode(oss.str(), encoded, false);
14480 0 : buf.append(encoded);
14481 0 : buf.append(" </" + name + "> ");
14482 0 : }
14483 :
14484 :
14485 0 : void Parser::toXMLBase64(vector< vector<Pressure> > data, const string &name, string &buf){
14486 0 : stringstream oss(stringstream::out | stringstream::binary);
14487 0 : string encoded;
14488 :
14489 0 : buf.append("<" + name + "> ");
14490 0 : int ndim = 2;
14491 0 : int dim1 = data.size();
14492 0 : int dim2 = data.at(0).size();
14493 :
14494 0 : oss.write((char *)&ndim, sizeof(int));
14495 0 : oss.write((char *)&dim1, sizeof(dim1));
14496 0 : oss.write((char *)&dim2, sizeof(dim2));
14497 0 : for (unsigned int i = 0; i < data.size(); i++)
14498 0 : for (unsigned int j = 0; j < data.at(0).size(); j++) {
14499 :
14500 0 : double v = data.at(i).at(j).get();
14501 :
14502 0 : oss.write((char *) &v, sizeof(v));
14503 : }
14504 :
14505 0 : Base64 b64;
14506 0 : b64.encode(oss.str(), encoded, false);
14507 0 : buf.append(encoded);
14508 0 : buf.append(" </" + name + "> ")
14509 : ;
14510 0 : }
14511 :
14512 :
14513 0 : void Parser::toXMLBase64(vector< vector< vector<Pressure> > > data, const string &name, string &buf){
14514 0 : stringstream oss(stringstream::out | stringstream::binary);
14515 0 : string encoded;
14516 :
14517 0 : buf.append("<" + name + "> ");
14518 0 : int ndim = 3;
14519 0 : int dim1 = data.size();
14520 0 : int dim2 = data.at(0).size();
14521 0 : int dim3 = data.at(0).at(0).size();
14522 :
14523 0 : oss.write((char *)&ndim, sizeof(int));
14524 0 : oss.write((char *)&dim1, sizeof(dim1));
14525 0 : oss.write((char *)&dim2, sizeof(dim2));
14526 0 : oss.write((char *)&dim3, sizeof(dim3));
14527 0 : for (unsigned int i = 0; i < data.size(); i++)
14528 0 : for (unsigned int j = 0; j < data.at(0).size(); j++)
14529 0 : for (unsigned int k = 0; k < data.at(0).at(0).size(); k++){
14530 :
14531 0 : double v = data.at(i).at(j).at(k).get();
14532 :
14533 0 : oss.write((char *) &v, sizeof(v));
14534 : }
14535 :
14536 0 : Base64 b64;
14537 0 : b64.encode(oss.str(), encoded, false);
14538 0 : buf.append(encoded);
14539 0 : buf.append(" </" + name + "> ")
14540 : ;
14541 0 : }
14542 :
14543 :
14544 0 : void Parser::toXMLBase64(vector<vector< vector< vector<Pressure> > > >data, const string &name, string &buf){
14545 0 : stringstream oss(stringstream::out | stringstream::binary);
14546 0 : string encoded;
14547 :
14548 0 : buf.append("<" + name + "> ");
14549 0 : int ndim = 3;
14550 0 : int dim1 = data.size();
14551 0 : int dim2 = data.at(0).size();
14552 0 : int dim3 = data.at(0).at(0).size();
14553 0 : int dim4 = data.at(0).at(0).at(0).size();
14554 :
14555 0 : oss.write((char *)&ndim, sizeof(int));
14556 0 : oss.write((char *)&dim1, sizeof(dim1));
14557 0 : oss.write((char *)&dim2, sizeof(dim2));
14558 0 : oss.write((char *)&dim3, sizeof(dim3));
14559 0 : oss.write((char *)&dim4, sizeof(dim4));
14560 0 : for (unsigned int i = 0; i < data.size(); i++)
14561 0 : for (unsigned int j = 0; j < data.at(0).size(); j++)
14562 0 : for (unsigned int k = 0; k < data.at(0).at(0).size(); k++)
14563 0 : for (unsigned int l = 0; l < data.at(0).at(0).at(0).size(); l++){
14564 :
14565 0 : double v = data.at(i).at(j).at(k).at(l).get();
14566 :
14567 0 : oss.write((char *) &v, sizeof(v));
14568 : }
14569 :
14570 0 : Base64 b64;
14571 0 : b64.encode(oss.str(), encoded, false);
14572 0 : buf.append(encoded);
14573 0 : buf.append(" </" + name + "> ")
14574 : ;
14575 0 : }
14576 :
14577 :
14578 : #ifndef Double_CPP
14579 :
14580 : #define Double_CPP double
14581 :
14582 : #endif
14583 :
14584 :
14585 : #define TRYREAD(_stream_, _value_) _stream_.read((char*) &(_value_), sizeof(_value_)); \
14586 : if (_stream_.bad()) throw ConversionException("I/O error during read of " + name, tableName);
14587 :
14588 :
14589 0 : vector<Pressure>& Parser::get1DPressureFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector<Pressure>& attribute)
14590 : {
14591 0 : string xmlField = Parser::getField(xmlDoc,name);
14592 0 : if (xmlField.length() == 0) {
14593 0 : throw ConversionException("Error: Field \"" +
14594 0 : name + "\": Invalid XML syntax", tableName);
14595 : }
14596 :
14597 0 : string decodedString;
14598 0 : Base64 b64;
14599 0 : b64.decode(xmlField, decodedString);
14600 :
14601 0 : stringstream iss(stringstream::in | stringstream::binary);
14602 0 : iss.str(decodedString);
14603 :
14604 0 : attribute.clear();
14605 :
14606 0 : unsigned int ndim = 0;
14607 : //iss.read((char *)&ndim, sizeof(ndim));
14608 0 : TRYREAD(iss,ndim);
14609 :
14610 0 : unsigned int dim1 = 0;
14611 : //iss.read((char *)&dim1, sizeof(dim1));
14612 0 : TRYREAD(iss,dim1);
14613 0 : if (ndim != 1) {
14614 0 : throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 1.", tableName);
14615 : }
14616 :
14617 0 : attribute.reserve(dim1);
14618 :
14619 : Double_CPP v;
14620 0 : for (unsigned int i = 0; i < dim1; i++) {
14621 : //iss.read((char*) &v, sizeof(v));
14622 0 : TRYREAD(iss,v);
14623 :
14624 0 : attribute.push_back(Pressure(v));
14625 :
14626 : }
14627 0 : return attribute;
14628 0 : }
14629 :
14630 :
14631 0 : vector <vector<Pressure> >& Parser::get2DPressureFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector <vector<Pressure> >& attribute)
14632 : {
14633 0 : string xmlField = Parser::getField(xmlDoc,name);
14634 0 : if (xmlField.length() == 0) {
14635 0 : throw ConversionException("Error: Field \"" +
14636 0 : name + "\": Invalid XML syntax", tableName);
14637 : }
14638 :
14639 0 : string decodedString;
14640 0 : Base64 b64;
14641 0 : b64.decode(xmlField, decodedString);
14642 :
14643 0 : stringstream iss(stringstream::in | stringstream::binary);
14644 0 : iss.str(decodedString);
14645 :
14646 0 : attribute.clear();
14647 :
14648 0 : unsigned int ndim = 0;
14649 : //iss.read((char *)&ndim, sizeof(ndim));
14650 0 : TRYREAD(iss,ndim);
14651 :
14652 0 : if (ndim != 2) {
14653 0 : throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 2.", tableName);
14654 : }
14655 :
14656 0 : unsigned int dim1 = 0;
14657 : //iss.read((char *)&dim1, sizeof(dim1));
14658 0 : TRYREAD(iss,dim1);
14659 :
14660 0 : unsigned int dim2 = 0;
14661 : //iss.read((char *)&dim2, sizeof(dim2));
14662 0 : TRYREAD(iss,dim2);
14663 :
14664 0 : attribute.reserve(dim1);
14665 :
14666 : Double_CPP v;
14667 0 : vector<Pressure> aux2;
14668 0 : aux2.reserve(dim2);
14669 0 : for (unsigned int i = 0; i < dim1; i++) {
14670 0 : aux2.clear();
14671 0 : for (unsigned int j = 0; j < dim2; j++) {
14672 : //iss.read((char*) &v, sizeof(v));
14673 0 : TRYREAD(iss,v);
14674 :
14675 0 : aux2.push_back(Pressure(v));
14676 :
14677 : }
14678 0 : attribute.push_back(aux2);
14679 : }
14680 0 : return attribute;
14681 0 : }
14682 :
14683 :
14684 0 : vector <vector <vector<Pressure> > >& Parser::get3DPressureFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector <vector <vector<Pressure> > >& attribute)
14685 : {
14686 0 : string xmlField = Parser::getField(xmlDoc,name);
14687 0 : if (xmlField.length() == 0) {
14688 0 : throw ConversionException("Error: Field \"" +
14689 0 : name + "\": Invalid XML syntax", tableName);
14690 : }
14691 :
14692 0 : string decodedString;
14693 0 : Base64 b64;
14694 0 : b64.decode(xmlField, decodedString);
14695 :
14696 0 : stringstream iss(stringstream::in | stringstream::binary);
14697 0 : iss.str(decodedString);
14698 :
14699 0 : attribute.clear();
14700 :
14701 0 : unsigned int ndim = 0;
14702 : //iss.read((char *)&ndim, sizeof(ndim));
14703 0 : TRYREAD(iss, ndim);
14704 0 : if (ndim != 3) {
14705 0 : throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 3.", tableName);
14706 : }
14707 :
14708 0 : unsigned int dim1 = 0;
14709 : //iss.read((char *)&dim1, sizeof(dim1));
14710 0 : TRYREAD(iss,dim1);
14711 :
14712 0 : unsigned int dim2 = 0;
14713 : //iss.read((char *)&dim2, sizeof(dim2));
14714 0 : TRYREAD(iss,dim2);
14715 :
14716 0 : unsigned int dim3 = 0;
14717 : //iss.read((char *)&dim2, sizeof(dim3));
14718 0 : TRYREAD(iss,dim3);
14719 :
14720 0 : attribute.reserve(dim1);
14721 :
14722 : Double_CPP v;
14723 0 : vector <vector<Pressure> > aux2;
14724 0 : vector<Pressure> aux3;
14725 0 : aux2.reserve(dim2);
14726 0 : aux3.reserve(dim3);
14727 :
14728 0 : for (unsigned int i = 0; i < dim1; i++) {
14729 0 : aux2.clear();
14730 0 : for (unsigned int j = 0; j < dim2; j++) {
14731 0 : aux3.clear();
14732 0 : for (unsigned int k = 0; k < dim3; k++) {
14733 : //iss.read((char*) &v, sizeof(v));
14734 0 : TRYREAD(iss,v);
14735 :
14736 0 : aux3.push_back(Pressure(v));
14737 :
14738 : }
14739 0 : aux2.push_back(aux3);
14740 : }
14741 0 : attribute.push_back(aux2);
14742 : }
14743 0 : return attribute;
14744 : ;
14745 0 : }
14746 :
14747 :
14748 0 : vector <vector <vector <vector<Pressure> > > >& Parser::get4DPressureFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector< vector <vector <vector<Pressure> > > >& attribute)
14749 : {
14750 0 : string xmlField = Parser::getField(xmlDoc,name);
14751 0 : if (xmlField.length() == 0) {
14752 0 : throw ConversionException("Error: Field \"" +
14753 0 : name + "\": Invalid XML syntax", tableName);
14754 : }
14755 :
14756 0 : string decodedString;
14757 0 : Base64 b64;
14758 0 : b64.decode(xmlField, decodedString);
14759 :
14760 0 : stringstream iss(stringstream::in | stringstream::binary);
14761 0 : iss.str(decodedString);
14762 :
14763 0 : attribute.clear();
14764 :
14765 0 : unsigned int ndim = 0;
14766 : //iss.read((char *)&ndim, sizeof(ndim));
14767 0 : TRYREAD(iss, ndim);
14768 0 : if (ndim != 4) {
14769 0 : throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 4.", tableName);
14770 : }
14771 :
14772 0 : unsigned int dim1 = 0;
14773 : //iss.read((char *)&dim1, sizeof(dim1));
14774 0 : TRYREAD(iss,dim1);
14775 :
14776 0 : unsigned int dim2 = 0;
14777 : //iss.read((char *)&dim2, sizeof(dim2));
14778 0 : TRYREAD(iss,dim2);
14779 :
14780 0 : unsigned int dim3 = 0;
14781 : //iss.read((char *)&dim2, sizeof(dim3));
14782 0 : TRYREAD(iss,dim3);
14783 :
14784 0 : unsigned int dim4 = 0;
14785 : //iss.read((char *)&dim2, sizeof(dim3));
14786 0 : TRYREAD(iss,dim3);
14787 :
14788 0 : attribute.reserve(dim1);
14789 :
14790 : Double_CPP v;
14791 0 : vector <vector <vector<Pressure> > > aux2;
14792 0 : vector <vector<Pressure> > aux3;
14793 0 : vector<Pressure> aux4;
14794 0 : aux2.reserve(dim2);
14795 0 : aux3.reserve(dim3);
14796 0 : aux4.reserve(dim4);
14797 :
14798 0 : for (unsigned int i = 0; i < dim1; i++) {
14799 0 : aux2.clear();
14800 0 : for (unsigned int j = 0; j < dim2; j++) {
14801 0 : aux3.clear();
14802 0 : for (unsigned int k = 0; k < dim3; k++) {
14803 0 : aux4.clear();
14804 0 : for (unsigned int l = 0; l < dim4; l++) {
14805 : //iss.read((char*) &v, sizeof(v));
14806 0 : TRYREAD(iss,v);
14807 :
14808 0 : aux4.push_back(Pressure(v));
14809 :
14810 : }
14811 0 : aux3.push_back(aux4);
14812 : }
14813 0 : aux2.push_back(aux3);
14814 : }
14815 0 : attribute.push_back(aux2);
14816 : }
14817 0 : return attribute;
14818 : ;
14819 0 : }
14820 :
14821 :
14822 :
14823 :
14824 :
14825 :
14826 :
14827 0 : void Parser::toXMLBase64(vector<Speed> data, const string &name, string &buf){
14828 0 : stringstream oss(stringstream::out | stringstream::binary);
14829 0 : string encoded;
14830 :
14831 0 : buf.append("<" + name + "> ");
14832 0 : int ndim = 1;
14833 0 : int dim1 = data.size();
14834 :
14835 0 : oss.write((char *)&ndim, sizeof(int));
14836 0 : oss.write((char *)&dim1, sizeof(dim1));
14837 :
14838 0 : for (unsigned int i = 0; i < data.size(); i++) {
14839 :
14840 0 : double v = data.at(i).get();
14841 :
14842 0 : oss.write((char *) &v, sizeof(v));
14843 : }
14844 :
14845 0 : Base64 b64;
14846 0 : b64.encode(oss.str(), encoded, false);
14847 0 : buf.append(encoded);
14848 0 : buf.append(" </" + name + "> ");
14849 0 : }
14850 :
14851 :
14852 0 : void Parser::toXMLBase64(vector< vector<Speed> > data, const string &name, string &buf){
14853 0 : stringstream oss(stringstream::out | stringstream::binary);
14854 0 : string encoded;
14855 :
14856 0 : buf.append("<" + name + "> ");
14857 0 : int ndim = 2;
14858 0 : int dim1 = data.size();
14859 0 : int dim2 = data.at(0).size();
14860 :
14861 0 : oss.write((char *)&ndim, sizeof(int));
14862 0 : oss.write((char *)&dim1, sizeof(dim1));
14863 0 : oss.write((char *)&dim2, sizeof(dim2));
14864 0 : for (unsigned int i = 0; i < data.size(); i++)
14865 0 : for (unsigned int j = 0; j < data.at(0).size(); j++) {
14866 :
14867 0 : double v = data.at(i).at(j).get();
14868 :
14869 0 : oss.write((char *) &v, sizeof(v));
14870 : }
14871 :
14872 0 : Base64 b64;
14873 0 : b64.encode(oss.str(), encoded, false);
14874 0 : buf.append(encoded);
14875 0 : buf.append(" </" + name + "> ")
14876 : ;
14877 0 : }
14878 :
14879 :
14880 0 : void Parser::toXMLBase64(vector< vector< vector<Speed> > > data, const string &name, string &buf){
14881 0 : stringstream oss(stringstream::out | stringstream::binary);
14882 0 : string encoded;
14883 :
14884 0 : buf.append("<" + name + "> ");
14885 0 : int ndim = 3;
14886 0 : int dim1 = data.size();
14887 0 : int dim2 = data.at(0).size();
14888 0 : int dim3 = data.at(0).at(0).size();
14889 :
14890 0 : oss.write((char *)&ndim, sizeof(int));
14891 0 : oss.write((char *)&dim1, sizeof(dim1));
14892 0 : oss.write((char *)&dim2, sizeof(dim2));
14893 0 : oss.write((char *)&dim3, sizeof(dim3));
14894 0 : for (unsigned int i = 0; i < data.size(); i++)
14895 0 : for (unsigned int j = 0; j < data.at(0).size(); j++)
14896 0 : for (unsigned int k = 0; k < data.at(0).at(0).size(); k++){
14897 :
14898 0 : double v = data.at(i).at(j).at(k).get();
14899 :
14900 0 : oss.write((char *) &v, sizeof(v));
14901 : }
14902 :
14903 0 : Base64 b64;
14904 0 : b64.encode(oss.str(), encoded, false);
14905 0 : buf.append(encoded);
14906 0 : buf.append(" </" + name + "> ")
14907 : ;
14908 0 : }
14909 :
14910 :
14911 0 : void Parser::toXMLBase64(vector<vector< vector< vector<Speed> > > >data, const string &name, string &buf){
14912 0 : stringstream oss(stringstream::out | stringstream::binary);
14913 0 : string encoded;
14914 :
14915 0 : buf.append("<" + name + "> ");
14916 0 : int ndim = 3;
14917 0 : int dim1 = data.size();
14918 0 : int dim2 = data.at(0).size();
14919 0 : int dim3 = data.at(0).at(0).size();
14920 0 : int dim4 = data.at(0).at(0).at(0).size();
14921 :
14922 0 : oss.write((char *)&ndim, sizeof(int));
14923 0 : oss.write((char *)&dim1, sizeof(dim1));
14924 0 : oss.write((char *)&dim2, sizeof(dim2));
14925 0 : oss.write((char *)&dim3, sizeof(dim3));
14926 0 : oss.write((char *)&dim4, sizeof(dim4));
14927 0 : for (unsigned int i = 0; i < data.size(); i++)
14928 0 : for (unsigned int j = 0; j < data.at(0).size(); j++)
14929 0 : for (unsigned int k = 0; k < data.at(0).at(0).size(); k++)
14930 0 : for (unsigned int l = 0; l < data.at(0).at(0).at(0).size(); l++){
14931 :
14932 0 : double v = data.at(i).at(j).at(k).at(l).get();
14933 :
14934 0 : oss.write((char *) &v, sizeof(v));
14935 : }
14936 :
14937 0 : Base64 b64;
14938 0 : b64.encode(oss.str(), encoded, false);
14939 0 : buf.append(encoded);
14940 0 : buf.append(" </" + name + "> ")
14941 : ;
14942 0 : }
14943 :
14944 :
14945 : #ifndef Double_CPP
14946 :
14947 : #define Double_CPP double
14948 :
14949 : #endif
14950 :
14951 :
14952 : #define TRYREAD(_stream_, _value_) _stream_.read((char*) &(_value_), sizeof(_value_)); \
14953 : if (_stream_.bad()) throw ConversionException("I/O error during read of " + name, tableName);
14954 :
14955 :
14956 0 : vector<Speed>& Parser::get1DSpeedFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector<Speed>& attribute)
14957 : {
14958 0 : string xmlField = Parser::getField(xmlDoc,name);
14959 0 : if (xmlField.length() == 0) {
14960 0 : throw ConversionException("Error: Field \"" +
14961 0 : name + "\": Invalid XML syntax", tableName);
14962 : }
14963 :
14964 0 : string decodedString;
14965 0 : Base64 b64;
14966 0 : b64.decode(xmlField, decodedString);
14967 :
14968 0 : stringstream iss(stringstream::in | stringstream::binary);
14969 0 : iss.str(decodedString);
14970 :
14971 0 : attribute.clear();
14972 :
14973 0 : unsigned int ndim = 0;
14974 : //iss.read((char *)&ndim, sizeof(ndim));
14975 0 : TRYREAD(iss,ndim);
14976 :
14977 0 : unsigned int dim1 = 0;
14978 : //iss.read((char *)&dim1, sizeof(dim1));
14979 0 : TRYREAD(iss,dim1);
14980 0 : if (ndim != 1) {
14981 0 : throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 1.", tableName);
14982 : }
14983 :
14984 0 : attribute.reserve(dim1);
14985 :
14986 : Double_CPP v;
14987 0 : for (unsigned int i = 0; i < dim1; i++) {
14988 : //iss.read((char*) &v, sizeof(v));
14989 0 : TRYREAD(iss,v);
14990 :
14991 0 : attribute.push_back(Speed(v));
14992 :
14993 : }
14994 0 : return attribute;
14995 0 : }
14996 :
14997 :
14998 0 : vector <vector<Speed> >& Parser::get2DSpeedFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector <vector<Speed> >& attribute)
14999 : {
15000 0 : string xmlField = Parser::getField(xmlDoc,name);
15001 0 : if (xmlField.length() == 0) {
15002 0 : throw ConversionException("Error: Field \"" +
15003 0 : name + "\": Invalid XML syntax", tableName);
15004 : }
15005 :
15006 0 : string decodedString;
15007 0 : Base64 b64;
15008 0 : b64.decode(xmlField, decodedString);
15009 :
15010 0 : stringstream iss(stringstream::in | stringstream::binary);
15011 0 : iss.str(decodedString);
15012 :
15013 0 : attribute.clear();
15014 :
15015 0 : unsigned int ndim = 0;
15016 : //iss.read((char *)&ndim, sizeof(ndim));
15017 0 : TRYREAD(iss,ndim);
15018 :
15019 0 : if (ndim != 2) {
15020 0 : throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 2.", tableName);
15021 : }
15022 :
15023 0 : unsigned int dim1 = 0;
15024 : //iss.read((char *)&dim1, sizeof(dim1));
15025 0 : TRYREAD(iss,dim1);
15026 :
15027 0 : unsigned int dim2 = 0;
15028 : //iss.read((char *)&dim2, sizeof(dim2));
15029 0 : TRYREAD(iss,dim2);
15030 :
15031 0 : attribute.reserve(dim1);
15032 :
15033 : Double_CPP v;
15034 0 : vector<Speed> aux2;
15035 0 : aux2.reserve(dim2);
15036 0 : for (unsigned int i = 0; i < dim1; i++) {
15037 0 : aux2.clear();
15038 0 : for (unsigned int j = 0; j < dim2; j++) {
15039 : //iss.read((char*) &v, sizeof(v));
15040 0 : TRYREAD(iss,v);
15041 :
15042 0 : aux2.push_back(Speed(v));
15043 :
15044 : }
15045 0 : attribute.push_back(aux2);
15046 : }
15047 0 : return attribute;
15048 0 : }
15049 :
15050 :
15051 0 : vector <vector <vector<Speed> > >& Parser::get3DSpeedFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector <vector <vector<Speed> > >& attribute)
15052 : {
15053 0 : string xmlField = Parser::getField(xmlDoc,name);
15054 0 : if (xmlField.length() == 0) {
15055 0 : throw ConversionException("Error: Field \"" +
15056 0 : name + "\": Invalid XML syntax", tableName);
15057 : }
15058 :
15059 0 : string decodedString;
15060 0 : Base64 b64;
15061 0 : b64.decode(xmlField, decodedString);
15062 :
15063 0 : stringstream iss(stringstream::in | stringstream::binary);
15064 0 : iss.str(decodedString);
15065 :
15066 0 : attribute.clear();
15067 :
15068 0 : unsigned int ndim = 0;
15069 : //iss.read((char *)&ndim, sizeof(ndim));
15070 0 : TRYREAD(iss, ndim);
15071 0 : if (ndim != 3) {
15072 0 : throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 3.", tableName);
15073 : }
15074 :
15075 0 : unsigned int dim1 = 0;
15076 : //iss.read((char *)&dim1, sizeof(dim1));
15077 0 : TRYREAD(iss,dim1);
15078 :
15079 0 : unsigned int dim2 = 0;
15080 : //iss.read((char *)&dim2, sizeof(dim2));
15081 0 : TRYREAD(iss,dim2);
15082 :
15083 0 : unsigned int dim3 = 0;
15084 : //iss.read((char *)&dim2, sizeof(dim3));
15085 0 : TRYREAD(iss,dim3);
15086 :
15087 0 : attribute.reserve(dim1);
15088 :
15089 : Double_CPP v;
15090 0 : vector <vector<Speed> > aux2;
15091 0 : vector<Speed> aux3;
15092 0 : aux2.reserve(dim2);
15093 0 : aux3.reserve(dim3);
15094 :
15095 0 : for (unsigned int i = 0; i < dim1; i++) {
15096 0 : aux2.clear();
15097 0 : for (unsigned int j = 0; j < dim2; j++) {
15098 0 : aux3.clear();
15099 0 : for (unsigned int k = 0; k < dim3; k++) {
15100 : //iss.read((char*) &v, sizeof(v));
15101 0 : TRYREAD(iss,v);
15102 :
15103 0 : aux3.push_back(Speed(v));
15104 :
15105 : }
15106 0 : aux2.push_back(aux3);
15107 : }
15108 0 : attribute.push_back(aux2);
15109 : }
15110 0 : return attribute;
15111 : ;
15112 0 : }
15113 :
15114 :
15115 0 : vector <vector <vector <vector<Speed> > > >& Parser::get4DSpeedFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector< vector <vector <vector<Speed> > > >& attribute)
15116 : {
15117 0 : string xmlField = Parser::getField(xmlDoc,name);
15118 0 : if (xmlField.length() == 0) {
15119 0 : throw ConversionException("Error: Field \"" +
15120 0 : name + "\": Invalid XML syntax", tableName);
15121 : }
15122 :
15123 0 : string decodedString;
15124 0 : Base64 b64;
15125 0 : b64.decode(xmlField, decodedString);
15126 :
15127 0 : stringstream iss(stringstream::in | stringstream::binary);
15128 0 : iss.str(decodedString);
15129 :
15130 0 : attribute.clear();
15131 :
15132 0 : unsigned int ndim = 0;
15133 : //iss.read((char *)&ndim, sizeof(ndim));
15134 0 : TRYREAD(iss, ndim);
15135 0 : if (ndim != 4) {
15136 0 : throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 4.", tableName);
15137 : }
15138 :
15139 0 : unsigned int dim1 = 0;
15140 : //iss.read((char *)&dim1, sizeof(dim1));
15141 0 : TRYREAD(iss,dim1);
15142 :
15143 0 : unsigned int dim2 = 0;
15144 : //iss.read((char *)&dim2, sizeof(dim2));
15145 0 : TRYREAD(iss,dim2);
15146 :
15147 0 : unsigned int dim3 = 0;
15148 : //iss.read((char *)&dim2, sizeof(dim3));
15149 0 : TRYREAD(iss,dim3);
15150 :
15151 0 : unsigned int dim4 = 0;
15152 : //iss.read((char *)&dim2, sizeof(dim3));
15153 0 : TRYREAD(iss,dim3);
15154 :
15155 0 : attribute.reserve(dim1);
15156 :
15157 : Double_CPP v;
15158 0 : vector <vector <vector<Speed> > > aux2;
15159 0 : vector <vector<Speed> > aux3;
15160 0 : vector<Speed> aux4;
15161 0 : aux2.reserve(dim2);
15162 0 : aux3.reserve(dim3);
15163 0 : aux4.reserve(dim4);
15164 :
15165 0 : for (unsigned int i = 0; i < dim1; i++) {
15166 0 : aux2.clear();
15167 0 : for (unsigned int j = 0; j < dim2; j++) {
15168 0 : aux3.clear();
15169 0 : for (unsigned int k = 0; k < dim3; k++) {
15170 0 : aux4.clear();
15171 0 : for (unsigned int l = 0; l < dim4; l++) {
15172 : //iss.read((char*) &v, sizeof(v));
15173 0 : TRYREAD(iss,v);
15174 :
15175 0 : aux4.push_back(Speed(v));
15176 :
15177 : }
15178 0 : aux3.push_back(aux4);
15179 : }
15180 0 : aux2.push_back(aux3);
15181 : }
15182 0 : attribute.push_back(aux2);
15183 : }
15184 0 : return attribute;
15185 : ;
15186 0 : }
15187 :
15188 :
15189 :
15190 :
15191 :
15192 :
15193 :
15194 :
15195 :
15196 :
15197 0 : void Parser::toXMLBase64(vector<Temperature> data, const string &name, string &buf){
15198 0 : stringstream oss(stringstream::out | stringstream::binary);
15199 0 : string encoded;
15200 :
15201 0 : buf.append("<" + name + "> ");
15202 0 : int ndim = 1;
15203 0 : int dim1 = data.size();
15204 :
15205 0 : oss.write((char *)&ndim, sizeof(int));
15206 0 : oss.write((char *)&dim1, sizeof(dim1));
15207 :
15208 0 : for (unsigned int i = 0; i < data.size(); i++) {
15209 :
15210 0 : double v = data.at(i).get();
15211 :
15212 0 : oss.write((char *) &v, sizeof(v));
15213 : }
15214 :
15215 0 : Base64 b64;
15216 0 : b64.encode(oss.str(), encoded, false);
15217 0 : buf.append(encoded);
15218 0 : buf.append(" </" + name + "> ");
15219 0 : }
15220 :
15221 :
15222 0 : void Parser::toXMLBase64(vector< vector<Temperature> > data, const string &name, string &buf){
15223 0 : stringstream oss(stringstream::out | stringstream::binary);
15224 0 : string encoded;
15225 :
15226 0 : buf.append("<" + name + "> ");
15227 0 : int ndim = 2;
15228 0 : int dim1 = data.size();
15229 0 : int dim2 = data.at(0).size();
15230 :
15231 0 : oss.write((char *)&ndim, sizeof(int));
15232 0 : oss.write((char *)&dim1, sizeof(dim1));
15233 0 : oss.write((char *)&dim2, sizeof(dim2));
15234 0 : for (unsigned int i = 0; i < data.size(); i++)
15235 0 : for (unsigned int j = 0; j < data.at(0).size(); j++) {
15236 :
15237 0 : double v = data.at(i).at(j).get();
15238 :
15239 0 : oss.write((char *) &v, sizeof(v));
15240 : }
15241 :
15242 0 : Base64 b64;
15243 0 : b64.encode(oss.str(), encoded, false);
15244 0 : buf.append(encoded);
15245 0 : buf.append(" </" + name + "> ")
15246 : ;
15247 0 : }
15248 :
15249 :
15250 0 : void Parser::toXMLBase64(vector< vector< vector<Temperature> > > data, const string &name, string &buf){
15251 0 : stringstream oss(stringstream::out | stringstream::binary);
15252 0 : string encoded;
15253 :
15254 0 : buf.append("<" + name + "> ");
15255 0 : int ndim = 3;
15256 0 : int dim1 = data.size();
15257 0 : int dim2 = data.at(0).size();
15258 0 : int dim3 = data.at(0).at(0).size();
15259 :
15260 0 : oss.write((char *)&ndim, sizeof(int));
15261 0 : oss.write((char *)&dim1, sizeof(dim1));
15262 0 : oss.write((char *)&dim2, sizeof(dim2));
15263 0 : oss.write((char *)&dim3, sizeof(dim3));
15264 0 : for (unsigned int i = 0; i < data.size(); i++)
15265 0 : for (unsigned int j = 0; j < data.at(0).size(); j++)
15266 0 : for (unsigned int k = 0; k < data.at(0).at(0).size(); k++){
15267 :
15268 0 : double v = data.at(i).at(j).at(k).get();
15269 :
15270 0 : oss.write((char *) &v, sizeof(v));
15271 : }
15272 :
15273 0 : Base64 b64;
15274 0 : b64.encode(oss.str(), encoded, false);
15275 0 : buf.append(encoded);
15276 0 : buf.append(" </" + name + "> ")
15277 : ;
15278 0 : }
15279 :
15280 :
15281 0 : void Parser::toXMLBase64(vector<vector< vector< vector<Temperature> > > >data, const string &name, string &buf){
15282 0 : stringstream oss(stringstream::out | stringstream::binary);
15283 0 : string encoded;
15284 :
15285 0 : buf.append("<" + name + "> ");
15286 0 : int ndim = 3;
15287 0 : int dim1 = data.size();
15288 0 : int dim2 = data.at(0).size();
15289 0 : int dim3 = data.at(0).at(0).size();
15290 0 : int dim4 = data.at(0).at(0).at(0).size();
15291 :
15292 0 : oss.write((char *)&ndim, sizeof(int));
15293 0 : oss.write((char *)&dim1, sizeof(dim1));
15294 0 : oss.write((char *)&dim2, sizeof(dim2));
15295 0 : oss.write((char *)&dim3, sizeof(dim3));
15296 0 : oss.write((char *)&dim4, sizeof(dim4));
15297 0 : for (unsigned int i = 0; i < data.size(); i++)
15298 0 : for (unsigned int j = 0; j < data.at(0).size(); j++)
15299 0 : for (unsigned int k = 0; k < data.at(0).at(0).size(); k++)
15300 0 : for (unsigned int l = 0; l < data.at(0).at(0).at(0).size(); l++){
15301 :
15302 0 : double v = data.at(i).at(j).at(k).at(l).get();
15303 :
15304 0 : oss.write((char *) &v, sizeof(v));
15305 : }
15306 :
15307 0 : Base64 b64;
15308 0 : b64.encode(oss.str(), encoded, false);
15309 0 : buf.append(encoded);
15310 0 : buf.append(" </" + name + "> ")
15311 : ;
15312 0 : }
15313 :
15314 :
15315 : #ifndef Double_CPP
15316 :
15317 : #define Double_CPP double
15318 :
15319 : #endif
15320 :
15321 :
15322 : #define TRYREAD(_stream_, _value_) _stream_.read((char*) &(_value_), sizeof(_value_)); \
15323 : if (_stream_.bad()) throw ConversionException("I/O error during read of " + name, tableName);
15324 :
15325 :
15326 0 : vector<Temperature>& Parser::get1DTemperatureFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector<Temperature>& attribute)
15327 : {
15328 0 : string xmlField = Parser::getField(xmlDoc,name);
15329 0 : if (xmlField.length() == 0) {
15330 0 : throw ConversionException("Error: Field \"" +
15331 0 : name + "\": Invalid XML syntax", tableName);
15332 : }
15333 :
15334 0 : string decodedString;
15335 0 : Base64 b64;
15336 0 : b64.decode(xmlField, decodedString);
15337 :
15338 0 : stringstream iss(stringstream::in | stringstream::binary);
15339 0 : iss.str(decodedString);
15340 :
15341 0 : attribute.clear();
15342 :
15343 0 : unsigned int ndim = 0;
15344 : //iss.read((char *)&ndim, sizeof(ndim));
15345 0 : TRYREAD(iss,ndim);
15346 :
15347 0 : unsigned int dim1 = 0;
15348 : //iss.read((char *)&dim1, sizeof(dim1));
15349 0 : TRYREAD(iss,dim1);
15350 0 : if (ndim != 1) {
15351 0 : throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 1.", tableName);
15352 : }
15353 :
15354 0 : attribute.reserve(dim1);
15355 :
15356 : Double_CPP v;
15357 0 : for (unsigned int i = 0; i < dim1; i++) {
15358 : //iss.read((char*) &v, sizeof(v));
15359 0 : TRYREAD(iss,v);
15360 :
15361 0 : attribute.push_back(Temperature(v));
15362 :
15363 : }
15364 0 : return attribute;
15365 0 : }
15366 :
15367 :
15368 0 : vector <vector<Temperature> >& Parser::get2DTemperatureFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector <vector<Temperature> >& attribute)
15369 : {
15370 0 : string xmlField = Parser::getField(xmlDoc,name);
15371 0 : if (xmlField.length() == 0) {
15372 0 : throw ConversionException("Error: Field \"" +
15373 0 : name + "\": Invalid XML syntax", tableName);
15374 : }
15375 :
15376 0 : string decodedString;
15377 0 : Base64 b64;
15378 0 : b64.decode(xmlField, decodedString);
15379 :
15380 0 : stringstream iss(stringstream::in | stringstream::binary);
15381 0 : iss.str(decodedString);
15382 :
15383 0 : attribute.clear();
15384 :
15385 0 : unsigned int ndim = 0;
15386 : //iss.read((char *)&ndim, sizeof(ndim));
15387 0 : TRYREAD(iss,ndim);
15388 :
15389 0 : if (ndim != 2) {
15390 0 : throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 2.", tableName);
15391 : }
15392 :
15393 0 : unsigned int dim1 = 0;
15394 : //iss.read((char *)&dim1, sizeof(dim1));
15395 0 : TRYREAD(iss,dim1);
15396 :
15397 0 : unsigned int dim2 = 0;
15398 : //iss.read((char *)&dim2, sizeof(dim2));
15399 0 : TRYREAD(iss,dim2);
15400 :
15401 0 : attribute.reserve(dim1);
15402 :
15403 : Double_CPP v;
15404 0 : vector<Temperature> aux2;
15405 0 : aux2.reserve(dim2);
15406 0 : for (unsigned int i = 0; i < dim1; i++) {
15407 0 : aux2.clear();
15408 0 : for (unsigned int j = 0; j < dim2; j++) {
15409 : //iss.read((char*) &v, sizeof(v));
15410 0 : TRYREAD(iss,v);
15411 :
15412 0 : aux2.push_back(Temperature(v));
15413 :
15414 : }
15415 0 : attribute.push_back(aux2);
15416 : }
15417 0 : return attribute;
15418 0 : }
15419 :
15420 :
15421 0 : vector <vector <vector<Temperature> > >& Parser::get3DTemperatureFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector <vector <vector<Temperature> > >& attribute)
15422 : {
15423 0 : string xmlField = Parser::getField(xmlDoc,name);
15424 0 : if (xmlField.length() == 0) {
15425 0 : throw ConversionException("Error: Field \"" +
15426 0 : name + "\": Invalid XML syntax", tableName);
15427 : }
15428 :
15429 0 : string decodedString;
15430 0 : Base64 b64;
15431 0 : b64.decode(xmlField, decodedString);
15432 :
15433 0 : stringstream iss(stringstream::in | stringstream::binary);
15434 0 : iss.str(decodedString);
15435 :
15436 0 : attribute.clear();
15437 :
15438 0 : unsigned int ndim = 0;
15439 : //iss.read((char *)&ndim, sizeof(ndim));
15440 0 : TRYREAD(iss, ndim);
15441 0 : if (ndim != 3) {
15442 0 : throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 3.", tableName);
15443 : }
15444 :
15445 0 : unsigned int dim1 = 0;
15446 : //iss.read((char *)&dim1, sizeof(dim1));
15447 0 : TRYREAD(iss,dim1);
15448 :
15449 0 : unsigned int dim2 = 0;
15450 : //iss.read((char *)&dim2, sizeof(dim2));
15451 0 : TRYREAD(iss,dim2);
15452 :
15453 0 : unsigned int dim3 = 0;
15454 : //iss.read((char *)&dim2, sizeof(dim3));
15455 0 : TRYREAD(iss,dim3);
15456 :
15457 0 : attribute.reserve(dim1);
15458 :
15459 : Double_CPP v;
15460 0 : vector <vector<Temperature> > aux2;
15461 0 : vector<Temperature> aux3;
15462 0 : aux2.reserve(dim2);
15463 0 : aux3.reserve(dim3);
15464 :
15465 0 : for (unsigned int i = 0; i < dim1; i++) {
15466 0 : aux2.clear();
15467 0 : for (unsigned int j = 0; j < dim2; j++) {
15468 0 : aux3.clear();
15469 0 : for (unsigned int k = 0; k < dim3; k++) {
15470 : //iss.read((char*) &v, sizeof(v));
15471 0 : TRYREAD(iss,v);
15472 :
15473 0 : aux3.push_back(Temperature(v));
15474 :
15475 : }
15476 0 : aux2.push_back(aux3);
15477 : }
15478 0 : attribute.push_back(aux2);
15479 : }
15480 0 : return attribute;
15481 : ;
15482 0 : }
15483 :
15484 :
15485 0 : vector <vector <vector <vector<Temperature> > > >& Parser::get4DTemperatureFromBase64(const string &name, const string &tableName, const string &xmlDoc, vector< vector <vector <vector<Temperature> > > >& attribute)
15486 : {
15487 0 : string xmlField = Parser::getField(xmlDoc,name);
15488 0 : if (xmlField.length() == 0) {
15489 0 : throw ConversionException("Error: Field \"" +
15490 0 : name + "\": Invalid XML syntax", tableName);
15491 : }
15492 :
15493 0 : string decodedString;
15494 0 : Base64 b64;
15495 0 : b64.decode(xmlField, decodedString);
15496 :
15497 0 : stringstream iss(stringstream::in | stringstream::binary);
15498 0 : iss.str(decodedString);
15499 :
15500 0 : attribute.clear();
15501 :
15502 0 : unsigned int ndim = 0;
15503 : //iss.read((char *)&ndim, sizeof(ndim));
15504 0 : TRYREAD(iss, ndim);
15505 0 : if (ndim != 4) {
15506 0 : throw ConversionException("Error while decoding Base64 representation of \"" + name + "\" : found " + Integer::toString(ndim) + " for the number of dimensions, expecting 4.", tableName);
15507 : }
15508 :
15509 0 : unsigned int dim1 = 0;
15510 : //iss.read((char *)&dim1, sizeof(dim1));
15511 0 : TRYREAD(iss,dim1);
15512 :
15513 0 : unsigned int dim2 = 0;
15514 : //iss.read((char *)&dim2, sizeof(dim2));
15515 0 : TRYREAD(iss,dim2);
15516 :
15517 0 : unsigned int dim3 = 0;
15518 : //iss.read((char *)&dim2, sizeof(dim3));
15519 0 : TRYREAD(iss,dim3);
15520 :
15521 0 : unsigned int dim4 = 0;
15522 : //iss.read((char *)&dim2, sizeof(dim3));
15523 0 : TRYREAD(iss,dim3);
15524 :
15525 0 : attribute.reserve(dim1);
15526 :
15527 : Double_CPP v;
15528 0 : vector <vector <vector<Temperature> > > aux2;
15529 0 : vector <vector<Temperature> > aux3;
15530 0 : vector<Temperature> aux4;
15531 0 : aux2.reserve(dim2);
15532 0 : aux3.reserve(dim3);
15533 0 : aux4.reserve(dim4);
15534 :
15535 0 : for (unsigned int i = 0; i < dim1; i++) {
15536 0 : aux2.clear();
15537 0 : for (unsigned int j = 0; j < dim2; j++) {
15538 0 : aux3.clear();
15539 0 : for (unsigned int k = 0; k < dim3; k++) {
15540 0 : aux4.clear();
15541 0 : for (unsigned int l = 0; l < dim4; l++) {
15542 : //iss.read((char*) &v, sizeof(v));
15543 0 : TRYREAD(iss,v);
15544 :
15545 0 : aux4.push_back(Temperature(v));
15546 :
15547 : }
15548 0 : aux3.push_back(aux4);
15549 : }
15550 0 : aux2.push_back(aux3);
15551 : }
15552 0 : attribute.push_back(aux2);
15553 : }
15554 0 : return attribute;
15555 : ;
15556 0 : }
15557 :
15558 :
15559 :
15560 :
15561 : } // End namespace asdm
15562 :
|