Geant4 11.2.2
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
xDataTOM_importXML_regionsXYs.cc
Go to the documentation of this file.
1/*
2# <<BEGIN-copyright>>
3# <<END-copyright>>
4*/
5#include <stdlib.h>
6#include <string.h>
7#include <limits.h>
8#include <ctype.h>
9
11
12#if defined __cplusplus
13namespace GIDI {
14using namespace GIDI;
15#endif
16
17static int xDataXML_regionsXYs_regionToTOM( statusMessageReporting *smr, xDataXML_element *XE, xDataTOM_XYs *XYs, xDataTOM_axes *axes );
18static int xDataXML_regionsXYs_XYsToTOM( statusMessageReporting *smr, xDataXML_element *XE, xDataTOM_XYs *XYs, xDataTOM_axes *axes,
19 xDataTOM_interpolation *interpolation, int index, int length, double accuracy );
20/*
21************************************************************
22*/
24
25 int index;
26 xDataTOM_xDataInfo *xDI = &(TE->xDataInfo);
27 xDataXML_element *XMLChild;
28 xDataTOM_regionsXYs *regionsXYs;
29
30 if( ( xDI->data = xDataXML_initializeData( smr, XE, TE, xDataTOM_regionsXYs_ID, sizeof( xDataTOM_regionsXYs ) ) ) == NULL ) return( 1 );
31 regionsXYs = (xDataTOM_regionsXYs *) xDI->data;
32 regionsXYs->axes = &(xDI->axes);
33 regionsXYs->length = xDataXML_numberOfElementsByTagName( smr, XE, "region" );
34 if( ( regionsXYs->XYs = (xDataTOM_XYs *) smr_malloc2( smr, regionsXYs->length * sizeof( xDataTOM_XYs ), 1, "regionsXYs->XYs" ) ) == NULL ) goto err;
35
36
37 for( XMLChild = xDataXML_getFirstElement( XE ), index = 0; XMLChild != NULL; XMLChild = xDataXML_getNextElement( XMLChild ) ) {
38 if( strcmp( "axes", XMLChild->name ) == 0 ) {
39 continue; }
40 else if( strcmp( "region", XMLChild->name ) == 0 ) {
41 if( xDataXML_regionsXYs_regionToTOM( smr, XMLChild, &(regionsXYs->XYs[index]), regionsXYs->axes ) != 0 ) goto err;
42 index++; }
43 else {
45 "invalid element '%s' in xData 'regionsXYs'", XMLChild->name );
46 goto err;
47 }
48 }
49
50 return( 0 );
51
52err:
53/* Need to free things here?????????.*/
54 return( 1 );
55}
56/*
57************************************************************
58*/
59static int xDataXML_regionsXYs_regionToTOM( statusMessageReporting *smr, xDataXML_element *XE, xDataTOM_XYs *XYs, xDataTOM_axes *axes ) {
60
61 int index, length;
62 double accuracy;
63 xDataXML_element *XMLChild, *interpolationAxesElement = NULL, *dataElement = NULL;
64 xDataTOM_interpolation interpolation;
65 char const *sInterpolation;
66
67 if( xDataXML_convertAttributeTo_xDataTOM_Int( smr, XE, "index", &index, 1 ) != 0 ) return( 1 );
68 if( xDataXML_convertAttributeTo_xDataTOM_Int( smr, XE, "length", &length, 1 ) != 0 ) return( 1 );
69 if( xDataXML_convertAttributeToDouble( smr, XE, "accuracy", &accuracy, 1 ) != 0 ) return( 1 );
70
71 for( XMLChild = xDataXML_getFirstElement( XE ); XMLChild != NULL; XMLChild = xDataXML_getNextElement( XMLChild ) ) {
72 if( strcmp( "interpolationAxes", XMLChild->name ) == 0 ) {
73 if( interpolationAxesElement != NULL ) {
75 "multiple %s elements in element 'region'", XMLChild->name );
76 goto err;
77 }
78 interpolationAxesElement = XMLChild; }
79 else if( strcmp( "data", XMLChild->name ) == 0 ) {
80 if( dataElement != NULL ) {
82 "multiple %s elements in element 'region'", XMLChild->name );
83 goto err;
84 }
85 dataElement = XMLChild; }
86 else {
88 "invalid element '%s' in element 'region'", XMLChild->name );
89 goto err;
90 }
91 }
92 if( interpolationAxesElement == NULL ) {
94 "missing 'interpolationAxes' element in element 'region'" );
95 goto err;
96 }
97 if( ( sInterpolation = xDataXML_getAttributesValueInElement( interpolationAxesElement, "interpolation" ) ) == NULL ) {
99 "missing attribute 'interpolation'" );
100 goto err;
101 }
102 if( xDataTOM_interpolation_setFromString( smr, &interpolation, sInterpolation ) != 0 ) goto err;
103 if( dataElement == NULL ) {
105 "missing 'data' element in element 'region'" );
106 goto err;
107 }
108 xDataXML_regionsXYs_XYsToTOM( smr, dataElement, XYs, axes, &interpolation, index, length, accuracy );
109 return( 0 );
110
111err:
112/* Need to free things here?????????.*/
113
114 return( 1 );
115}
116/*
117************************************************************
118*/
119static int xDataXML_regionsXYs_XYsToTOM( statusMessageReporting *smr, xDataXML_element *XE, xDataTOM_XYs *XYs, xDataTOM_axes *axes,
120 xDataTOM_interpolation *interpolation, int index, int length, double accuracy ) {
121
122 return( xDataXML_XYsDataToTOM( smr, XE, XYs, index, length, 0., accuracy, xDataTOM_subAxesType_intepolationAxes, 0, axes, interpolation ) );
123}
124
125#if defined __cplusplus
126}
127#endif
#define smr_setReportError3(smr, userInterface, libraryID, code, fmt,...)
#define smr_setReportError3p(smr, userInterface, libraryID, code, fmt)
#define smr_malloc2(smr, size, zero, forItem)
xDataTOM_xDataInfo xDataInfo
Definition xDataTOM.h:187
xDataTOM_XYs * XYs
Definition xDataTOM.h:90
xDataTOM_axes * axes
Definition xDataTOM.h:89
xDataTOM_axes axes
Definition xDataTOM.h:153
int xDataTOM_interpolation_setFromString(statusMessageReporting *smr, xDataTOM_interpolation *interpolation, char const *str)
@ xDataTOM_subAxesType_intepolationAxes
Definition xDataTOM.h:24
void * xDataXML_initializeData(statusMessageReporting *smr, xDataXML_element *XE, xDataTOM_element *TE, char const *ID, size_t size)
int xDataXML_XYsDataToTOM(statusMessageReporting *smr, xDataXML_element *XE, xDataTOM_XYs *XYs, int index, int length, double value, double accuracy, enum xDataTOM_subAxesType subAxesType, int axesOffest, xDataTOM_axes *axes, xDataTOM_interpolation *interpolation)
void * xDataXML_get_smrUserInterfaceFromElement(xDataXML_element *element)
xDataXML_element * xDataXML_getNextElement(xDataXML_element *element)
xDataTOM_Int xDataXML_convertAttributeTo_xDataTOM_Int(statusMessageReporting *smr, xDataXML_element *element, char const *name, xDataTOM_Int *n, int required)
char const * xDataXML_getAttributesValueInElement(xDataXML_element *element, char const *name)
xDataXML_element * xDataXML_getFirstElement(xDataXML_element *element)
int xDataXML_regionsXYsToTOM(statusMessageReporting *smr, xDataXML_element *XE, xDataTOM_element *TE)
int xDataXML_numberOfElementsByTagName(statusMessageReporting *smr, xDataXML_element *element, char const *tagName)
int xDataXML_convertAttributeToDouble(statusMessageReporting *smr, xDataXML_element *element, char const *name, double *d, int required)
char const * xDataTOM_regionsXYs_ID
int xDataTOM_smrLibraryID
Definition xDataTOM.cc:34