Geant4-11
Macros | Functions
xDataTOM_importXML.cc File Reference
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <errno.h>
#include <unistd.h>
#include "xDataTOM_importXML_private.h"

Go to the source code of this file.

Macros

#define PATH_MAX   4096
 

Functions

static int xDataXML_addElementToRoot (statusMessageReporting *smr, xDataXML_rootElement *parentRoot, char const *name, char const **attris)
 
int xDataXML_addToAccessed (statusMessageReporting *, xDataXML_element *element, int increment)
 
xDataXML_attributexDataXML_attributeByIndex (xDataXML_attributionList *attributes, int index)
 
int xDataXML_attributeListLength (xDataXML_attributionList *attributes)
 
static int xDataXML_constructTOM (statusMessageReporting *smr, xDataTOM_element *TE, xDataXML_element *element)
 
xDataTOM_Int xDataXML_convertAttributeTo_xDataTOM_Int (statusMessageReporting *smr, xDataXML_element *element, char const *name, xDataTOM_Int *n, int required)
 
int xDataXML_convertAttributeToDouble (statusMessageReporting *smr, xDataXML_element *element, char const *name, double *d, int required)
 
static int xDataXML_endXMLParsing (statusMessageReporting *smr, xDataXML_document *doc)
 
void * xDataXML_freeDoc (statusMessageReporting *smr, xDataXML_document *doc)
 
static void * xDataXML_freeElement (statusMessageReporting *smr, xDataXML_element *element)
 
static void xDataXML_freeElementItems (statusMessageReporting *smr, xDataXML_element *element)
 
void xDataXML_freeElementList (statusMessageReporting *, xDataXML_elementList *list)
 
void * xDataXML_get_smrUserInterfaceFromDocument (xDataXML_document *doc)
 
void * xDataXML_get_smrUserInterfaceFromElement (xDataXML_element *element)
 
int xDataXML_getAccessed (statusMessageReporting *, xDataXML_element *element)
 
char * xDataXML_getAttributesValue (xDataXML_attributionList *attributes, char const *name)
 
char const * xDataXML_getAttributesValueInElement (xDataXML_element *element, char const *name)
 
int xDataXML_getCommonData (statusMessageReporting *smr, xDataXML_element *element, xDataTOM_Int *index, xDataTOM_Int *start, xDataTOM_Int *end, xDataTOM_Int *length)
 
xDataXML_elementxDataXML_getDocumentsElement (xDataXML_document *doc)
 
xDataXML_elementListxDataXML_getElementsByTagName (statusMessageReporting *smr, xDataXML_element *element, char const *tagName)
 
xDataXML_documentxDataXML_getElementsDocument (xDataXML_element *element)
 
char const * xDataXML_getFileName (xDataXML_document *doc)
 
xDataXML_elementxDataXML_getFirstElement (xDataXML_element *element)
 
enum xDataXML_itemMode xDataXML_getFirstItem (xDataXML_element *element, xDataXML_item *item)
 
xDataXML_elementxDataXML_getNextElement (xDataXML_element *element)
 
enum xDataXML_itemMode xDataXML_getNextItem (xDataXML_item *item)
 
xDataXML_elementxDataXML_getOneElementByTagName (statusMessageReporting *smr, xDataXML_element *element, char *name, int required)
 
char const * xDataXML_getRealFileName (xDataXML_document *doc)
 
static char * xDataXML_getTraceback (statusMessageReporting *smr, xDataXML_element *element)
 
static char * xDataXML_getTraceback2 (statusMessageReporting *smr, xDataXML_rootElement *parentRoot, int n)
 
xDataTOM_TOMxDataXML_importFile (statusMessageReporting *smr, char const *fileName)
 
xDataXML_documentxDataXML_importFile2 (statusMessageReporting *smr, char const *fileName)
 
static int xDataXML_init_xDataTypeNone (xDataXMLType *xDT, xDataXML_element *element)
 
void * xDataXML_initializeData (statusMessageReporting *smr, xDataXML_element *XE, xDataTOM_element *TE, char const *ID, size_t size)
 
static int xDataXML_initializeDoc (statusMessageReporting *smr, xDataXML_document *doc)
 
static void xDataXML_initializeRootElement (xDataXML_document *doc, xDataXML_rootElement *re, xDataXML_element *parentElement, int depth)
 
int xDataXML_is_xDataType (statusMessageReporting *smr, xDataXMLType *xDT, char const *const ID, int setMsg)
 
int xDataXML_isAttributeInElement (xDataXML_element *element, char const *name)
 
int xDataXML_isAttributeInList (xDataXML_attributionList *attributes, char const *name)
 
static xDataXML_documentxDataXML_mallocDoc (statusMessageReporting *smr)
 
int xDataXML_numberOfElementsByTagName (statusMessageReporting *, xDataXML_element *element, char const *tagName)
 
static int xDataXML_parse (xDataXML_document *doc, char const *s)
 
static void XMLCALL xDataXML_parseCharacterData (void *userData, XML_Char const *s, int len)
 
static void XMLCALL xDataXML_parseEndElement (void *userData, char const *name)
 
static enum xDataXML_errorCodes xDataXML_parseGetCurrentPosition (xDataXML_document *doc, xDataXML_docInfo *docInfo)
 
static int xDataXML_parseInitializeText (xDataXML_document *doc, xDataXML_text *text)
 
int xDataXML_parseIsError (xDataXML_document *doc)
 
static void XMLCALL xDataXML_parseStartElement (void *userData, char const *name, char const **attris)
 
static int xDataXML_setFileName (statusMessageReporting *smr, xDataXML_document *doc, char const *fileName)
 
static char const * xDataXML_shortStringForMessage (size_t size, char *Out, char const *In)
 
static char * xDataXML_smrUserInterface (void *userData)
 
static int xDataXML_smrUserInterfaceFree (xDataXML_document *doc)
 
static int xDataXML_smrUserInterfaceInitialize (xDataXML_document *doc)
 
int xDataXML_stringTo_double (statusMessageReporting *smr, void *smrUserInterface, char const *c, double *value, char const *endings, char **e)
 
int xDataXML_stringTo_xDataTOM_Int (statusMessageReporting *smr, void *smrUserInterface, char const *c, xDataTOM_Int *value, char const *endings, char **e)
 
int xDataXML_xDataTypeConvertAttributes (statusMessageReporting *smr, xDataXML_element *element)
 

Macro Definition Documentation

◆ PATH_MAX

#define PATH_MAX   4096

Definition at line 33 of file xDataTOM_importXML.cc.

Function Documentation

◆ xDataXML_addElementToRoot()

static int xDataXML_addElementToRoot ( statusMessageReporting smr,
xDataXML_rootElement parentRoot,
char const *  name,
char const **  attris 
)
static

Definition at line 309 of file xDataTOM_importXML.cc.

309 {
310
311 xDataXML_document *doc = parentRoot->xData_doc;
312 xDataXML_element *element;
313 int i, n, status = 1;
314 size_t lens;
315 char *p, *e;
316 char const **pAttris;
318 void *smrUser;
319
320 element = (xDataXML_element *) smr_malloc2( doc->smr, sizeof( xDataXML_element ), 1, "xDataXML_element" );
321 if( element == NULL ) return( 1 );
322 xDataXML_parseGetCurrentPosition( doc, &(element->docInfo) );
323 element->ordinal = parentRoot->numberOfElements;
324 element->index = -1;
325 element->accessed = 0;
326 element->parentRoot = parentRoot;
327 xDataXML_initializeRootElement( doc, &(element->childrenRoot), element, parentRoot->depth + 1 );
328 element->next = NULL;
329 if( ( element->name = (char *) smr_malloc2( doc->smr, strlen( name ) + 1, 0, "name" ) ) == NULL ) {
330 smr_freeMemory( (void **) &element );
331 return( 1 );
332 }
333 strcpy( element->name, name );
334 if( ( element->fullName = xDataXML_getTraceback( smr, element ) ) == NULL ) {
335 smr_freeMemory( (void **) &(element->name) );
336 smr_freeMemory( (void **) &element );
337 return( 1 );
338 }
339 for( i = 0, lens = 0, pAttris = attris; *pAttris; i++, pAttris++ ) lens += strlen( *pAttris ) + 1;
340 n = i / 2;
341 element->attributes.size = n * sizeof( xDataXML_attribute ) + lens;
342 element->attributes.number = n;
343 element->attributes.attributes = NULL;
344 smrUser = xDataXML_get_smrUserInterfaceFromElement( element );
345 if( element->attributes.size ) {
346 if( ( element->attributes.attributes = (xDataXML_attribute *) smr_malloc2( doc->smr, element->attributes.size, 0, "attributes") ) == NULL ) {
347 status = 0; }
348 else {
349 a = element->attributes.attributes;
350 p = (char *) &(element->attributes.attributes[n]);
351 for( i = 0, pAttris = attris; ( i < n ) && status; i++, a++, pAttris++ ) {
352 lens = strlen( *pAttris ) + 1;
353 a->name = p;
354 strcpy( p, *pAttris );
355 p += lens;
356 pAttris++;
357 lens = strlen( *pAttris ) + 1;
358 a->value= p;
359 strcpy( p, *pAttris );
360 p += lens;
361 if( !strcmp( "index", a->name ) ) {
362 element->index = (int) strtoll( a->value, &e, 10 );
363 if( *e != 0 ) {
364 status = 0;
365 smr_setReportError3( doc->smr, smrUser, xDataTOM_smrLibraryID, -1, "could not convert index attribute = %s to integer", a->value );
366 }
367 }
368 }
369 }
370 }
371 if( !status ) {
372 smr_freeMemory( (void **) &(element->attributes.attributes) );
373 smr_freeMemory( (void **) &(element->name) );
374 smr_freeMemory( (void **) &(element->fullName) );
375 smr_freeMemory( (void **) &element );
376 return( 1 );
377 }
378 xDataXML_init_xDataTypeNone( &(element->xDataTypeInfo), element );
379 element->textOffset = 0;
380 xDataXML_parseInitializeText( doc, &(element->text) );
381 if( parentRoot->parentElement != NULL ) element->textOffset = parentRoot->parentElement->text.length;
382 if( parentRoot->currentChild == NULL ) {
383 parentRoot->children = element; }
384 else {
385 parentRoot->currentChild->next = element;
386 }
387 parentRoot->numberOfElements++;
388 parentRoot->currentChild = element;
389 doc->currentRoot = &(element->childrenRoot);
390 return( 0 );
391}
const char * name(G4int ptype)
#define smr_setReportError3(smr, userInterface, libraryID, code, fmt,...)
void * smr_freeMemory(void **p)
#define smr_malloc2(smr, size, zero, forItem)
statusMessageReporting * smr
xDataXML_rootElement * currentRoot
xDataXML_rootElement childrenRoot
xDataXML_attributionList attributes
xDataXML_rootElement * parentRoot
static int xDataXML_parseInitializeText(xDataXML_document *doc, xDataXML_text *text)
static enum xDataXML_errorCodes xDataXML_parseGetCurrentPosition(xDataXML_document *doc, xDataXML_docInfo *docInfo)
void * xDataXML_get_smrUserInterfaceFromElement(xDataXML_element *element)
static int xDataXML_init_xDataTypeNone(xDataXMLType *xDT, xDataXML_element *element)
static char * xDataXML_getTraceback(statusMessageReporting *smr, xDataXML_element *element)
static void xDataXML_initializeRootElement(xDataXML_document *doc, xDataXML_rootElement *re, xDataXML_element *parentElement, int depth)
struct xDataXML_attribute_s xDataXML_attribute
int xDataTOM_smrLibraryID
Definition: xDataTOM.cc:34

References xDataXML_element_s::accessed, xDataXML_attributionList_s::attributes, xDataXML_element_s::attributes, xDataXML_rootElement_s::children, xDataXML_element_s::childrenRoot, xDataXML_rootElement_s::currentChild, xDataXML_document_s::currentRoot, xDataXML_rootElement_s::depth, xDataXML_element_s::docInfo, xDataXML_element_s::fullName, xDataXML_element_s::index, xDataXML_text_s::length, CLHEP::detail::n, G4InuclParticleNames::name(), xDataXML_attribute_s::name, xDataXML_element_s::name, xDataXML_element_s::next, xDataXML_attributionList_s::number, xDataXML_rootElement_s::numberOfElements, xDataXML_element_s::ordinal, xDataXML_rootElement_s::parentElement, xDataXML_element_s::parentRoot, xDataXML_attributionList_s::size, xDataXML_document_s::smr, smr_freeMemory(), smr_malloc2, smr_setReportError3, xDataXML_element_s::text, xDataXML_element_s::textOffset, xDataXML_rootElement_s::xData_doc, xDataTOM_smrLibraryID, xDataXML_element_s::xDataTypeInfo, xDataXML_get_smrUserInterfaceFromElement(), xDataXML_getTraceback(), xDataXML_init_xDataTypeNone(), xDataXML_initializeRootElement(), xDataXML_parseGetCurrentPosition(), and xDataXML_parseInitializeText().

Referenced by xDataXML_parseStartElement().

◆ xDataXML_addToAccessed()

int xDataXML_addToAccessed ( statusMessageReporting smr,
xDataXML_element element,
int  increment 
)

Definition at line 923 of file xDataTOM_importXML.cc.

923 {
924
925 element->accessed += increment;
926 return( element->accessed );
927}

References xDataXML_element_s::accessed.

◆ xDataXML_attributeByIndex()

xDataXML_attribute * xDataXML_attributeByIndex ( xDataXML_attributionList attributes,
int  index 
)

Definition at line 510 of file xDataTOM_importXML.cc.

510 {
511
512 if( index >= attributes->number ) return( NULL );
513 return( &(attributes->attributes[index]) );
514}

References xDataXML_attributionList_s::attributes, and xDataXML_attributionList_s::number.

Referenced by MCGIDI_misc_copyXMLAttributesToTOM(), and xDataXML_constructTOM().

◆ xDataXML_attributeListLength()

int xDataXML_attributeListLength ( xDataXML_attributionList attributes)

Definition at line 503 of file xDataTOM_importXML.cc.

503 {
504
505 return( attributes->number );
506}

References xDataXML_attributionList_s::number.

◆ xDataXML_constructTOM()

static int xDataXML_constructTOM ( statusMessageReporting smr,
xDataTOM_element TE,
xDataXML_element element 
)
static

Definition at line 951 of file xDataTOM_importXML.cc.

951 {
952
953 int i, status = 0;
954 xDataTOM_element *TOMChild;
955 xDataXML_element *XMLChild;
956 xDataXML_attribute *attribute;
957 char const *xDataValue = xDataXML_getAttributesValueInElement( XE, "xData" );
958
959 if( !smr_isOk( smr ) ) return( 1 );
960 if( ( TOMChild = xDataTOM_addElementInElement( smr, TE, XE->index, XE->name ) ) == NULL ) return( 1 );
961 for( i = 0; 1; i++ ) {
962 if( ( attribute = xDataXML_attributeByIndex( &(XE->attributes), i ) ) == NULL ) break;
963 if( xDataTOME_addAttribute( smr, TOMChild, attribute->name, attribute->value ) != 0 ) return( 1 );
964 }
965
966 if( !strcmp( XE->name, xDataTOM_KalbachMann_ID ) ) {
967 xDataValue = xDataTOM_KalbachMann_ID;
968 }
969
970 if( xDataValue == NULL ) {
971 for( XMLChild = xDataXML_getFirstElement( XE ); ( status == 0 ) && ( XMLChild != NULL ); XMLChild = xDataXML_getNextElement( XMLChild ) ) {
972 status = xDataXML_constructTOM( smr, TOMChild, XMLChild );
973 } }
974 else {
975 if( strcmp( xDataValue, xDataTOM_XYs_ID ) == 0 ) {
976 status = xDataXML_XYsToTOM( smr, XE, TOMChild ); }
977 else if( strcmp( xDataValue, xDataTOM_regionsXYs_ID ) == 0 ) {
978 status = xDataXML_regionsXYsToTOM( smr, XE, TOMChild ); }
979 else if( strcmp( xDataValue, xDataTOM_W_XYs_ID ) == 0 ) {
980 status = xDataXML_W_XYsToTOM( smr, XE, TOMChild ); }
981 else if( strcmp( xDataValue, xDataTOM_V_W_XYs_ID ) == 0 ) {
982 status = xDataXML_V_W_XYsToTOM( smr, XE, TOMChild ); }
983 else if( strcmp( xDataValue, xDataTOM_W_XYs_LegendreSeries_ID ) == 0 ) {
984 status = xDataXML_W_XYs_LegendreSeriesToTOM( smr, XE, TOMChild ); }
985 else if( strcmp( xDataValue, xDataTOM_regionsW_XYs_LegendreSeries_ID ) == 0 ) {
986 status = xDataXML_regionsW_XYs_LegendreSeriesToTOM( smr, XE, TOMChild ); }
987 else if( strcmp( xDataValue, xDataTOM_V_W_XYs_LegendreSeries_ID ) == 0 ) {
988 status = xDataXML_V_W_XYs_LegendreSeriesToTOM( smr, XE, TOMChild ); }
989 else if( strcmp( xDataValue, xDataTOM_KalbachMann_ID ) == 0 ) {
990 status = xDataXML_KalbachMannToTOM( smr, XE, TOMChild ); }
991 else if( strcmp( xDataValue, xDataTOM_polynomial_ID ) == 0 ) {
992 status = xDataXML_polynomialToTOM( smr, XE, TOMChild ); }
993 else {
994 printf( "Unsupported xData type '%s' in element '%s'\n", xDataValue, XE->name );
995#if 0
997 "Unsupported xData type = \"%s\"", xDataValue );
998 status = 1;
999#endif
1000 }
1001 }
1002 return( status );
1003}
int smr_isOk(statusMessageReporting *smr)
int xDataTOME_addAttribute(statusMessageReporting *smr, xDataTOM_element *element, char const *name, char const *value)
Definition: xDataTOM.cc:279
xDataTOM_element * xDataTOM_addElementInElement(statusMessageReporting *smr, xDataTOM_element *parent, int index, char const *name)
Definition: xDataTOM.cc:188
static int xDataXML_constructTOM(statusMessageReporting *smr, xDataTOM_element *TE, xDataXML_element *element)
xDataXML_element * xDataXML_getNextElement(xDataXML_element *element)
char const * xDataXML_getAttributesValueInElement(xDataXML_element *element, char const *name)
xDataXML_element * xDataXML_getFirstElement(xDataXML_element *element)
xDataXML_attribute * xDataXML_attributeByIndex(xDataXML_attributionList *attributes, int index)
int xDataXML_KalbachMannToTOM(statusMessageReporting *smr, xDataXML_element *XE, xDataTOM_element *TE)
int xDataXML_regionsW_XYs_LegendreSeriesToTOM(statusMessageReporting *smr, xDataXML_element *XE, xDataTOM_element *TE)
int xDataXML_polynomialToTOM(statusMessageReporting *smr, xDataXML_element *XE, xDataTOM_element *TE)
int xDataXML_W_XYs_LegendreSeriesToTOM(statusMessageReporting *smr, xDataXML_element *XE, xDataTOM_element *TE)
int xDataXML_XYsToTOM(statusMessageReporting *smr, xDataXML_element *XE, xDataTOM_element *TE)
int xDataXML_V_W_XYs_LegendreSeriesToTOM(statusMessageReporting *smr, xDataXML_element *XE, xDataTOM_element *TE)
int xDataXML_W_XYsToTOM(statusMessageReporting *smr, xDataXML_element *XE, xDataTOM_element *TE)
int xDataXML_regionsXYsToTOM(statusMessageReporting *smr, xDataXML_element *XE, xDataTOM_element *TE)
int xDataXML_V_W_XYsToTOM(statusMessageReporting *smr, xDataXML_element *XE, xDataTOM_element *TE)
char const * xDataTOM_KalbachMann_ID
char const * xDataTOM_V_W_XYs_ID
char const * xDataTOM_regionsW_XYs_LegendreSeries_ID
char const * xDataTOM_polynomial_ID
char const * xDataTOM_W_XYs_ID
char const * xDataTOM_regionsXYs_ID
char const * xDataTOM_W_XYs_LegendreSeries_ID
char const * xDataTOM_XYs_ID
Definition: xDataTOM_XYs.cc:14
char const * xDataTOM_V_W_XYs_LegendreSeries_ID

References xDataXML_element_s::attributes, xDataXML_element_s::index, xDataXML_attribute_s::name, xDataXML_element_s::name, smr_isOk(), smr_setReportError3, xDataXML_attribute_s::value, xDataTOM_addElementInElement(), xDataTOM_KalbachMann_ID, xDataTOM_polynomial_ID, xDataTOM_regionsW_XYs_LegendreSeries_ID, xDataTOM_regionsXYs_ID, xDataTOM_smrLibraryID, xDataTOM_V_W_XYs_ID, xDataTOM_V_W_XYs_LegendreSeries_ID, xDataTOM_W_XYs_ID, xDataTOM_W_XYs_LegendreSeries_ID, xDataTOM_XYs_ID, xDataTOME_addAttribute(), xDataXML_attributeByIndex(), xDataXML_constructTOM(), xDataXML_get_smrUserInterfaceFromElement(), xDataXML_getAttributesValueInElement(), xDataXML_getFirstElement(), xDataXML_getNextElement(), xDataXML_KalbachMannToTOM(), xDataXML_polynomialToTOM(), xDataXML_regionsW_XYs_LegendreSeriesToTOM(), xDataXML_regionsXYsToTOM(), xDataXML_V_W_XYs_LegendreSeriesToTOM(), xDataXML_V_W_XYsToTOM(), xDataXML_W_XYs_LegendreSeriesToTOM(), xDataXML_W_XYsToTOM(), and xDataXML_XYsToTOM().

Referenced by xDataXML_constructTOM(), and xDataXML_importFile().

◆ xDataXML_convertAttributeTo_xDataTOM_Int()

xDataTOM_Int xDataXML_convertAttributeTo_xDataTOM_Int ( statusMessageReporting smr,
xDataXML_element element,
char const *  name,
xDataTOM_Int n,
int  required 
)

Definition at line 599 of file xDataTOM_importXML.cc.

599 {
600/*
601* Returns 1 if no such attribute, -1 if error converting to xDataTOM_Int and 0 if successful.
602*/
603 char const *value;
604 char *e;
605
606 if( ( value = xDataXML_getAttributesValueInElement( element, name ) ) == NULL ) {
608 "missing required attribute '%s'", name );
609 return( 1 );
610 }
611 *n = (xDataTOM_Int) strtoll( value, &e, 10 );
612 if( *e != 0 ) {
614 "could not convert attribute %s's value = %s to an integer", name, value );
615 return( -1 );
616 }
617 return( 0 );
618}
int xDataTOM_Int
Definition: xDataTOM.h:16

References CLHEP::detail::n, G4InuclParticleNames::name(), geant4_check_module_cycles::required, smr_setReportError3, xDataTOM_smrLibraryID, xDataXML_get_smrUserInterfaceFromElement(), and xDataXML_getAttributesValueInElement().

Referenced by xDataXML_axesToTOM(), xDataXML_KalbachMannCoefficientsToTOM(), xDataXML_polynomialToTOM(), xDataXML_regionsW_XYs_LegendreSeries_regionToTOM(), xDataXML_regionsXYs_regionToTOM(), xDataXML_V_W_XYs_LegendreSeries_W_XYs_LegendreSeriesToTOM(), xDataXML_V_W_XYs_W_XYsToTOM(), xDataXML_W_XYs_LegendreSeries_LegendreSeriesToTOM(), xDataXML_W_XYs_XYsToTOM(), xDataXML_xDataTypeConvertAttributes(), and xDataXML_XYsToTOM().

◆ xDataXML_convertAttributeToDouble()

int xDataXML_convertAttributeToDouble ( statusMessageReporting smr,
xDataXML_element element,
char const *  name,
double *  d,
int  required 
)

Definition at line 622 of file xDataTOM_importXML.cc.

622 {
623/*
624* Returns 1 if no such attribute, -1 if error converting to double and 0 if successful.
625*/
626 char const *value;
627 char *e;
628
629 if( ( value = xDataXML_getAttributesValueInElement( element, name ) ) == NULL ) {
631 "missing required attribute '%s'", name );
632 return( 1 );
633 }
634 *d = strtod( value, &e );
635 if( *e != 0 ) {
637 "could not convert attribute %s's values = %s to a double", name, value );
638 return( -1 );
639 }
640 return( 0 );
641}

References G4InuclParticleNames::name(), geant4_check_module_cycles::required, smr_setReportError3, xDataTOM_smrLibraryID, xDataXML_get_smrUserInterfaceFromElement(), and xDataXML_getAttributesValueInElement().

Referenced by MCGIDI_target_read(), xDataXML_KalbachMannCoefficientsToTOM(), xDataXML_regionsXYs_regionToTOM(), xDataXML_V_W_XYs_LegendreSeries_W_XYs_LegendreSeriesToTOM(), xDataXML_V_W_XYs_W_XYsToTOM(), xDataXML_W_XYs_LegendreSeries_LegendreSeriesToTOM(), xDataXML_W_XYs_XYsToTOM(), and xDataXML_XYsToTOM().

◆ xDataXML_endXMLParsing()

static int xDataXML_endXMLParsing ( statusMessageReporting smr,
xDataXML_document doc 
)
static

Definition at line 165 of file xDataTOM_importXML.cc.

165 {
166
167 if( doc->xmlParser ) {
168 doc->err = XML_GetErrorCode( doc->xmlParser );
171 if( smr_isOk( smr ) && ( XML_Parse( doc->xmlParser, NULL, 0, 1 ) == XML_STATUS_ERROR ) ) {
174 "status = %d\nXML_Error code = %d\nXML_ErrorString = %s\nerror line, column = %d, %d", xDataXML_errXMLParser,
175 doc->err, XML_ErrorString( doc->err ), doc->err_line, doc->err_column );
176 }
178 doc->xmlParser = NULL;
180 }
181 return( 0 );
182}
XML_GetErrorCode(XML_Parser parser)
Definition: xmlparse.cc:1841
XML_ParserFree(XML_Parser parser)
Definition: xmlparse.cc:1136
XML_Parse(XML_Parser parser, const char *s, int len, int isFinal)
Definition: xmlparse.cc:1506
XML_ErrorString(enum XML_Error code)
Definition: xmlparse.cc:1934
@ XML_STATUS_ERROR
Definition: expat.h:46
void * xDataXML_get_smrUserInterfaceFromDocument(xDataXML_document *doc)
@ xDataXML_statusError
@ xDataXML_statusCompleted
@ xDataXML_errXMLParser
XML_Size XMLCALL XML_GetCurrentColumnNumber(XML_Parser parser)
Definition: xmlparse.cc:1886
XML_Size XMLCALL XML_GetCurrentLineNumber(XML_Parser parser)
Definition: xmlparse.cc:1876

References xDataXML_document_s::err, xDataXML_document_s::err_column, xDataXML_document_s::err_line, smr_isOk(), smr_setReportError3, xDataXML_document_s::status, xDataTOM_smrLibraryID, xDataXML_errXMLParser, xDataXML_get_smrUserInterfaceFromDocument(), xDataXML_statusCompleted, xDataXML_statusError, XML_ErrorString(), XML_GetCurrentColumnNumber(), XML_GetCurrentLineNumber(), XML_GetErrorCode(), XML_Parse(), XML_ParserFree(), XML_STATUS_ERROR, and xDataXML_document_s::xmlParser.

Referenced by xDataXML_freeDoc(), and xDataXML_importFile2().

◆ xDataXML_freeDoc()

void * xDataXML_freeDoc ( statusMessageReporting smr,
xDataXML_document doc 
)

Definition at line 186 of file xDataTOM_importXML.cc.

186 {
187
188 xDataXML_endXMLParsing( smr, doc );
190 smr_freeMemory( (void **) &(doc->fileName) );
191 smr_freeMemory( (void **) &(doc->realFileName) );
193 smr_freeMemory( (void **) &doc );
194 return( NULL );
195}
static void * xDataXML_freeElement(statusMessageReporting *smr, xDataXML_element *element)
static int xDataXML_endXMLParsing(statusMessageReporting *smr, xDataXML_document *doc)
static int xDataXML_smrUserInterfaceFree(xDataXML_document *doc)

References xDataXML_rootElement_s::children, xDataXML_document_s::fileName, xDataXML_document_s::realFileName, xDataXML_document_s::root, smr_freeMemory(), xDataXML_endXMLParsing(), xDataXML_freeElement(), and xDataXML_smrUserInterfaceFree().

Referenced by MCGIDI_map_readFile(), MCGIDI_target_read(), xDataXML_importFile(), xDataXML_importFile2(), and xDataXML_mallocDoc().

◆ xDataXML_freeElement()

static void * xDataXML_freeElement ( statusMessageReporting smr,
xDataXML_element element 
)
static

Definition at line 199 of file xDataTOM_importXML.cc.

199 {
200
201 xDataXML_element *next;
202
203 for( ; element != NULL; element = next ) {
204 next = element->next;
205 xDataXML_freeElementItems( smr, element );
206 smr_freeMemory( (void **) &element );
207 }
208 return( NULL );
209}
static void xDataXML_freeElementItems(statusMessageReporting *smr, xDataXML_element *element)

References xDataXML_element_s::next, smr_freeMemory(), and xDataXML_freeElementItems().

Referenced by xDataXML_freeDoc(), and xDataXML_freeElementItems().

◆ xDataXML_freeElementItems()

static void xDataXML_freeElementItems ( statusMessageReporting smr,
xDataXML_element element 
)
static

Definition at line 213 of file xDataTOM_importXML.cc.

213 {
214
216/* BRB, The next line needs work */
217 if( ( !strcmp( element->name, "xData" ) ) && ( element->xDataTypeInfo.release != NULL ) ) element->xDataTypeInfo.release( smr, &(element->xDataTypeInfo) );
218 smr_freeMemory( (void **) &(element->name) );
219 smr_freeMemory( (void **) &(element->fullName) );
220 if( element->attributes.attributes ) smr_freeMemory( (void **) &(element->attributes.attributes) );
221 if( element->text.text ) smr_freeMemory( (void **) &(element->text.text) );
222}
xDTXML_releaseFunction release

References xDataXML_attributionList_s::attributes, xDataXML_element_s::attributes, xDataXML_rootElement_s::children, xDataXML_element_s::childrenRoot, xDataXML_element_s::fullName, xDataXML_element_s::name, xDataXMLType_s::release, smr_freeMemory(), xDataXML_text_s::text, xDataXML_element_s::text, xDataXML_element_s::xDataTypeInfo, and xDataXML_freeElement().

Referenced by xDataXML_freeElement().

◆ xDataXML_freeElementList()

void xDataXML_freeElementList ( statusMessageReporting smr,
xDataXML_elementList list 
)

Definition at line 704 of file xDataTOM_importXML.cc.

704 {
705
706 smr_freeMemory( (void **) &list );
707}

References smr_freeMemory().

Referenced by xDataXML_getOneElementByTagName().

◆ xDataXML_get_smrUserInterfaceFromDocument()

void * xDataXML_get_smrUserInterfaceFromDocument ( xDataXML_document doc)

Definition at line 806 of file xDataTOM_importXML.cc.

806 {
807
808 if( doc == NULL ) return( NULL );
809 return( &(doc->smrUserInterface ) );
810}

References xDataXML_document_s::smrUserInterface.

Referenced by xDataXML_endXMLParsing(), and xDataXML_get_smrUserInterfaceFromElement().

◆ xDataXML_get_smrUserInterfaceFromElement()

void * xDataXML_get_smrUserInterfaceFromElement ( xDataXML_element element)

◆ xDataXML_getAccessed()

int xDataXML_getAccessed ( statusMessageReporting smr,
xDataXML_element element 
)

Definition at line 931 of file xDataTOM_importXML.cc.

931 {
932
933 return( element->accessed );
934}

References xDataXML_element_s::accessed.

◆ xDataXML_getAttributesValue()

char * xDataXML_getAttributesValue ( xDataXML_attributionList attributes,
char const *  name 
)

Definition at line 484 of file xDataTOM_importXML.cc.

484 {
485
486 int i;
487
488 for( i = 0; i < attributes->number; i++ ) {
489 if( !strcmp( attributes->attributes[i].name, name ) ) return( attributes->attributes[i].value );
490 }
491 return( NULL );
492}

References xDataXML_attributionList_s::attributes, G4InuclParticleNames::name(), xDataXML_attribute_s::name, xDataXML_attributionList_s::number, and xDataXML_attribute_s::value.

Referenced by xDataXML_getAttributesValueInElement().

◆ xDataXML_getAttributesValueInElement()

char const * xDataXML_getAttributesValueInElement ( xDataXML_element element,
char const *  name 
)

◆ xDataXML_getCommonData()

int xDataXML_getCommonData ( statusMessageReporting smr,
xDataXML_element element,
xDataTOM_Int index,
xDataTOM_Int start,
xDataTOM_Int end,
xDataTOM_Int length 
)

Definition at line 540 of file xDataTOM_importXML.cc.

541 {
542
543 if( element->xDataTypeInfo.ID == NULL ) {
545 "element %s is not xData", element->fullName );
546 return( 1 );
547 }
548 *index = element->xDataTypeInfo.index;
549 *start = element->xDataTypeInfo.start;
550 *end = element->xDataTypeInfo.end;
551 *length = element->xDataTypeInfo.length;
552 return( 0 );
553}

References xDataXMLType_s::end, xDataXML_element_s::fullName, xDataXMLType_s::ID, xDataXMLType_s::index, xDataXMLType_s::length, smr_setReportError3, xDataXMLType_s::start, xDataTOM_smrLibraryID, xDataXML_element_s::xDataTypeInfo, and xDataXML_get_smrUserInterfaceFromElement().

◆ xDataXML_getDocumentsElement()

xDataXML_element * xDataXML_getDocumentsElement ( xDataXML_document doc)

◆ xDataXML_getElementsByTagName()

xDataXML_elementList * xDataXML_getElementsByTagName ( statusMessageReporting smr,
xDataXML_element element,
char const *  tagName 
)

Definition at line 656 of file xDataTOM_importXML.cc.

656 {
657
658 int n = xDataXML_numberOfElementsByTagName( smr, element, tagName );
659 size_t size;
660 xDataXML_element *child;
662 xDataXML_elementList *list = NULL;
663
664
665 size = sizeof( xDataXML_elementList ) + n * sizeof( xDataXML_elementListItem );
666 if( ( list = (xDataXML_elementList *) smr_malloc2( smr, size, 0, "list" ) ) != NULL ) {
667 list->n = n;
668 p = list->items = (xDataXML_elementListItem *) &(list[1]);
669 for( child = xDataXML_getFirstElement( element ); child != NULL; child = xDataXML_getNextElement( child ) ) {
670 if( !strcmp( child->name, tagName ) ) {
671 p->element = child;
672 p->sortString = NULL;
673 p++;
674 }
675 }
676 }
677 return( list );
678}
xDataXML_elementListItem * items
int xDataXML_numberOfElementsByTagName(statusMessageReporting *, xDataXML_element *element, char const *tagName)
struct xDataXML_elementList_s xDataXML_elementList

References xDataXML_elementListItem_s::element, xDataXML_elementList_s::items, CLHEP::detail::n, xDataXML_elementList_s::n, xDataXML_element_s::name, smr_malloc2, xDataXML_elementListItem_s::sortString, xDataXML_getFirstElement(), xDataXML_getNextElement(), and xDataXML_numberOfElementsByTagName().

Referenced by xDataXML_getOneElementByTagName().

◆ xDataXML_getElementsDocument()

xDataXML_document * xDataXML_getElementsDocument ( xDataXML_element element)

Definition at line 796 of file xDataTOM_importXML.cc.

796 {
797
798 xDataXML_rootElement* root = element->parentRoot;
799
800 while( root->parentRoot != NULL ) root = root->parentRoot; // Loop checking, 11.06.2015, T. Koi
801 return( root->xData_doc );
802}
xDataXML_rootElement * parentRoot

References xDataXML_rootElement_s::parentRoot, xDataXML_element_s::parentRoot, and xDataXML_rootElement_s::xData_doc.

Referenced by xDataXML_get_smrUserInterfaceFromElement().

◆ xDataXML_getFileName()

char const * xDataXML_getFileName ( xDataXML_document doc)

Definition at line 765 of file xDataTOM_importXML.cc.

765 {
766
767 return( doc->fileName );
768}

References xDataXML_document_s::fileName.

◆ xDataXML_getFirstElement()

xDataXML_element * xDataXML_getFirstElement ( xDataXML_element element)

◆ xDataXML_getFirstItem()

enum xDataXML_itemMode xDataXML_getFirstItem ( xDataXML_element element,
xDataXML_item item 
)

Definition at line 417 of file xDataTOM_importXML.cc.

417 {
418
419 item->parentElement = element;
420 item->element = xDataXML_getFirstElement( element );
421 if( item->element == NULL ) {
423 if( element->text.length == 0 ) item->mode = xDataXML_itemModeEnd; }
424 else {
426 if( 0 < item->element->textOffset ) item->mode = xDataXML_itemModeText;
427 }
428 item->textOffset = 0;
429 item->textLength = element->text.length;
430 if( item->element != NULL ) item->textLength = item->element->textOffset;
431 item->text = element->text.text;
432 return( item->mode );
433}
xDataXML_element * element
enum xDataXML_itemMode mode
xDataXML_element * parentElement
@ xDataXML_itemModeText
@ xDataXML_itemModeElement
@ xDataXML_itemModeEnd

References xDataXML_item_s::element, xDataXML_text_s::length, xDataXML_item_s::mode, xDataXML_item_s::parentElement, xDataXML_text_s::text, xDataXML_element_s::text, xDataXML_item_s::text, xDataXML_item_s::textLength, xDataXML_element_s::textOffset, xDataXML_item_s::textOffset, xDataXML_getFirstElement(), xDataXML_itemModeElement, xDataXML_itemModeEnd, and xDataXML_itemModeText.

◆ xDataXML_getNextElement()

xDataXML_element * xDataXML_getNextElement ( xDataXML_element element)

◆ xDataXML_getNextItem()

enum xDataXML_itemMode xDataXML_getNextItem ( xDataXML_item item)

Definition at line 437 of file xDataTOM_importXML.cc.

437 {
438
439 if( item->mode != xDataXML_itemModeEnd ) {
440 if( item->mode == xDataXML_itemModeText ) {
442 if( item->element == NULL ) item->mode = xDataXML_itemModeEnd;
443 item->textOffset += item->textLength;
444 item->textLength = 0;
445 item->text = &(item->parentElement->text.text[item->textOffset]); }
446 else {
447 item->element = item->element->next;
449 if( item->element == NULL ) {
450 if( item->textOffset < item->parentElement->text.length ) {
451 item->textLength = item->parentElement->text.length - item->textOffset; }
452 else {
454 } }
455 else {
456 item->textLength = item->element->textOffset - item->textOffset;
457 }
458 }
459 }
460 return( item->mode );
461}

References xDataXML_item_s::element, xDataXML_text_s::length, xDataXML_item_s::mode, xDataXML_element_s::next, xDataXML_item_s::parentElement, xDataXML_text_s::text, xDataXML_element_s::text, xDataXML_item_s::text, xDataXML_item_s::textLength, xDataXML_element_s::textOffset, xDataXML_item_s::textOffset, xDataXML_itemModeElement, xDataXML_itemModeEnd, and xDataXML_itemModeText.

◆ xDataXML_getOneElementByTagName()

xDataXML_element * xDataXML_getOneElementByTagName ( statusMessageReporting smr,
xDataXML_element element,
char *  name,
int  required 
)

Definition at line 682 of file xDataTOM_importXML.cc.

682 {
683
685 xDataXML_element *xData = NULL;
686
687 if( ( list = xDataXML_getElementsByTagName( smr, element, name ) ) != NULL ) {
688 if( list->n == 0 ) {
690 1, "element %s does not have sub-element named %s", element->fullName, name ); }
691 else if( list->n > 1 ) {
693 "element %s contains more than one sub-element named %s", element->fullName, name ); }
694 else {
695 xData = list->items[0].element;
696 }
697 xDataXML_freeElementList( smr, list );
698 }
699 return( xData );
700}
xDataXML_elementList * xDataXML_getElementsByTagName(statusMessageReporting *smr, xDataXML_element *element, char const *tagName)
void xDataXML_freeElementList(statusMessageReporting *, xDataXML_elementList *list)

References xDataXML_elementListItem_s::element, xDataXML_element_s::fullName, xDataXML_elementList_s::items, xDataXML_elementList_s::n, G4InuclParticleNames::name(), geant4_check_module_cycles::required, smr_setReportError3, xDataTOM_smrLibraryID, xDataXML_freeElementList(), xDataXML_get_smrUserInterfaceFromElement(), and xDataXML_getElementsByTagName().

◆ xDataXML_getRealFileName()

char const * xDataXML_getRealFileName ( xDataXML_document doc)

Definition at line 772 of file xDataTOM_importXML.cc.

772 {
773
774 return( doc->realFileName );
775}

References xDataXML_document_s::realFileName.

◆ xDataXML_getTraceback()

static char * xDataXML_getTraceback ( statusMessageReporting smr,
xDataXML_element element 
)
static

Definition at line 711 of file xDataTOM_importXML.cc.

711 {
712/*
713* Returned string must be freed by calling routine.
714*/
715 int size;
716 char *s, *name;
717
718 name = element->name;
719 size = (int) strlen( name ) + 1;
720 if( ( s = xDataXML_getTraceback2( smr, element->parentRoot, size ) ) != NULL ) {
721 strcat( s, "/" );
722 strcat( s, name );
723 }
724 return( s );
725}
static constexpr double s
Definition: G4SIunits.hh:154
static char * xDataXML_getTraceback2(statusMessageReporting *smr, xDataXML_rootElement *parentRoot, int n)

References G4InuclParticleNames::name(), xDataXML_element_s::name, xDataXML_element_s::parentRoot, s, and xDataXML_getTraceback2().

Referenced by xDataXML_addElementToRoot().

◆ xDataXML_getTraceback2()

static char * xDataXML_getTraceback2 ( statusMessageReporting smr,
xDataXML_rootElement parentRoot,
int  n 
)
static

Definition at line 729 of file xDataTOM_importXML.cc.

729 {
730
731 int size;
732 char *s, *name;
733
734 if( parentRoot->parentRoot == NULL ) {
735 s = (char *) smr_malloc2( smr, n + 1, 0, "traceback string" );
736 *s = 0; }
737 else {
738 name = parentRoot->parentElement->name;
739 size = (int) strlen( name ) + 1;
740 n += size;
741 if( ( s = xDataXML_getTraceback2( smr, parentRoot->parentRoot, n ) ) != NULL ) {
742 strcat( s, "/" );
743 strcat( s, name );
744 }
745 }
746 return( s );
747}

References CLHEP::detail::n, G4InuclParticleNames::name(), xDataXML_element_s::name, xDataXML_rootElement_s::parentElement, xDataXML_rootElement_s::parentRoot, s, smr_malloc2, and xDataXML_getTraceback2().

Referenced by xDataXML_getTraceback(), and xDataXML_getTraceback2().

◆ xDataXML_importFile()

xDataTOM_TOM * xDataXML_importFile ( statusMessageReporting smr,
char const *  fileName 
)

Definition at line 63 of file xDataTOM_importXML.cc.

63 {
64/*
65* Returns NULL is any error occurred. If an error occurs in an expat routine, xDataXML_endXMLParsing will set smr appropriately.
66*/
67 xDataTOM_TOM *TOM = NULL;
68 xDataXML_document *XML = NULL;
69 xDataXML_element *element;
70
71 if( ( XML = xDataXML_importFile2( smr, fileName ) ) == NULL ) return( NULL );
72
73 if( ( TOM = xDataTOM_mallocTOM( smr ) ) == NULL ) goto Err;
74 if( xDataTOM_setFileNameTOM( smr, TOM, fileName ) != 0 ) goto Err;
75
76 element = xDataXML_getDocumentsElement( XML );
77 if( xDataXML_constructTOM( smr, (&TOM->root), element ) != 0 ) goto Err;
78
79 xDataXML_freeDoc( smr, XML );
80 return( TOM );
81
82Err:
83 if( XML != NULL ) xDataXML_freeDoc( smr, XML );
84 if( TOM != NULL ) xDataTOM_freeTOM( smr, &TOM );
85 return( NULL );
86}
xDataTOM_element root
Definition: xDataTOM.h:193
xDataTOM_TOM * xDataTOM_mallocTOM(statusMessageReporting *smr)
Definition: xDataTOM.cc:54
int xDataTOM_setFileNameTOM(statusMessageReporting *smr, xDataTOM_TOM *doc, const char *fileName)
Definition: xDataTOM.cc:94
void * xDataTOM_freeTOM(statusMessageReporting *smr, xDataTOM_TOM **TOM)
Definition: xDataTOM.cc:78
void * xDataXML_freeDoc(statusMessageReporting *smr, xDataXML_document *doc)
xDataXML_element * xDataXML_getDocumentsElement(xDataXML_document *doc)
xDataXML_document * xDataXML_importFile2(statusMessageReporting *smr, char const *fileName)

References xDataTOM_TOM_s::root, xDataTOM_freeTOM(), xDataTOM_mallocTOM(), xDataTOM_setFileNameTOM(), xDataXML_constructTOM(), xDataXML_freeDoc(), xDataXML_getDocumentsElement(), and xDataXML_importFile2().

Referenced by xDataTOM_importFile().

◆ xDataXML_importFile2()

xDataXML_document * xDataXML_importFile2 ( statusMessageReporting smr,
char const *  fileName 
)

Definition at line 90 of file xDataTOM_importXML.cc.

90 {
91/*
92* Returns NULL is any error occurred. If an error occurs in an expat routine, xDataXML_endXMLParsing will set smr appropriately.
93*/
94 int f;
95 char buffer[10 * 1000];
96 ssize_t count, n = sizeof( buffer ) - 1;
98
99 if( ( doc = xDataXML_mallocDoc( smr ) ) == NULL ) return( NULL );
100 if( xDataXML_setFileName( smr, doc, fileName ) == 0 ) {
101 f = open( fileName, O_RDONLY );
102 if( f == -1 ) {
103 xDataXML_endXMLParsing( smr, doc );
104 smr_setReportError2( smr, xDataTOM_smrLibraryID, xDataXML_errFileError, "could not open XML file %s", fileName ); }
105 else {
106 while( ( count = read( f, buffer, n ) ) > 0 ) {
107 buffer[count] = 0;
108 if( xDataXML_parse( doc, buffer ) ) break;
109 if( !smr_isOk( doc->smr ) ) break;
110 } // Loop checking, 11.06.2015, T. Koi
111 close( f );
112 xDataXML_endXMLParsing( smr, doc );
113 if( count < 0 ) smr_setReportError2( smr, xDataTOM_smrLibraryID, xDataXML_errFileError, "read failed with errno = %d for XML %s",
114 errno, fileName );
115 }
116 }
117 if( doc != NULL ) {
118 if( !smr_isOk( smr ) ) {
119 xDataXML_freeDoc( smr, doc );
120 doc = NULL;
121 }
122 }
123 return( doc );
124}
#define smr_setReportError2(smr, libraryID, code, fmt,...)
static int xDataXML_parse(xDataXML_document *doc, char const *s)
static int xDataXML_setFileName(statusMessageReporting *smr, xDataXML_document *doc, char const *fileName)
static xDataXML_document * xDataXML_mallocDoc(statusMessageReporting *smr)
@ xDataXML_errFileError
#define buffer
Definition: xmlparse.cc:628

References buffer, CLHEP::detail::n, xDataXML_document_s::smr, smr_isOk(), smr_setReportError2, xDataTOM_smrLibraryID, xDataXML_endXMLParsing(), xDataXML_errFileError, xDataXML_freeDoc(), xDataXML_mallocDoc(), xDataXML_parse(), and xDataXML_setFileName().

Referenced by MCGIDI_map_readFile(), MCGIDI_target_read(), and xDataXML_importFile().

◆ xDataXML_init_xDataTypeNone()

static int xDataXML_init_xDataTypeNone ( xDataXMLType xDT,
xDataXML_element element 
)
static

Definition at line 518 of file xDataTOM_importXML.cc.

518 {
519
521 xDT->ID = NULL;
522 xDT->element = element;
523 xDT->toData = NULL;
524 xDT->toString = NULL;
525 xDT->release = NULL;
526 xDT->indexPresent = 1; /* The following describes the meaning of present variables. */
527 xDT->startPresent = 1; /* If < 0, an error occured in converting value to an integer. */
528 xDT->endPresent = 1; /* If > 0, not present as an attribute. */
529 xDT->lengthPresent = 1; /* Else, if 0, present and converted without an error. */
530 xDT->index = -1;
531 xDT->start = -1;
532 xDT->end = -1;
533 xDT->length = -1;
534 xDT->data = NULL;
535 return( 0 );
536}
enum xDataXML_xDataType status
xDTXML_toDataFunction toData
xDataXML_element * element
xDTXML_toStringFunction toString
@ xDataXML_xDataType_Ok

References xDataXMLType_s::data, xDataXMLType_s::element, xDataXMLType_s::end, xDataXMLType_s::endPresent, xDataXMLType_s::ID, xDataXMLType_s::index, xDataXMLType_s::indexPresent, xDataXMLType_s::length, xDataXMLType_s::lengthPresent, xDataXMLType_s::release, xDataXMLType_s::start, xDataXMLType_s::startPresent, xDataXMLType_s::status, xDataXMLType_s::toData, xDataXMLType_s::toString, and xDataXML_xDataType_Ok.

Referenced by xDataXML_addElementToRoot().

◆ xDataXML_initializeData()

void * xDataXML_initializeData ( statusMessageReporting smr,
xDataXML_element XE,
xDataTOM_element TE,
char const *  ID,
size_t  size 
)

Definition at line 1007 of file xDataTOM_importXML.cc.

1007 {
1008
1009 xDataTOM_xDataInfo *xDI = &(TE->xDataInfo);
1010
1011 if( xData_initializeData( smr, TE, ID, size ) == NULL ) return( NULL );
1012 if( xDataXML_axesElememtToTOM( smr, XE, &(xDI->axes) ) != 0 ) smr_freeMemory( (void **) &(xDI->data) );
1013 return( xDI->data );
1014}
xDataTOM_xDataInfo xDataInfo
Definition: xDataTOM.h:187
xDataTOM_axes axes
Definition: xDataTOM.h:153
void * xData_initializeData(statusMessageReporting *smr, xDataTOM_element *TE, char const *ID, size_t size)
Definition: xDataTOM.cc:479
int xDataXML_axesElememtToTOM(statusMessageReporting *smr, xDataXML_element *XE, xDataTOM_axes *axes)

References xDataTOM_xDataInfo_s::axes, xDataTOM_xDataInfo_s::data, smr_freeMemory(), xData_initializeData(), xDataTOM_element_s::xDataInfo, and xDataXML_axesElememtToTOM().

Referenced by xDataXML_KalbachMannToTOM(), xDataXML_polynomialToTOM(), xDataXML_regionsW_XYs_LegendreSeriesToTOM(), xDataXML_regionsXYsToTOM(), xDataXML_V_W_XYs_LegendreSeriesToTOM(), xDataXML_V_W_XYsToTOM(), xDataXML_W_XYs_LegendreSeriesToTOM(), and xDataXML_W_XYsToTOM().

◆ xDataXML_initializeDoc()

static int xDataXML_initializeDoc ( statusMessageReporting smr,
xDataXML_document doc 
)
static

Definition at line 140 of file xDataTOM_importXML.cc.

140 {
141
143 doc->error = xDataXML_errNone;
144 doc->err = XML_ERROR_NONE;
145 doc->err_line = 0;
146 doc->err_column = 0;
147 doc->fileName = NULL;
148 doc->realFileName = NULL;
150 doc->smr= smr;
151 if( ( doc->xmlParser = XML_ParserCreate( NULL ) ) == NULL ) {
152 smr_setReportError2p( smr, xDataTOM_smrLibraryID, xDataXML_errXML_ParserCreate, "XML_ParserCreate failed" ); }
153 else {
154 XML_SetUserData( doc->xmlParser, doc );
155 xDataXML_initializeRootElement( doc, &(doc->root), NULL, 0 );
156 doc->currentRoot = &(doc->root);
159 }
160 return( !smr_isOk( smr ) );
161}
XML_ParserCreate(const XML_Char *encoding)
Definition: xmlparse.cc:677
XML_SetUserData(XML_Parser parser, void *userData)
Definition: xmlparse.cc:1230
XML_SetElementHandler(XML_Parser parser, XML_StartElementHandler start, XML_EndElementHandler end)
Definition: xmlparse.cc:1279
@ XML_ERROR_NONE
Definition: expat.h:55
XML_SetCharacterDataHandler(XML_Parser parser, XML_CharacterDataHandler handler)
Definition: xmlparse.cc:1300
#define smr_setReportError2p(smr, libraryID, code, fmt)
enum xDataXML_errorCodes error
static void XMLCALL xDataXML_parseStartElement(void *userData, char const *name, char const **attris)
static void XMLCALL xDataXML_parseCharacterData(void *userData, XML_Char const *s, int len)
static int xDataXML_smrUserInterfaceInitialize(xDataXML_document *doc)
static void XMLCALL xDataXML_parseEndElement(void *userData, char const *name)
@ xDataXML_statusParsing
@ xDataXML_errXML_ParserCreate

References xDataXML_document_s::currentRoot, xDataXML_document_s::err, xDataXML_document_s::err_column, xDataXML_document_s::err_line, xDataXML_document_s::error, xDataXML_document_s::fileName, xDataXML_document_s::realFileName, xDataXML_document_s::root, xDataXML_document_s::smr, smr_isOk(), smr_setReportError2p, xDataXML_document_s::status, xDataTOM_smrLibraryID, xDataXML_errNone, xDataXML_errXML_ParserCreate, xDataXML_initializeRootElement(), xDataXML_parseCharacterData(), xDataXML_parseEndElement(), xDataXML_parseStartElement(), xDataXML_smrUserInterfaceInitialize(), xDataXML_statusParsing, XML_ERROR_NONE, XML_ParserCreate(), XML_SetCharacterDataHandler(), XML_SetElementHandler(), XML_SetUserData(), and xDataXML_document_s::xmlParser.

Referenced by xDataXML_mallocDoc().

◆ xDataXML_initializeRootElement()

static void xDataXML_initializeRootElement ( xDataXML_document doc,
xDataXML_rootElement re,
xDataXML_element parentElement,
int  depth 
)
static

◆ xDataXML_is_xDataType()

int xDataXML_is_xDataType ( statusMessageReporting smr,
xDataXMLType xDT,
char const *const  ID,
int  setMsg 
)

Definition at line 751 of file xDataTOM_importXML.cc.

751 {
752
753 if( xDT->ID == NULL ) {
755 "element %s not xData object", xDT->element->fullName ); }
756 else if( xDT->ID != ID ) {
758 "Element %s is not xData object of ID %s but %s", xDT->element->fullName, ID, xDT->ID );
759 }
760 return( xDT->ID == ID );
761}

References xDataXMLType_s::element, xDataXML_element_s::fullName, xDataXMLType_s::ID, smr_setReportError3, xDataTOM_smrLibraryID, and xDataXML_get_smrUserInterfaceFromElement().

◆ xDataXML_isAttributeInElement()

int xDataXML_isAttributeInElement ( xDataXML_element element,
char const *  name 
)

Definition at line 477 of file xDataTOM_importXML.cc.

477 {
478
479 return( xDataXML_isAttributeInList( &(element->attributes), name ) );
480}
int xDataXML_isAttributeInList(xDataXML_attributionList *attributes, char const *name)

References xDataXML_element_s::attributes, G4InuclParticleNames::name(), and xDataXML_isAttributeInList().

◆ xDataXML_isAttributeInList()

int xDataXML_isAttributeInList ( xDataXML_attributionList attributes,
char const *  name 
)

Definition at line 465 of file xDataTOM_importXML.cc.

465 {
466
467 int i;
468
469 for( i = 0; i < attributes->number; i++ ) {
470 if( !strcmp( attributes->attributes[i].name, name ) ) return( 1 );
471 }
472 return( 0 );
473}

References xDataXML_attributionList_s::attributes, G4InuclParticleNames::name(), xDataXML_attribute_s::name, and xDataXML_attributionList_s::number.

Referenced by xDataXML_isAttributeInElement().

◆ xDataXML_mallocDoc()

static xDataXML_document * xDataXML_mallocDoc ( statusMessageReporting smr)
static

Definition at line 128 of file xDataTOM_importXML.cc.

128 {
129
131
132 if( ( doc = (xDataXML_document *) smr_malloc2( smr, sizeof( xDataXML_document ), 1, "xDataXML_document" ) ) != NULL ) {
133 if( xDataXML_initializeDoc( smr, doc ) ) doc = (xDataXML_document *) xDataXML_freeDoc( smr, doc );
134 }
135 return( doc );
136}
static int xDataXML_initializeDoc(statusMessageReporting *smr, xDataXML_document *doc)

References smr_malloc2, xDataXML_freeDoc(), and xDataXML_initializeDoc().

Referenced by xDataXML_importFile2().

◆ xDataXML_numberOfElementsByTagName()

int xDataXML_numberOfElementsByTagName ( statusMessageReporting smr,
xDataXML_element element,
char const *  tagName 
)

◆ xDataXML_parse()

static int xDataXML_parse ( xDataXML_document doc,
char const *  s 
)
static

Definition at line 226 of file xDataTOM_importXML.cc.

226 {
227
228 if( doc->status != xDataXML_statusParsing ) return( doc->status );
229 if( XML_Parse( doc->xmlParser, s, (int) strlen( s ), 0 ) == XML_STATUS_ERROR ) return( -1 );
230 return( 0 );
231}

References s, xDataXML_document_s::status, xDataXML_statusParsing, XML_Parse(), XML_STATUS_ERROR, and xDataXML_document_s::xmlParser.

Referenced by xDataXML_importFile2().

◆ xDataXML_parseCharacterData()

static void XMLCALL xDataXML_parseCharacterData ( void *  userData,
XML_Char const *  s,
int  len 
)
static

Definition at line 255 of file xDataTOM_importXML.cc.

255 {
256/*
257* Always terminates text with a 0.
258*/
261 size_t needSize = text->length + len + 1, l;
262 char *p;
263
264 if( !smr_isOk( doc->smr ) ) return;
265 if( needSize < 8 ) needSize = 8;
266 if( needSize > text->allocated ) {
267 if( text->allocated != 0 ) {
268 l = ( 20 * text->allocated ) / 100;
269 if( l < 100 ) l = 100;
270 if( needSize < ( text->allocated + l ) ) needSize = text->allocated + l;
271 }
272 text->allocated = needSize;
273 text->text = (char *) smr_realloc2( doc->smr, text->text, text->allocated, "text" );
274 if( !smr_isOk( doc->smr ) ) return;
275 }
276 p = &(text->text[text->length]);
277 strncpy( p, s, len );
278 text->length += len;
279 p[len] = 0;
280}
#define smr_realloc2(smr, old, size, forItem)
#define userData
Definition: xmlparse.cc:572

References xDataXML_text_s::allocated, xDataXML_rootElement_s::currentChild, xDataXML_document_s::currentRoot, xDataXML_text_s::length, xDataXML_rootElement_s::parentRoot, s, xDataXML_document_s::smr, smr_isOk(), smr_realloc2, xDataXML_text_s::text, xDataXML_element_s::text, and userData.

Referenced by xDataXML_initializeDoc().

◆ xDataXML_parseEndElement()

static void XMLCALL xDataXML_parseEndElement ( void *  userData,
char const *  name 
)
static

◆ xDataXML_parseGetCurrentPosition()

static enum xDataXML_errorCodes xDataXML_parseGetCurrentPosition ( xDataXML_document doc,
xDataXML_docInfo docInfo 
)
static

◆ xDataXML_parseInitializeText()

static int xDataXML_parseInitializeText ( xDataXML_document doc,
xDataXML_text text 
)
static

Definition at line 298 of file xDataTOM_importXML.cc.

298 {
299
301 text->allocated = 0;
302 text->length = 0;
303 text->text = NULL;
304 return( 0 );
305}

References xDataXML_text_s::allocated, xDataXML_text_s::docInfo, xDataXML_text_s::length, xDataXML_text_s::text, and xDataXML_parseGetCurrentPosition().

Referenced by xDataXML_addElementToRoot().

◆ xDataXML_parseIsError()

int xDataXML_parseIsError ( xDataXML_document doc)

Definition at line 404 of file xDataTOM_importXML.cc.

404 {
405
406 return( doc->status == xDataXML_statusError );
407}

References xDataXML_document_s::status, and xDataXML_statusError.

◆ xDataXML_parseStartElement()

static void XMLCALL xDataXML_parseStartElement ( void *  userData,
char const *  name,
char const **  attris 
)
static

Definition at line 235 of file xDataTOM_importXML.cc.

235 {
236
238
239 if( !smr_isOk( doc->smr ) ) return;
240 xDataXML_addElementToRoot( doc->smr, doc->currentRoot, name, attris );
241}
static int xDataXML_addElementToRoot(statusMessageReporting *smr, xDataXML_rootElement *parentRoot, char const *name, char const **attris)

References xDataXML_document_s::currentRoot, G4InuclParticleNames::name(), xDataXML_document_s::smr, smr_isOk(), userData, and xDataXML_addElementToRoot().

Referenced by xDataXML_initializeDoc().

◆ xDataXML_setFileName()

static int xDataXML_setFileName ( statusMessageReporting smr,
xDataXML_document doc,
char const *  fileName 
)
static

Definition at line 779 of file xDataTOM_importXML.cc.

779 {
780
781 char realPath[PATH_MAX+1];
782
783 smr_freeMemory( (void **) &(doc->fileName) );
784 smr_freeMemory( (void **) &(doc->realFileName) );
785 if( fileName != NULL ) {
786 if( ( doc->fileName = smr_allocateCopyString2( smr, fileName, "fileName" ) ) == NULL ) return( 1 );
787 if( realpath( fileName, realPath ) != NULL ) {
788 if( ( doc->realFileName = smr_allocateCopyString2( smr, realPath, "realFileName" ) ) == NULL ) return( 1 );
789 }
790 }
791 return( 0 );
792}
#define smr_allocateCopyString2(smr, s, forItem)
#define PATH_MAX

References xDataXML_document_s::fileName, PATH_MAX, xDataXML_document_s::realFileName, smr_allocateCopyString2, and smr_freeMemory().

Referenced by xDataXML_importFile2().

◆ xDataXML_shortStringForMessage()

static char const * xDataXML_shortStringForMessage ( size_t  size,
char *  Out,
char const *  In 
)
static

Definition at line 938 of file xDataTOM_importXML.cc.

938 {
939
940 if( strlen( In ) > size ) {
941 strncpy( Out, In, size - 5 );
942 Out[size-5] = 0;
943 strcat( Out, " ..." );
944 return( Out );
945 }
946 return( In );
947}

Referenced by xDataXML_stringTo_double(), and xDataXML_stringTo_xDataTOM_Int().

◆ xDataXML_smrUserInterface()

static char * xDataXML_smrUserInterface ( void *  userData)
static

Definition at line 839 of file xDataTOM_importXML.cc.

839 {
840
841 xDataXML_smr *smrUserInterface = (xDataXML_smr *) userData;
842 xDataXML_rootElement *currentRoot = smrUserInterface->doc->currentRoot;
843
844 if( currentRoot->parentElement != NULL ) {
845 return( smr_allocateFormatMessage( "\nat line %d and column %d of file %s\nin element %s", currentRoot->parentElement->docInfo.line,
846 currentRoot->parentElement->docInfo.column, smrUserInterface->doc->fileName, currentRoot->parentElement->fullName ) ); }
847 else if( smrUserInterface->doc->fileName != NULL ) {
848 return( smr_allocateFormatMessage( "\nof file %s", smrUserInterface->doc->fileName ) );
849 }
850 return( smr_allocateFormatMessage( "\nat line %d and column %d\nin element %s", currentRoot->parentElement->docInfo.line,
851 currentRoot->parentElement->docInfo.column, currentRoot->parentElement->fullName ) );
852}
char * smr_allocateFormatMessage(char const *fmt,...)
xDataXML_document * doc

References xDataXML_docInfo_s::column, xDataXML_document_s::currentRoot, xDataXML_smr_s::doc, xDataXML_element_s::docInfo, xDataXML_document_s::fileName, xDataXML_element_s::fullName, xDataXML_docInfo_s::line, xDataXML_rootElement_s::parentElement, smr_allocateFormatMessage(), and userData.

Referenced by xDataXML_smrUserInterfaceInitialize().

◆ xDataXML_smrUserInterfaceFree()

static int xDataXML_smrUserInterfaceFree ( xDataXML_document doc)
static

Definition at line 830 of file xDataTOM_importXML.cc.

830 {
831
833 doc->smrUserInterface.doc = NULL;
834 return( 0 );
835}
smr_userInterface smrUserInterface

References xDataXML_smr_s::doc, xDataXML_smr_s::smrUserInterface, and xDataXML_document_s::smrUserInterface.

Referenced by xDataXML_freeDoc().

◆ xDataXML_smrUserInterfaceInitialize()

static int xDataXML_smrUserInterfaceInitialize ( xDataXML_document doc)
static

Definition at line 821 of file xDataTOM_importXML.cc.

821 {
822
824 doc->smrUserInterface.doc = doc;
825 return( 0 );
826}
static char * xDataXML_smrUserInterface(void *userData)

References xDataXML_smr_s::doc, xDataXML_smr_s::smrUserInterface, xDataXML_document_s::smrUserInterface, and xDataXML_smrUserInterface().

Referenced by xDataXML_initializeDoc().

◆ xDataXML_stringTo_double()

int xDataXML_stringTo_double ( statusMessageReporting smr,
void *  smrUserInterface,
char const *  c,
double *  value,
char const *  endings,
char **  e 
)

Definition at line 889 of file xDataTOM_importXML.cc.

889 {
890
891 char const *s;
892 char tmp[64];
893 int status = 1, n = sizeof( tmp );
894
895 for( s = c; *s != 0; s++ ) if( !isspace( *s ) ) break;
896 *value = strtod( s, e );
897 if( *e == s ) {
898 smr_setReportError3( smr, smrUserInterface, xDataTOM_smrLibraryID, 1, "could not convert \"%s\" to an double",
900 else {
901 if( *endings == 0 ) while( isspace( **e ) ) (*e)++; // Loop checking, 11.06.2015, T. Koi
902 if( **e == 0 ) {
903 status = 0; }
904 else {
905 if( *endings == 0 ) {
906 smr_setReportError3( smr, smrUserInterface, xDataTOM_smrLibraryID, 1, "double string \"%s\" does not end with a '\\0'",
907 xDataXML_shortStringForMessage( n, tmp, c ) ); }
908 else {
909 if( strchr( endings, **e ) == NULL ) {
910 smr_setReportError3( smr, smrUserInterface, xDataTOM_smrLibraryID, 1, "double string \"%s\" does not end with a white space or a '\\0\'",
911 xDataXML_shortStringForMessage( n, tmp, c ) ); }
912 else {
913 status = 0;
914 }
915 }
916 }
917 }
918 return( status );
919}
static char const * xDataXML_shortStringForMessage(size_t size, char *Out, char const *In)

References CLHEP::detail::n, s, smr_setReportError3, xDataTOM_smrLibraryID, and xDataXML_shortStringForMessage().

Referenced by xDataXML_stringToDoubles().

◆ xDataXML_stringTo_xDataTOM_Int()

int xDataXML_stringTo_xDataTOM_Int ( statusMessageReporting smr,
void *  smrUserInterface,
char const *  c,
xDataTOM_Int value,
char const *  endings,
char **  e 
)

Definition at line 856 of file xDataTOM_importXML.cc.

856 {
857
858 char const *s;
859 char tmp[64];
860 int status = 1, n = sizeof( tmp );
861
862 for( s = c; *s != 0; s++ ) if( !isspace( *s ) ) break;
863 *value = (xDataTOM_Int) strtoll( s, e, 10 );
864 if( *e == s ) {
865 smr_setReportError3(smr, smrUserInterface, xDataTOM_smrLibraryID, 1, "could not convert \"%s\" to an integer", xDataXML_shortStringForMessage( n, tmp, c ));}
866 else {
867 if( *endings == 0 ) while( isspace( **e ) ) (*e)++; // Loop checking, 11.06.2015, T. Koi
868 if( **e == 0 ) {
869 status = 0; }
870 else {
871 if( *endings == 0 ) {
872 smr_setReportError3( smr, smrUserInterface, xDataTOM_smrLibraryID, 1, "integer string \"%s\" does not end with a '\\0'",
873 xDataXML_shortStringForMessage( n, tmp, c ) ); }
874 else {
875 if( strchr( endings, **e ) == NULL ) {
876 smr_setReportError3( smr, smrUserInterface, xDataTOM_smrLibraryID, 1, "integer string \"%s\" does not end with a white space or a '\\0\'",
877 xDataXML_shortStringForMessage( n, tmp, c ) ); }
878 else {
879 status = 0;
880 }
881 }
882 }
883 }
884 return( status );
885}

References CLHEP::detail::n, s, smr_setReportError3, xDataTOM_smrLibraryID, and xDataXML_shortStringForMessage().

◆ xDataXML_xDataTypeConvertAttributes()

int xDataXML_xDataTypeConvertAttributes ( statusMessageReporting smr,
xDataXML_element element 
)

Definition at line 557 of file xDataTOM_importXML.cc.

557 {
558
559 xDataXMLType *xDT = &(element->xDataTypeInfo);
560 void *smrUser = xDataXML_get_smrUserInterfaceFromElement( element );
561
562 xDT->index = -1;
563 xDT->start = -1;
564 xDT->end = -1;
565 xDT->length = -1;
566 if( ( xDT->indexPresent = xDataXML_convertAttributeTo_xDataTOM_Int( smr, element, "index", &(xDT->index), 0 ) ) < 0 ) return( 1 );
567 if( ( xDT->startPresent = xDataXML_convertAttributeTo_xDataTOM_Int( smr, element, "start", &(xDT->start), 0 ) ) < 0 ) return( 1 );
568 if( ( xDT->endPresent = xDataXML_convertAttributeTo_xDataTOM_Int( smr, element, "end", &(xDT->end), 0 ) ) < 0 ) return( 1 );
569 if( ( xDT->lengthPresent = xDataXML_convertAttributeTo_xDataTOM_Int( smr, element, "length", &(xDT->length), 0 ) ) < 0 ) return( 1 );
570 if( ( xDT->endPresent > 0 ) ) {
571 if( xDT->lengthPresent > 0 ) {
572 smr_setReportError3p( smr, smrUser, xDataTOM_smrLibraryID, 1, "missing length (or end) in xData" );
573 return( 1 );
574 }
575 xDT->end = xDT->length; }
576 else {
577 if( xDT->lengthPresent > 0 ) xDT->length = xDT->end;
578 }
579
580 if( xDT->startPresent > 0 ) xDT->start = 0;
581 if( xDT->start < 0 ) {
582 smr_setReportError3( smr, smrUser, xDataTOM_smrLibraryID, 1, "start = %d < 0", xDT->start );
583 return( 1 );
584 }
585 if( xDT->end < xDT->start ) {
586 smr_setReportError3( smr, smrUser, xDataTOM_smrLibraryID, 1, "start = %d >= end = %d", xDT->start, xDT->end );
587 return( 1 );
588 }
589 if( xDT->length < 0 ) {
590 smr_setReportError3( smr, smrUser, xDataTOM_smrLibraryID, 1, "length = %d < 0", xDT->length );
591 return( 1 );
592 }
593
594 return( 0 );
595}
#define smr_setReportError3p(smr, userInterface, libraryID, code, fmt)
xDataTOM_Int xDataXML_convertAttributeTo_xDataTOM_Int(statusMessageReporting *smr, xDataXML_element *element, char const *name, xDataTOM_Int *n, int required)

References xDataXMLType_s::end, xDataXMLType_s::endPresent, xDataXMLType_s::index, xDataXMLType_s::indexPresent, xDataXMLType_s::length, xDataXMLType_s::lengthPresent, smr_setReportError3, smr_setReportError3p, xDataXMLType_s::start, xDataXMLType_s::startPresent, xDataTOM_smrLibraryID, xDataXML_element_s::xDataTypeInfo, xDataXML_convertAttributeTo_xDataTOM_Int(), and xDataXML_get_smrUserInterfaceFromElement().