Geant4 9.6.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
xData.cc
Go to the documentation of this file.
1/*
2# <<BEGIN-copyright>>
3# Copyright (c) 2010, Lawrence Livermore National Security, LLC.
4# Produced at the Lawrence Livermore National Laboratory
5# Written by Bret R. Beck, [email protected].
6# CODE-461393
7# All rights reserved.
8#
9# This file is part of GIDI. For details, see nuclear.llnl.gov.
10# Please also read the "Additional BSD Notice" at nuclear.llnl.gov.
11#
12# Redistribution and use in source and binary forms, with or without modification,
13# are permitted provided that the following conditions are met:
14#
15# 1) Redistributions of source code must retain the above copyright notice,
16# this list of conditions and the disclaimer below.
17# 2) Redistributions in binary form must reproduce the above copyright notice,
18# this list of conditions and the disclaimer (as noted below) in the
19# documentation and/or other materials provided with the distribution.
20# 3) Neither the name of the LLNS/LLNL nor the names of its contributors may be
21# used to endorse or promote products derived from this software without
22# specific prior written permission.
23#
24# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
25# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
26# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
27# SHALL LAWRENCE LIVERMORE NATIONAL SECURITY, LLC, THE U.S. DEPARTMENT OF ENERGY OR
28# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
29# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
30# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
31# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
32# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
33# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
34# <<END-copyright>>
35*/
36#include <stdlib.h>
37#include <string.h>
38#include <ctype.h>
39#ifndef WIN32
40 #include <unistd.h>
41#endif
42#ifdef WIN32
43 #include <io.h>
44 #ifndef _SSIZE_T_DEFINED
45 typedef int ssize_t;
46 #define _SSIZE_T_DEFINED
47 #endif
48#endif
49
50#include <sys/types.h>
51#include <sys/stat.h>
52#include <fcntl.h>
53#include <errno.h>
54
55#include "xData.h"
56
57#if defined __cplusplus
58namespace GIDI {
59using namespace GIDI;
60#endif
61
62static void *xData_parseFreeElement( statusMessageReporting *smr, xData_element *element );
63static void xData_parseFreeElementItems( statusMessageReporting *smr, xData_element *element );
64static void XMLCALL xData_parseStartElement( void *userData, const char *name, const char **attris );
65static void XMLCALL xData_parseEndElement( void *userData, const char *name );
66static void XMLCALL xData_parseCharacterData( void *userData, const XML_Char *s, int len );
67static void xData_parseInitializeRootElement( xData_document *doc, xData_rootElement *re, xData_element *parentElement,
68 int depth );
69static int xData_parseInitializeText( xData_document *doc, xData_text *text );
70static int xData_parseAddElementToRoot( statusMessageReporting *smr, xData_rootElement *parentRoot, const char *name, const char **attris );
71static enum xData_errorCodes xData_parseGetCurrentPosition( xData_document *doc, xData_docInfo *docInfo );
72static int xData_init_xDataTypeNone( xDataType *xDT, xData_element *element );
73static char *xData_getTraceback( statusMessageReporting *smr, xData_element *element );
74static char *xData_getTraceback2( statusMessageReporting *smr, xData_rootElement *parentRoot, int n );
75static int xData_elementList_defaultSorter( void const *p1, void const *p2 );
76static int xData_elementList_indexSorter( void const *p1, void const *p2 );
77static int xData_smrUserInterfaceInitialize( xData_document *doc );
78static int xData_smrUserInterfaceFree( xData_document *doc );
79static int xData_smrUserInterface( void *userData, char **smr );
80static char const *xData_shortStringForMessage( size_t size, char *Out, char const *In );
81/*
82************************************************************
83*/
85/*
86* Returns NULL is any error occurred. If an error occurs in an expat routine, xData_parseEndOfXML will set smr appropriately.
87*/
88 int f;
89 char buffer[10 * 1000];
90 ssize_t count, n = sizeof( buffer ) - 1;
91 ssize_t s = 0;
92 xData_document *doc = NULL;
93
94 if( ( doc = xData_parseMalloc( smr, func, userData ) ) != NULL ) {
95 if( xData_setFileName( smr, doc, fileName ) == 0 ) {
96 f = open( fileName, O_RDONLY );
97 if( f == -1 ) {
98 xData_parseEndOfXML( smr, doc );
99 smr_setMessageError( smr, NULL, __FILE__, __LINE__, xData_errFileError, "could not open file %s", fileName ); }
100 else {
101 while( ( count = read( f, buffer, n ) ) > 0 ) {
102 s += count;
103 buffer[count] = 0;
104 if( xData_parse( doc, buffer ) ) break;
105 if( !smr_isOk( doc->smr ) ) break;
106 }
107 close( f );
108 xData_parseEndOfXML( smr, doc );
109 if( count < 0 ) smr_setMessageError( smr, NULL, __FILE__, __LINE__, xData_errFileError,
110 "read failed with errno = %d for %s", errno, fileName );
111 }
112 }
113 if( ( doc != NULL ) && ( !smr_isOk( smr ) ) ) {
114 xData_parseFree( smr, doc );
115 doc = NULL;
116 }
117 }
118 return( doc );
119}
120/*
121************************************************************
122*/
124/*
125* Returns NULL is any error occurred. If an error occurs in an expat routine, xData_parseEndOfXML will set smr appropriately.
126*/
127 xData_document *doc = NULL;
128 if( ( doc = xData_parseMalloc( smr, func, userData ) ) != NULL ) {
129 xData_parse( doc, str );
130 xData_parseEndOfXML( smr, doc );
131 if( !smr_isOk( smr ) ) {
132 xData_parseFree( smr, doc );
133 doc = NULL;
134 }
135 }
136 return( doc );
137}
138/*
139************************************************************
140*/
142/*
143* Returns NULL is any error occurred.
144*/
145 xData_document *doc;
146
147 //if( ( doc = xData_malloc2( smr, sizeof( xData_document ), 1, "xData_document" ) ) != NULL ) {
148 if( ( doc = (xData_document*) xData_malloc2( smr, sizeof( xData_document ), 1, "xData_document" ) ) != NULL ) {
149 //if( xData_parseInitialize( smr, doc, func, userData ) ) doc = xData_parseFree( smr, doc );
150 if( xData_parseInitialize( smr, doc, func, userData ) ) doc = (xData_document*) xData_parseFree( smr, doc );
151 }
152 return( doc );
153}
154/*
155************************************************************
156*/
158
159 XML_Parser xmlParser;
160
162 doc->error = xData_errNone;
163 //doc->err = 0;
164 doc->err = (XML_Error) 0;
165 doc->err_line = 0;
166 doc->err_column = 0;
167 doc->fileName = NULL;
168 doc->xDataTypeOk_userFunction = func;
170 xData_smrUserInterfaceInitialize( doc );
171 doc->smr= smr;
172 doc->xmlParser = xmlParser = XML_ParserCreate( NULL );
173 if( xmlParser == NULL ) {
174 smr_setMessageError( smr, NULL, __FILE__, __LINE__, xData_errXML_ParserCreate, "XML_ParserCreate failed" ); }
175 else {
176 XML_SetUserData( doc->xmlParser, doc );
177 xData_parseInitializeRootElement( doc, &(doc->root), NULL, 0 );
178 doc->currentRoot = &(doc->root);
179 XML_SetElementHandler( xmlParser, xData_parseStartElement, xData_parseEndElement );
180 XML_SetCharacterDataHandler( xmlParser, xData_parseCharacterData );
181 }
182 return( !smr_isOk( smr ) );
183}
184/*
185************************************************************
186*/
188
189 if( doc->xmlParser ) {
190 doc->err = XML_GetErrorCode( doc->xmlParser );
193 if( smr_isOk( smr ) && ( XML_Parse( doc->xmlParser, NULL, 0, 1 ) == XML_STATUS_ERROR ) ) {
196 "status = %d\nXML_Error code = %d\nXML_ErrorString = %s\nerror line, column = %d, %d", xData_errXMLParser,
197 doc->err, XML_ErrorString( doc->err ), doc->err_line, doc->err_column );
198 }
200 doc->xmlParser = NULL;
202 }
203 return( 0 );
204}
205/*
206************************************************************
207*/
209
210 xData_parseEndOfXML( smr, doc );
211 //doc->root.children = xData_parseFreeElement( smr, doc->root.children );
212 doc->root.children = (xData_element*) xData_parseFreeElement( smr, doc->root.children );
213 //doc->fileName = xData_free( smr, doc->fileName );
214 doc->fileName = (char*) xData_free( smr, doc->fileName );
215 xData_smrUserInterfaceFree( doc );
216 xData_free( smr, doc );
217 return( NULL );
218}
219/*
220************************************************************
221*/
222static void *xData_parseFreeElement( statusMessageReporting *smr, xData_element *element ) {
223
224 xData_element *next;
225
226 if( element == NULL ) return( NULL );
227 for( ; element != NULL; element = next ) {
228 next = element->next;
229 xData_parseFreeElementItems( smr, element );
230 xData_free( smr, element );
231 }
232 return( NULL );
233}
234/*
235************************************************************
236*/
237static void xData_parseFreeElementItems( statusMessageReporting *smr, xData_element *element ) {
238
239 //element->childrenRoot.children = xData_parseFreeElement( smr, element->childrenRoot.children );
240 element->childrenRoot.children = (xData_element*) xData_parseFreeElement( smr, element->childrenRoot.children );
241 if( ( !strcmp( element->name, "xData" ) ) && ( element->xDataTypeInfo.release != NULL ) ) element->xDataTypeInfo.release( smr,
242 &(element->xDataTypeInfo) );
243 xData_free( smr, element->name );
244 xData_free( smr, element->fullName );
245 if( element->attributes.attributes ) xData_free( smr, element->attributes.attributes );
246 if( element->text.text ) xData_free( smr, element->text.text );
247}
248/*
249************************************************************
250*/
251int xData_parse( xData_document *doc, const char *s ) {
252
253 if( doc->status != xData_statusParsing ) return( doc->status );
254 if( XML_Parse( doc->xmlParser, s, strlen( s ), 0 ) == XML_STATUS_ERROR ) return( -1 );
255 return( 0 );
256}
257/*
258************************************************************
259*/
260static void XMLCALL xData_parseStartElement( void *userData, const char *name, const char **attris ) {
261
263
264 if( !smr_isOk( doc->smr ) ) return;
265 xData_parseAddElementToRoot( doc->smr, doc->currentRoot, name, attris );
266}
267/*
268************************************************************
269*/
270static void XMLCALL xData_parseEndElement( void *userData, const char *name ) {
271
272 int status = 0;
274
275 if( !smr_isOk( doc->smr ) ) return;
276 if( !strcmp( name, "xData" ) ) {
278 xData_text *text = &(element->text);
279 const char *value = xData_getAttributesValueInElement( element, "type" );
280 if( !strcmp( value, xData_oned_x_ID ) ) {
281 xData_init_1d_x( doc->smr, element ); }
282 else if( !strcmp( value, xData_twod_xy_ID ) ) {
283 xData_init_2d_xy( doc->smr, element ); }
284 else if( !strcmp( value, xData_twod_xindex_y_ID ) ) {
285 xData_init_2d_xindex_y( doc->smr, element ); }
286 else if( !strcmp( value, xData_twod_xShared_yHistogram_ID ) ) {
287 xData_init_2d_xShared_yHistogram( doc->smr, element ); }
288 else if( !strcmp( value, xData_matrix_ID ) ) {
289 xData_init_matrix( doc->smr, element ); }
290 else {
291 status = -1;
292 if( doc->xDataTypeOk_userFunction != NULL ) {
293 if( doc->xDataTypeOk_userFunction( value, doc, doc->xDataTypeOk_userData ) ) status = 1;
294 }
295 if( status < 0 ) smr_setMessageError( doc->smr, xData_get_smrUserInterfaceFromElement( element ), __FILE__, __LINE__, -1,
296 "Unsupported xData type = %s", value );
297 }
298 if( ( status == 0 ) && ( smr_isOk( doc->smr ) ) ) status = element->xDataTypeInfo.toData( doc->smr, &(element->xDataTypeInfo),
299 &(element->attributes), text->text );
300 }
301 doc->currentRoot->currentChild = NULL;
303}
304/*
305************************************************************
306*/
307static void XMLCALL xData_parseCharacterData( void *userData, const XML_Char *s, int len ) {
308/*
309* Always terminates text with a 0.
310*/
311 //xData_document *doc = userData;
314 int needSize = text->length + len + 1, l;
315 char *p;
316
317 if( !smr_isOk( doc->smr ) ) return;
318 if( needSize < 8 ) needSize = 8;
319 //if( needSize > text->allocated ) {
320 if( needSize > (int) text->allocated ) {
321 if( text->allocated != 0 ) {
322 l = ( 20 * text->allocated ) / 100;
323 if( l < 100 ) l = 100;
324 //if( needSize < ( text->allocated + l ) ) needSize = text->allocated + l;
325 if( needSize < ( (int) text->allocated + l ) ) needSize = text->allocated + l;
326 }
327 text->allocated = needSize;
328 //text->text = xData_realloc2( doc->smr, text->text, text->allocated, "text" );
329 text->text = (char*) xData_realloc2( doc->smr, text->text, text->allocated, "text" );
330 if( !smr_isOk( doc->smr ) ) return;
331 }
332 p = &(text->text[text->length]);
333 strncpy( p, s, len );
334 text->length += len;
335 p[len] = 0;
336}
337/*
338************************************************************
339*/
340static void xData_parseInitializeRootElement( xData_document *doc, xData_rootElement *re,
341 xData_element *parentElement, int depth ) {
342
343 re->xData_doc = doc;
344 re->parentElement = parentElement;
345 re->parentRoot = NULL;
346 if( parentElement != NULL ) re->parentRoot = parentElement->parentRoot;
347 re->depth = depth;
348 re->numberOfElements = 0;
349 re->children = NULL;
350 re->currentChild = NULL;
351}
352/*
353************************************************************
354*/
355static int xData_parseInitializeText( xData_document *doc, xData_text *text ) {
356
357 xData_parseGetCurrentPosition( doc, &(text->docInfo) );
358 text->allocated = 0;
359 text->length = 0;
360 text->text = NULL;
361 return( 0 );
362}
363/*
364************************************************************
365*/
366static int xData_parseAddElementToRoot( statusMessageReporting *smr, xData_rootElement *parentRoot, const char *name, const char **attris ) {
367
368 xData_document *doc = parentRoot->xData_doc;
369 xData_element *element;
370 int i, n, status = 1;
371 size_t lens;
372 char *p, *e;
373 const char **pAttris;
375 void *smrUser;
376
377 //element = xData_malloc2( doc->smr, sizeof( xData_element ), 1, "xData_element" );
378 element = (xData_element*) xData_malloc2( doc->smr, sizeof( xData_element ), 1, "xData_element" );
379 if( element == NULL ) return( 1 );
380 xData_parseGetCurrentPosition( doc, &(element->docInfo) );
381 element->ordinal = parentRoot->numberOfElements;
382 element->index = -1;
383 element->accessed = 0;
384 element->parentRoot = parentRoot;
385 xData_parseInitializeRootElement( doc, &(element->childrenRoot), element, parentRoot->depth + 1 );
386 element->next = NULL;
387 //if( ( element->name = xData_malloc2( doc->smr, strlen( name ) + 1, 0, "name" ) ) == NULL ) {
388 if( ( element->name = (char*) xData_malloc2( doc->smr, strlen( name ) + 1, 0, "name" ) ) == NULL ) {
389 xData_free( smr, element );
390 return( 1 );
391 }
392 strcpy( element->name, name );
393 if( ( element->fullName = xData_getTraceback( smr, element ) ) == NULL ) {
394 xData_free( smr, element->name );
395 xData_free( smr, element );
396 return( 1 );
397 }
398 for( i = 0, lens = 0, pAttris = attris; *pAttris; i++, pAttris++ ) lens += strlen( *pAttris ) + 1;
399 n = i / 2;
400 element->attributes.size = n * sizeof( xData_attribute ) + lens;
401 element->attributes.number = n;
402 element->attributes.attributes = NULL;
403 smrUser = xData_get_smrUserInterfaceFromElement( element );
404 if( element->attributes.size ) {
405 //if( ( element->attributes.attributes = xData_malloc2( doc->smr, element->attributes.size, 0, "attributes") ) == NULL ) {
406 if( ( element->attributes.attributes = (xData_attribute*) xData_malloc2( doc->smr, element->attributes.size, 0, "attributes") ) == NULL ) {
407 status = 0; }
408 else {
409 a = element->attributes.attributes;
410 p = (char *) &(element->attributes.attributes[n]);
411 for( i = 0, pAttris = attris; ( i < n ) && status; i++, a++, pAttris++ ) {
412 lens = strlen( *pAttris ) + 1;
413 a->name = p;
414 strcpy( p, *pAttris );
415 p += lens;
416 pAttris++;
417 lens = strlen( *pAttris ) + 1;
418 a->value= p;
419 strcpy( p, *pAttris );
420 p += lens;
421 if( !strcmp( "index", a->name ) ) {
422#ifndef WIN32
423 element->index = strtoll( a->value, &e, 10 );
424#endif
425#ifdef WIN32
426 element->index = strtol( a->value, &e, 10 );
427#endif
428 if( *e != 0 ) {
429 status = 0;
430 smr_setMessageError( doc->smr, smrUser, __FILE__, __LINE__, -1, "could not convert index attribute = %s to integer", a->value );
431 }
432 }
433 }
434 }
435 }
436 if( !status ) {
437 xData_free( smr, element->attributes.attributes );
438 xData_free( smr, element->name );
439 xData_free( smr, element->fullName );
440 xData_free( smr, element );
441 return( 1 );
442 }
443 xData_init_xDataTypeNone( &(element->xDataTypeInfo), element );
444 element->textOffset = 0;
445 xData_parseInitializeText( doc, &(element->text) );
446 if( parentRoot->parentElement != NULL ) element->textOffset = parentRoot->parentElement->text.length;
447 if( parentRoot->currentChild == NULL ) {
448 parentRoot->children = element; }
449 else {
450 parentRoot->currentChild->next = element;
451 }
452 parentRoot->numberOfElements++;
453 parentRoot->currentChild = element;
454 doc->currentRoot = &(element->childrenRoot);
455 return( 0 );
456}
457/*
458************************************************************
459*/
460static enum xData_errorCodes xData_parseGetCurrentPosition( xData_document *doc, xData_docInfo *docInfo ) {
461
463 docInfo->line = XML_GetCurrentLineNumber( doc->xmlParser );
464 return( xData_errNone );
465}
466/*
467************************************************************
468*/
470
471 return( doc->status == xData_statusError );
472}
473/*
474************************************************************
475*/
478xData_element *xData_getNextElement( xData_element *element ) { return( element->next ); }
479/*
480************************************************************
481*/
483
484 item->parentElement = element;
485 item->element = xData_getFirstElement( element );
486 if( item->element == NULL ) {
487 item->mode = xData_itemModeText;
488 if( element->text.length == 0 ) item->mode = xData_itemModeEnd; }
489 else {
491 if( 0 < item->element->textOffset ) item->mode = xData_itemModeText;
492 }
493 item->textOffset = 0;
494 item->textLength = element->text.length;
495 if( item->element != NULL ) item->textLength = item->element->textOffset;
496 item->text = element->text.text;
497 return( item->mode );
498}
499/*
500************************************************************
501*/
503
504 if( item->mode != xData_itemModeEnd ) {
505 if( item->mode == xData_itemModeText ) {
507 if( item->element == NULL ) item->mode = xData_itemModeEnd;
508 item->textOffset += item->textLength;
509 item->textLength = 0;
510 item->text = &(item->parentElement->text.text[item->textOffset]); }
511 else {
512 item->element = item->element->next;
513 item->mode = xData_itemModeText;
514 if( item->element == NULL ) {
515 if( item->textOffset < item->parentElement->text.length ) {
516 item->textLength = item->parentElement->text.length - item->textOffset; }
517 else {
518 item->mode = xData_itemModeEnd;
519 } }
520 else {
521 item->textLength = item->element->textOffset - item->textOffset;
522 }
523 }
524 }
525 return( item->mode );
526}
527/*
528************************************************************
529*/
530char *xData_getAttributesValue( xData_attributionList *attributes, const char *name ) {
531
532 int i;
533 char *value = NULL;
534
535 for( i = 0; i < attributes->number; i++ ) {
536 if( !strcmp( attributes->attributes[i].name, name ) ) {
537 value = attributes->attributes[i].value;
538 break;
539 }
540 }
541 return( value );
542}
543/*
544************************************************************
545*/
546const char *xData_getAttributesValueInElement( xData_element *element, const char *name ) {
547
548 return( (const char *) xData_getAttributesValue( &(element->attributes), name ) );
549}
550/*
551************************************************************
552*/
553//int xData_initializeAttributionList( statusMessageReporting *smr, xData_attributionList *attributes ) {
555
556 attributes->number = 0;
557 attributes->size = 0;
558 attributes->attributes = NULL;
559 return( 0 );
560}
561/*
562************************************************************
563*/
565/*
566* The dest must not be active, else a memory leak will occur, as this routine does no free-ing.
567*/
568 int i;
569 size_t lens;
570 xData_attribute *d, *s;
571 char *p;
572
573 //if( ( dest->attributes = xData_malloc2( smr, src->size, 0, "attributes" ) ) == NULL ) return( 1 );
574 if( ( dest->attributes = (xData_attribute*) xData_malloc2( smr, src->size, 0, "attributes" ) ) == NULL ) return( 1 );
575 dest->number = src->number;
576 dest->size = src->size;
577 d = dest->attributes;
578 s = src->attributes;
579 p = (char *) &(dest->attributes[src->number]);
580 for( i = 0; i < src->number; i++, s++, d++ ) {
581 lens = strlen( s->name ) + 1;
582 d->name = p;
583 strcpy( p, s->name );
584 p += lens;
585 lens = strlen( s->value ) + 1;
586 d->value= p;
587 strcpy( p, s->value );
588 p += lens;
589 }
590
591 return( 0 );
592}
593/*
594************************************************************
595*/
597
598 return( attributes->number );
599}
600/*
601************************************************************
602*/
604
605 if( index >= attributes->number ) return( NULL );
606 return( &(attributes->attributes[index]) );
607}
608/*
609************************************************************
610*/
612
613 attributes->number = 0;
614 attributes->size = 0;
615 //attributes->attributes = xData_free( smr, attributes->attributes );
616 attributes->attributes = (xData_attribute*) xData_free( smr, attributes->attributes );
617 return( 0 );
618}
619/*
620************************************************************
621*/
623
624 //return( xData_getOneElementByTagName( smr, element, "xData", 1 ) );
625 return( xData_getOneElementByTagName( smr, element, (char*) "xData", 1 ) );
626}
627/*
628************************************************************
629*/
630static int xData_init_xDataTypeNone( xDataType *xDT, xData_element *element ) {
631
633 xDT->typeString = NULL;
634 xDT->element = element;
635 xDT->toData = NULL;
636 xDT->toString = NULL;
637 xDT->release = NULL;
638 xDT->indexPresent = 1; /* The following describes the meaning of present variables. */
639 xDT->startPresent = 1; /* If < 0, an error occured in converting value to an integer. */
640 xDT->endPresent = 1; /* If > 0, not present as an attribute. */
641 xDT->lengthPresent = 1; /* Else, if 0, present and converted without an error. */
642 xDT->index = -1;
643 xDT->start = -1;
644 xDT->end = -1;
645 xDT->length = -1;
646 xDT->data = NULL;
647 return( 0 );
648}
649/*
650************************************************************
651*/
653 xData_Int *length ) {
654
655 if( element->xDataTypeInfo.typeString == NULL ) {
656 smr_setMessageError( smr, xData_get_smrUserInterfaceFromElement( element ), __FILE__, __LINE__, 1, "element %s is not xData", element->fullName );
657 return( 1 );
658 }
659 *index = element->xDataTypeInfo.index;
660 *start = element->xDataTypeInfo.start;
661 *end = element->xDataTypeInfo.end;
662 *length = element->xDataTypeInfo.length;
663 return( 0 );
664}
665/*
666************************************************************
667*/
669
670 xDataType *xDT = &(element->xDataTypeInfo);
671 void *smrUser = xData_get_smrUserInterfaceFromElement( element );
672
673 xDT->index = -1;
674 xDT->start = -1;
675 xDT->end = -1;
676 xDT->length = -1;
677 if( ( xDT->indexPresent = xData_convertAttributeTo_xData_Int( smr, element, "index", &(xDT->index) ) ) < 0 ) return( 1 );
678 if( ( xDT->startPresent = xData_convertAttributeTo_xData_Int( smr, element, "start", &(xDT->start) ) ) < 0 ) return( 1 );
679 if( ( xDT->endPresent = xData_convertAttributeTo_xData_Int( smr, element, "end", &(xDT->end) ) ) < 0 ) return( 1 );
680 if( ( xDT->lengthPresent = xData_convertAttributeTo_xData_Int( smr, element, "length", &(xDT->length) ) ) < 0 ) return( 1 );
681 if( ( xDT->endPresent > 0 ) ) {
682 if( xDT->lengthPresent > 0 ) {
683 smr_setMessageError( smr, smrUser, __FILE__, __LINE__, 1, "missing length (or end) in xData" );
684 return( 1 );
685 }
686 xDT->end = xDT->length; }
687 else {
688 if( xDT->lengthPresent > 0 ) xDT->length = xDT->end;
689 }
690
691 if( xDT->startPresent > 0 ) xDT->start = 0;
692 if( xDT->start < 0 ) {
693 smr_setMessageError( smr, smrUser, __FILE__, __LINE__, 1, "start = %d < 0", xDT->start );
694 return( 1 );
695 }
696 if( xDT->end < xDT->start ) {
697 smr_setMessageError( smr, smrUser, __FILE__, __LINE__, 1, "start = %d >= end = %d", xDT->start, xDT->end );
698 return( 1 );
699 }
700 if( xDT->length < 0 ) {
701 smr_setMessageError( smr, smrUser, __FILE__, __LINE__, 1, "length = %d < 0", xDT->length );
702 return( 1 );
703 }
704
705 return( 0 );
706}
707/*
708************************************************************
709*/
711/*
712* Returns 1 if no such attribute, -1 if error converting to xData_Int and 0 if successful.
713*/
714 const char *value;
715 char *e;
716
717 if( ( value = xData_getAttributesValueInElement( element, name ) ) == NULL ) return( 1 );
718 //*n = strtoll( value, &e, 10 );
719 *n = strtol( value, &e, 10 );
720 if( *e != 0 ) {
721 smr_setMessageError( smr, xData_get_smrUserInterfaceFromElement( element ), __FILE__, __LINE__, 1,
722 "could not convert attribute %s's value = %s to an integer", name, value );
723 return( -1 );
724 }
725 return( 0 );
726}
727/*
728************************************************************
729*/
730int xData_convertAttributeToDouble( statusMessageReporting *smr, xData_element *element, const char *name, double *d ) {
731/*
732* Returns 1 if no such attribute, -1 if error converting to double and 0 if successful.
733*/
734 const char *value;
735 char *e;
736
737 if( ( value = xData_getAttributesValueInElement( element, name ) ) == NULL ) return( 1 );
738 *d = strtod( value, &e );
739 if( *e != 0 ) {
740 smr_setMessageError( smr, xData_get_smrUserInterfaceFromElement( element) , __FILE__, __LINE__, 1,
741 "could not convert attribute %s's values = %s to a double", name, value );
742 return( -1 );
743 }
744 return( 0 );
745}
746/*
747************************************************************
748*/
749//int xData_numberOfElementsByTagName( statusMessageReporting *smr, xData_element *element, const char *tagName ) {
751
752 int n = 0;
753 xData_element *child;
754
755 for( child = xData_getFirstElement( element ); child != NULL; child = xData_getNextElement( child ) ) if( !strcmp( child->name, tagName ) ) n++;
756 return( n );
757}
758/*
759************************************************************
760*/
762
763 int n = xData_numberOfElementsByTagName( smr, element, tagName );
764 size_t size;
765 xData_element *child;
767 xData_elementList *list = NULL;
768
769
770 size = sizeof( xData_elementList ) + n * sizeof( xData_elementListItem );
771 //if( ( list = xData_malloc2( smr, size, 0, "list" ) ) != NULL ) {
772 if( ( list = (xData_elementList*) xData_malloc2( smr, size, 0, "list" ) ) != NULL ) {
773 list->n = n;
774 p = list->items = (xData_elementListItem *) &(list[1]);
775 for( child = xData_getFirstElement( element ); child != NULL; child = xData_getNextElement( child ) ) {
776 if( !strcmp( child->name, tagName ) ) {
777 p->element = child;
778 p->sortString = NULL;
779 p++;
780 }
781 }
782 }
783 return( list );
784}
785/*
786************************************************************
787*/
789 const char *sortAttributeName, xData_sortElementFunc sortFunction ) {
790
791 int i;
792 xData_elementList *list = xData_getElementsByTagName( smr, element, tagName );
794
795 if( list != NULL ) {
796 if( sortFunction == NULL ) {
797 sortFunction = (xData_sortElementFunc) xData_elementList_defaultSorter;
798 if( sortAttributeName == NULL ) sortFunction = (xData_sortElementFunc) xData_elementList_indexSorter;
799 }
800 if( sortAttributeName == NULL ) sortAttributeName = "index";
801 for( i = 0, p = list->items; i < list->n; i++, p++ ) p->sortString = xData_getAttributesValueInElement( p->element, sortAttributeName );
802 qsort( list->items, list->n, sizeof( xData_elementListItem ), sortFunction );
803 }
804
805 return( list );
806}
807/*
808************************************************************
809*/
811
812 xData_elementList *list;
813 xData_element *xData = NULL;
814
815 if( ( list = xData_getElementsByTagName( smr, element, name ) ) != NULL ) {
816 if( list->n == 0 ) {
817 if( required ) smr_setMessageError( smr, xData_get_smrUserInterfaceFromElement( element ), __FILE__, __LINE__,
818 1, "element %s does not have sub-element named %s", element->fullName, name ); }
819 else if( list->n > 1 ) {
820 smr_setMessageError( smr, xData_get_smrUserInterfaceFromElement( element ), __FILE__, __LINE__, 1,
821 "element %s contains more than one sub-element named %s", element->fullName, name ); }
822 else {
823 xData = list->items[0].element;
824 }
825 xData_freeElementList( smr, list );
826 }
827 return( xData );
828}
829/*
830************************************************************
831*/
833
834 xData_free( smr, list );
835}
836/*
837************************************************************
838*/
839static char *xData_getTraceback( statusMessageReporting *smr, xData_element *element ) {
840/*
841* Returned string must be freed by calling routine.
842*/
843 int size;
844 char *s, *name;
845
846 name = element->name;
847 size = strlen( name ) + 1;
848 if( ( s = xData_getTraceback2( smr, element->parentRoot, size ) ) != NULL ) {
849 strcat( s, "/" );
850 strcat( s, name );
851 }
852 return( s );
853}
854/*
855************************************************************
856*/
857static char *xData_getTraceback2( statusMessageReporting *smr, xData_rootElement *parentRoot, int n ) {
858
859 int size;
860 char *s, *name;
861
862 if( parentRoot->parentRoot == NULL ) {
863 //s = xData_malloc2( smr, n + 1, 0, "traceback string" );
864 s = (char*) xData_malloc2( smr, n + 1, 0, "traceback string" );
865 *s = 0; }
866 else {
867 name = parentRoot->parentElement->name;
868 size = strlen( name ) + 1;
869 n += size;
870 if( ( s = xData_getTraceback2( smr, parentRoot->parentRoot, n ) ) != NULL ) {
871 strcat( s, "/" );
872 strcat( s, name );
873 }
874 }
875 return( s );
876}
877/*
878************************************************************
879*/
880static int xData_elementList_defaultSorter( void const *p1, void const *p2 ) {
881
882 const char *s1 = ((xData_elementListItem *) p1)->sortString, *s2 = ((xData_elementListItem *) p2)->sortString;
883
884 if( s2 == NULL ) return( -1 );
885 if( s1 == NULL ) return( 1 );
886 return( strcmp( s1, s2 ) );
887}
888/*
889************************************************************
890*/
891static int xData_elementList_indexSorter( void const *p1, void const *p2 ) {
892
893 xData_element *e1 = ((xData_elementListItem *) p1)->element, *e2 = ((xData_elementListItem *) p2)->element;
894
895 return( e1->index - e2->index );
896}
897/*
898************************************************************
899*/
900int xData_is_xDataType( statusMessageReporting *smr, xDataType *xDT, char const * const type, int setMsg ) {
901
902 if( xDT->typeString == NULL ) {
903 if( setMsg ) smr_setMessageError( smr, xData_get_smrUserInterfaceFromElement( xDT->element ), __FILE__, __LINE__, 1,
904 "element %s not xData object", xDT->element->fullName ); }
905 else if( xDT->typeString != type ) {
906 if( setMsg ) smr_setMessageError( smr, xData_get_smrUserInterfaceFromElement( xDT->element ), __FILE__, __LINE__, 1,
907 "Element %s is not xData object of type %s", type );
908 }
909 return( xDT->typeString == type );
910}
911/*
912************************************************************
913*/
915
916 return( doc->fileName );
917}
918/*
919************************************************************
920*/
921int xData_setFileName( statusMessageReporting *smr, xData_document *doc, char const *fileName ) {
922
923 doc->fileName = (char*) xData_free( smr, doc->fileName );
924 if( fileName != NULL ) {
925 //if( ( doc->fileName = xData_malloc2( smr, strlen( fileName ) + 1, 0, "doc->fileName" ) ) == NULL ) return( 1 );
926 if( ( doc->fileName = (char*) xData_malloc2( smr, strlen( fileName ) + 1, 0, "doc->fileName" ) ) == NULL ) return( 1 );
927 strcpy( doc->fileName, fileName );
928 }
929 return( 0 );
930}
931/*
932************************************************************
933*/
935
936 xData_rootElement* root = element->parentRoot;
937
938 while( root->parentRoot != NULL ) root = root->parentRoot;
939 return( root->xData_doc );
940}
941/*
942************************************************************
943*/
945
946 if( doc == NULL ) return( NULL );
947 return( &(doc->smrUserInterface ) );
948}
949/*
950************************************************************
951*/
953
955}
956/*
957************************************************************
958*/
959static int xData_smrUserInterfaceInitialize( xData_document *doc ) {
960
961 doc->smrUserInterface.smrUserInterface = xData_smrUserInterface;
962 doc->smrUserInterface.doc = doc;
963 return( 0 );
964}
965/*
966************************************************************
967*/
968static int xData_smrUserInterfaceFree( xData_document *doc ) {
969
971 doc->smrUserInterface.doc = NULL;
972 return( 0 );
973}
974/*
975************************************************************
976*/
977static int xData_smrUserInterface( void *userData, char **str ) {
978
979 int size, fileNameSize = 0, elementSize = 0;
980 xData_smr *smrUserInterface = (xData_smr *) userData;
981 static char lcl[] = "\nat line %d and column %d", el[] = "\nin element ", fl[] = "\nof file ";
982 char str_lcl[sizeof( lcl ) + 40];
983 xData_rootElement *currentRoot = smrUserInterface->doc->currentRoot;
984
985 if( smrUserInterface->doc->fileName != NULL ) fileNameSize = strlen( smrUserInterface->doc->fileName ) + strlen( fl );
986 if( currentRoot != NULL ) {
987 if( currentRoot->parentElement != NULL ) {
988 sprintf( str_lcl, lcl, currentRoot->parentElement->docInfo.line, currentRoot->parentElement->docInfo.column );
989 elementSize = strlen( str_lcl ) + strlen( currentRoot->parentElement->fullName ) + strlen( el );
990 }
991 }
992 size = fileNameSize + elementSize;
993 if( ( fileNameSize != 0 ) && ( elementSize != 0 ) ) size++;
994 if( ( size > 0 ) && ( str != NULL ) ) {
995 //if( ( *str = malloc( size + 1 ) ) == NULL ) return( -1 );
996 if( ( *str = (char*) malloc( size + 1 ) ) == NULL ) return( -1 );
997 if( ( size != 0 ) && ( elementSize != 0 ) ) {
998 sprintf( *str, "%s%s%s%s%s", str_lcl, el, currentRoot->parentElement->fullName, fl, smrUserInterface->doc->fileName ); }
999 else if( size != 0 ) {
1000 sprintf( *str, "%s%s", fl, smrUserInterface->doc->fileName ); }
1001 else {
1002 sprintf( *str, "%s%s%s", str_lcl, el, currentRoot->parentElement->fullName );
1003 }
1004 }
1005 return( size );
1006}
1007/*
1008************************************************************
1009*/
1010int xData_stringTo_xData_Int( statusMessageReporting *smr, void *smrUserInterface, char const *c, xData_Int *value, char const *endings, char **e ) {
1011
1012 char const *s;
1013 char tmp[64];
1014 int status = 1, n = sizeof( tmp );
1015
1016 for( s = c; *s != 0; s++ ) if( !isspace( *s ) ) break;
1017 //*value = strtoll( s, e, 10 );
1018 *value = strtol( s, e, 10 );
1019 if( *e == s ) {
1020 smr_setMessageError(smr, smrUserInterface, __FILE__, __LINE__, 1, "could not convert \"%s\" to an integer", xData_shortStringForMessage( n, tmp, c ));}
1021 else {
1022 if( *endings == 0 ) while( isspace( **e ) ) (*e)++;
1023 if( **e == 0 ) {
1024 status = 0; }
1025 else {
1026 if( *endings == 0 ) {
1027 smr_setMessageError( smr, smrUserInterface, __FILE__, __LINE__, 1, "integer string \"%s\" does not end with a '\\0'",
1028 xData_shortStringForMessage( n, tmp, c ) ); }
1029 else {
1030 if( strchr( endings, **e ) == NULL ) {
1031 smr_setMessageError( smr, smrUserInterface, __FILE__, __LINE__, 1, "integer string \"%s\" does not end with a white space or a '\\0\'",
1032 xData_shortStringForMessage( n, tmp, c ) ); }
1033 else {
1034 status = 0;
1035 }
1036 }
1037 }
1038 }
1039 return( status );
1040}
1041/*
1042************************************************************
1043*/
1044int xData_stringTo_double( statusMessageReporting *smr, void *smrUserInterface, char const *c, double *value, char const *endings, char **e ) {
1045
1046 char const *s;
1047 char tmp[64];
1048 int status = 1, n = sizeof( tmp );
1049
1050 for( s = c; *s != 0; s++ ) if( !isspace( *s ) ) break;
1051 *value = strtod( s, e );
1052 if( *e == s ) {
1053 smr_setMessageError(smr, smrUserInterface, __FILE__, __LINE__, 1, "could not convert \"%s\" to an double", xData_shortStringForMessage( n, tmp, c ));}
1054 else {
1055 if( *endings == 0 ) while( isspace( **e ) ) (*e)++;
1056 if( **e == 0 ) {
1057 status = 0; }
1058 else {
1059 if( *endings == 0 ) {
1060 smr_setMessageError( smr, smrUserInterface, __FILE__, __LINE__, 1, "double string \"%s\" does not end with a '\\0'",
1061 xData_shortStringForMessage( n, tmp, c ) ); }
1062 else {
1063 if( strchr( endings, **e ) == NULL ) {
1064 smr_setMessageError( smr, smrUserInterface, __FILE__, __LINE__, 1, "double string \"%s\" does not end with a white space or a '\\0\'",
1065 xData_shortStringForMessage( n, tmp, c ) ); }
1066 else {
1067 status = 0;
1068 }
1069 }
1070 }
1071 }
1072 return( status );
1073}
1074/*
1075************************************************************
1076*/
1077//int xData_addToAccessed( statusMessageReporting *smr, xData_element *element, int increment ) {
1079
1080 element->accessed += increment;
1081 return( element->accessed );
1082}
1083/*
1084************************************************************
1085*/
1086//int xData_getAccessed( statusMessageReporting *smr, xData_element *element ) {
1088
1089 return( element->accessed );
1090}
1091/*
1092************************************************************
1093*/
1094static char const *xData_shortStringForMessage( size_t size, char *Out, char const *In ) {
1095
1096 if( strlen( In ) > size ) {
1097 strncpy( Out, In, size - 5 );
1098 Out[size-5] = 0;
1099 strcat( Out, " ..." );
1100 return( Out );
1101 }
1102 return( In );
1103}
1104
1105#if defined __cplusplus
1106}
1107#endif
char XML_Char
#define XMLCALL
XML_ParserCreate(const XML_Char *encoding)
Definition: xmlparse.cc:658
#define XML_STATUS_ERROR
Definition: include/expat.h:47
XML_GetErrorCode(XML_Parser parser)
Definition: xmlparse.cc:1755
XML_SetUserData(XML_Parser parser, void *userData)
Definition: xmlparse.cc:1173
XML_ParserFree(XML_Parser parser)
Definition: xmlparse.cc:1082
XML_SetElementHandler(XML_Parser parser, XML_StartElementHandler start, XML_EndElementHandler end)
Definition: xmlparse.cc:1214
XML_Error
Definition: include/expat.h:54
XML_Parse(XML_Parser parser, const char *s, int len, int isFinal)
Definition: xmlparse.cc:1430
XML_ErrorString(enum XML_Error code)
Definition: xmlparse.cc:1848
XML_SetCharacterDataHandler(XML_Parser parser, XML_CharacterDataHandler handler)
Definition: xmlparse.cc:1235
int smr_setMessageError(statusMessageReporting *smr, void *userInterface, const char *file, int line, int code, const char *fmt,...)
int smr_isOk(statusMessageReporting *smr)
xData_Int length
Definition: xData.h:162
xData_element * element
Definition: xData.h:157
signed char startPresent
Definition: xData.h:161
enum xData_xDataType status
Definition: xData.h:155
xData_Int index
Definition: xData.h:162
xDT_releaseFunction release
Definition: xData.h:160
xData_Int end
Definition: xData.h:162
const char * typeString
Definition: xData.h:156
xDT_toStringFunction toString
Definition: xData.h:159
xData_Int start
Definition: xData.h:162
signed char lengthPresent
Definition: xData.h:161
signed char indexPresent
Definition: xData.h:161
void * data
Definition: xData.h:163
xDT_toDataFunction toData
Definition: xData.h:158
signed char endPresent
Definition: xData.h:161
char * name
Definition: xData.h:122
char * value
Definition: xData.h:123
xData_attribute * attributes
Definition: xData.h:129
size_t line
Definition: xData.h:117
size_t column
Definition: xData.h:118
XML_Size err_line
Definition: xData.h:201
statusMessageReporting * smr
Definition: xData.h:206
void * xDataTypeOk_userData
Definition: xData.h:204
xData_rootElement * currentRoot
Definition: xData.h:209
xData_xDataTypeOk xDataTypeOk_userFunction
Definition: xData.h:203
xData_smr smrUserInterface
Definition: xData.h:205
XML_Parser xmlParser
Definition: xData.h:207
enum XML_Error err
Definition: xData.h:200
XML_Size err_column
Definition: xData.h:201
char * fileName
Definition: xData.h:202
xData_rootElement root
Definition: xData.h:208
enum xData_errorCodes error
Definition: xData.h:199
enum xData_status status
Definition: xData.h:198
xData_element * element
Definition: xData.h:145
const char * sortString
Definition: xData.h:146
xData_elementListItem * items
Definition: xData.h:151
xData_docInfo docInfo
Definition: xData.h:177
xData_attributionList attributes
Definition: xData.h:186
char * fullName
Definition: xData.h:185
int accessed
Definition: xData.h:180
xData_element * next
Definition: xData.h:183
xData_text text
Definition: xData.h:189
char * name
Definition: xData.h:184
xData_rootElement * parentRoot
Definition: xData.h:181
size_t textOffset
Definition: xData.h:188
xData_rootElement childrenRoot
Definition: xData.h:182
xDataType xDataTypeInfo
Definition: xData.h:187
enum xData_itemMode mode
Definition: xData.h:215
char * text
Definition: xData.h:218
size_t textOffset
Definition: xData.h:216
xData_element * element
Definition: xData.h:214
size_t textLength
Definition: xData.h:217
xData_element * parentElement
Definition: xData.h:213
xData_document * xData_doc
Definition: xData.h:167
xData_element * currentChild
Definition: xData.h:173
xData_element * children
Definition: xData.h:172
xData_rootElement * parentRoot
Definition: xData.h:169
int numberOfElements
Definition: xData.h:171
xData_element * parentElement
Definition: xData.h:168
xData_document * doc
Definition: xData.h:194
smr_userInterface smrUserInterface
Definition: xData.h:193
size_t allocated
Definition: xData.h:134
char * text
Definition: xData.h:136
size_t length
Definition: xData.h:135
xData_docInfo docInfo
Definition: xData.h:133
char const * xData_getFileName(xData_document *doc)
Definition: xData.cc:914
int xData_convertAttributeToDouble(statusMessageReporting *smr, xData_element *element, const char *name, double *d)
Definition: xData.cc:730
void * xData_free(statusMessageReporting *smr, void *p)
Definition: xDataMisc.cc:89
int xData_stringTo_double(statusMessageReporting *smr, void *smrUserInterface, char const *c, double *value, char const *endings, char **e)
Definition: xData.cc:1044
void * xData_get_smrUserInterfaceFromElement(xData_element *element)
Definition: xData.cc:952
enum xData_itemMode xData_getFirstItem(xData_element *element, xData_item *item)
Definition: xData.cc:482
void xData_freeElementList(statusMessageReporting *smr, xData_elementList *list)
Definition: xData.cc:832
int xData_init_2d_xShared_yHistogram(statusMessageReporting *smr, xData_element *element)
int xData_getAccessed(statusMessageReporting *smr, xData_element *element)
Definition: xData.cc:1087
xData_document * xData_getElementsDocument(xData_element *element)
Definition: xData.cc:934
int xData_initializeAttributionList(statusMessageReporting *smr, xData_attributionList *attributes)
Definition: xData.cc:554
xData_elementList * xData_getElementsByTagNameAndSort(statusMessageReporting *smr, xData_element *element, const char *tagName, const char *sortAttributeName, xData_sortElementFunc sortFunction)
Definition: xData.cc:788
struct xData_attribute_s xData_attribute
Definition: xData.h:84
int(* xData_sortElementFunc)(const void *, const void *)
Definition: xData.h:99
int xData_is_xDataType(statusMessageReporting *smr, xDataType *xDT, char const *const type, int setMsg)
Definition: xData.cc:900
int xData_init_1d_x(statusMessageReporting *smr, xData_element *element)
Definition: xData_1d_x.cc:54
int xData_init_matrix(statusMessageReporting *smr, xData_element *element)
Definition: xData_matrix.cc:55
void * xData_get_smrUserInterfaceFromDocument(xData_document *doc)
Definition: xData.cc:944
int xData_numberOfElementsByTagName(statusMessageReporting *smr, xData_element *element, const char *tagName)
Definition: xData.cc:750
xData_itemMode
Definition: xData.h:80
@ xData_itemModeText
Definition: xData.h:80
@ xData_itemModeEnd
Definition: xData.h:80
@ xData_itemModeElement
Definition: xData.h:80
char const *const xData_matrix_ID
Definition: xData.h:75
int xData_copyAttributionList(statusMessageReporting *smr, xData_attributionList *dest, xData_attributionList *src)
Definition: xData.cc:564
xData_attribute * xData_attributeByIndex(xData_attributionList *attributes, int index)
Definition: xData.cc:603
int(* xData_xDataTypeOk)(char const *name, xData_document *doc, void *userData)
Definition: xData.h:139
@ xData_statusError
Definition: xData.h:77
@ xData_statusCompleted
Definition: xData.h:77
@ xData_statusParsing
Definition: xData.h:77
int xData_stringTo_xData_Int(statusMessageReporting *smr, void *smrUserInterface, char const *c, xData_Int *value, char const *endings, char **e)
Definition: xData.cc:1010
int xData_parseInitialize(statusMessageReporting *smr, xData_document *xData_doc, xData_xDataTypeOk func, void *userData)
Definition: xData.cc:157
enum xData_itemMode xData_getNextItem(xData_item *item)
Definition: xData.cc:502
const char * xData_getAttributesValueInElement(xData_element *element, const char *name)
Definition: xData.cc:546
int xData_releaseAttributionList(statusMessageReporting *smr, xData_attributionList *attributes)
Definition: xData.cc:611
char const *const xData_twod_xindex_y_ID
Definition: xData.h:73
xData_element * xData_getOneElementByTagName(statusMessageReporting *smr, xData_element *element, char *name, int required)
Definition: xData.cc:810
int xData_addToAccessed(statusMessageReporting *smr, xData_element *element, int increment)
Definition: xData.cc:1078
xData_document * xData_parseString(statusMessageReporting *smr, const char *str, xData_xDataTypeOk func, void *userData)
Definition: xData.cc:123
int xData_setFileName(statusMessageReporting *smr, xData_document *doc, char const *fileName)
Definition: xData.cc:921
int xData_xDataTypeConvertAttributes(statusMessageReporting *smr, xData_element *element)
Definition: xData.cc:668
void * xData_parseFree(statusMessageReporting *smr, xData_document *xData_doc)
Definition: xData.cc:208
xData_Int xData_convertAttributeTo_xData_Int(statusMessageReporting *smr, xData_element *element, const char *name, xData_Int *n)
Definition: xData.cc:710
xData_element * xData_getNextElement(xData_element *element)
Definition: xData.cc:478
xData_elementList * xData_getElementsByTagName(statusMessageReporting *smr, xData_element *element, const char *tagName)
Definition: xData.cc:761
struct xData_elementList_s xData_elementList
Definition: xData.h:97
xData_element * xData_getDocumentsElement(xData_document *xData_doc)
Definition: xData.cc:476
xData_element * xData_getFirstElement(xData_element *element)
Definition: xData.cc:477
xData_document * xData_parseReadFile(statusMessageReporting *smr, const char *fileName, xData_xDataTypeOk func, void *userData)
Definition: xData.cc:84
int xData_getCommonData(statusMessageReporting *smr, xData_element *element, xData_Int *index, xData_Int *start, xData_Int *end, xData_Int *length)
Definition: xData.cc:652
xData_errorCodes
Definition: xData.h:78
@ xData_errXML_ParserCreate
Definition: xData.h:78
@ xData_errFileError
Definition: xData.h:78
@ xData_errXMLParser
Definition: xData.h:79
@ xData_errNone
Definition: xData.h:78
char const *const xData_twod_xShared_yHistogram_ID
Definition: xData.h:74
char * xData_getAttributesValue(xData_attributionList *attributes, const char *name)
Definition: xData.cc:530
int xData_parseEndOfXML(statusMessageReporting *smr, xData_document *xData_doc)
Definition: xData.cc:187
xData_document * xData_parseMalloc(statusMessageReporting *smr, xData_xDataTypeOk func, void *userData)
Definition: xData.cc:141
char const *const xData_twod_xy_ID
Definition: xData.h:72
int xData_attributeListLength(xData_attributionList *attributes)
Definition: xData.cc:596
#define xData_malloc2(smr, size, zero, forItem)
Definition: xData.h:313
char const *const xData_oned_x_ID
Definition: xData.h:71
int xData_init_2d_xindex_y(statusMessageReporting *smr, xData_element *element)
#define xData_realloc2(smr, old, size, forItem)
Definition: xData.h:314
int xData_Int
Definition: xData.h:50
xData_element * xData_getElements_xDataElement(statusMessageReporting *smr, xData_element *element)
Definition: xData.cc:622
@ xData_xDataType_Ok
Definition: xData.h:81
int xData_parse(xData_document *xData_doc, const char *s)
Definition: xData.cc:251
int xData_parseIsError(xData_document *xData_doc)
Definition: xData.cc:469
int xData_init_2d_xy(statusMessageReporting *smr, xData_element *element)
Definition: xData_2d_xy.cc:54
XML_Size XMLCALL XML_GetCurrentColumnNumber(XML_Parser parser)
Definition: xmlparse.cc:1800
#define userData
Definition: xmlparse.cc:555
XML_Size XMLCALL XML_GetCurrentLineNumber(XML_Parser parser)
Definition: xmlparse.cc:1790
#define buffer
Definition: xmlparse.cc:611