Geant4  10.02.p01
xDataTOM_importXML_regionsW_XYs_LegendreSeries.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 
10 #include "xDataTOM_importXML_private.h"
11 
12 #if defined __cplusplus
13 namespace GIDI {
14 using namespace GIDI;
15 #endif
16 
17 static int xDataXML_regionsW_XYs_LegendreSeries_regionToTOM( statusMessageReporting *smr, xDataXML_element *XE,
18  xDataTOM_W_XYs_LegendreSeries *W_XYs_LegendreSeries, char const *wLabel, xDataTOM_axes *axes );
19 /*
20 ************************************************************
21 */
22 int xDataXML_regionsW_XYs_LegendreSeriesToTOM( statusMessageReporting *smr, xDataXML_element *XE, xDataTOM_element *TE ) {
23 
24  int index, length;
25  xDataTOM_xDataInfo *xDI = &(TE->xDataInfo);
26  xDataXML_element *XMLChild;
27  char const *wLabel;
28  xDataTOM_regionsW_XYs_LegendreSeries *regionsW_XYs_LegendreSeries;
29 
30  if( ( xDI->data = xDataXML_initializeData( smr, XE, TE, xDataTOM_regionsW_XYs_LegendreSeries_ID, sizeof( xDataTOM_regionsW_XYs_LegendreSeries ) ) )
31  == NULL ) return( 1 );
32  regionsW_XYs_LegendreSeries = (xDataTOM_regionsW_XYs_LegendreSeries *) xDI->data;
33  length = xDataXML_numberOfElementsByTagName( smr, XE, "region" );
34  if( xDataTOM_regionsW_XYs_LegendreSeries_initialize( smr, regionsW_XYs_LegendreSeries, length, &(xDI->axes) ) != 0 ) goto err;
35  if( ( wLabel = xDataTOM_axes_getLabel( smr, &(xDI->axes), 0 ) ) == NULL ) goto err;
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_regionsW_XYs_LegendreSeries_regionToTOM( smr, XMLChild, &(regionsW_XYs_LegendreSeries->W_XYs_LegendreSeries[index]),
42  wLabel, regionsW_XYs_LegendreSeries->axes ) != 0 ) goto err;
43  index++; }
44  else {
45  smr_setReportError3( smr, xDataXML_get_smrUserInterfaceFromElement( XE ), xDataTOM_smrLibraryID, -1,
46  "invalid element '%s' in xData 'regionsW_XYs_LegendreSeries'", XMLChild->name );
47  goto err;
48  }
49  }
50 
51  return( 0 );
52 
53 err:
54 /* Need to free things here?????????.*/
55  return( 1 );
56 }
57 /*
58 ************************************************************
59 */
60 static int xDataXML_regionsW_XYs_LegendreSeries_regionToTOM( statusMessageReporting *smr, xDataXML_element *XE,
61  xDataTOM_W_XYs_LegendreSeries *W_XYs_LegendreSeries, char const *wLabel, xDataTOM_axes *axes ) {
62 
63  int index, length;
64  xDataXML_element *XMLChild, *interpolationAxesElement = NULL;
65  xDataTOM_interpolation interpolation;
66  char const *sInterpolation;
67 
68  for( XMLChild = xDataXML_getFirstElement( XE ); XMLChild != NULL; XMLChild = xDataXML_getNextElement( XMLChild ) ) {
69  if( strcmp( "interpolationAxes", XMLChild->name ) == 0 ) {
70  if( interpolationAxesElement != NULL ) {
71  smr_setReportError3( smr, xDataXML_get_smrUserInterfaceFromElement( XE ), xDataTOM_smrLibraryID, -1,
72  "multiple %s elements in element 'region'", XMLChild->name );
73  goto err;
74  }
75  interpolationAxesElement = XMLChild;
76  }
77  }
78  if( interpolationAxesElement == NULL ) {
79  smr_setReportError3p( smr, xDataXML_get_smrUserInterfaceFromElement( XE ), xDataTOM_smrLibraryID, -1,
80  "missing element 'interpolationAxes'" );
81  goto err;
82  }
83  if( ( sInterpolation = xDataXML_getAttributesValueInElement( interpolationAxesElement, "interpolation" ) ) == NULL ) {
84  smr_setReportError3p( smr, xDataXML_get_smrUserInterfaceFromElement( interpolationAxesElement ), xDataTOM_smrLibraryID, -1,
85  "missing attribute 'interpolation'" );
86  goto err;
87  }
88  if( xDataTOM_interpolation_setFromString( smr, &interpolation, sInterpolation ) != 0 ) goto err;
89 
90  if( xDataXML_convertAttributeTo_xDataTOM_Int( smr, XE, "index", &index, 1 ) != 0 ) return( 1 );
91  length = xDataXML_numberOfElementsByTagName( smr, XE, wLabel );
92  if( xDataTOM_W_XYs_LegendreSeries_initialize( smr, W_XYs_LegendreSeries, index, length, 0., xDataTOM_subAxesType_intepolationAxes, axes,
93  &interpolation ) != 0 ) goto err;
94  for( XMLChild = xDataXML_getFirstElement( XE ), index = 0; XMLChild != NULL; XMLChild = xDataXML_getNextElement( XMLChild ) ) {
95  if( strcmp( "interpolationAxes", XMLChild->name ) == 0 ) {
96  continue; }
97  else if( strcmp( wLabel, XMLChild->name ) == 0 ) {
98  if( xDataXML_W_XYs_LegendreSeries_LegendreSeriesToTOM( smr, XMLChild, &(W_XYs_LegendreSeries->LegendreSeries[index]) ) != 0 ) goto err;
99  index++; }
100  else {
101  smr_setReportError3( smr, xDataXML_get_smrUserInterfaceFromElement( XE ), xDataTOM_smrLibraryID, -1,
102  "invalid element '%s' in element 'region'", XMLChild->name );
103  goto err;
104  }
105  }
106  return( 0 );
107 
108 err:
109 /* Need to free things here?????????.*/
110 
111  return( 1 );
112 }
113 
114 #if defined __cplusplus
115 }
116 #endif
int xDataTOM_interpolation_setFromString(statusMessageReporting *smr, xDataTOM_interpolation *interpolation, char const *str)
char const * xDataXML_getAttributesValueInElement(xDataXML_element *element, char const *name)
int xDataXML_numberOfElementsByTagName(statusMessageReporting *, xDataXML_element *element, char const *tagName)
int xDataXML_regionsW_XYs_LegendreSeriesToTOM(statusMessageReporting *smr, xDataXML_element *XE, xDataTOM_element *TE)
void * xDataXML_get_smrUserInterfaceFromElement(xDataXML_element *element)
char const * xDataTOM_axes_getLabel(statusMessageReporting *smr, xDataTOM_axes *axes, int index)
int xDataTOM_regionsW_XYs_LegendreSeries_initialize(statusMessageReporting *smr, xDataTOM_regionsW_XYs_LegendreSeries *regionsW_XYs_LegendreSeries, int length, xDataTOM_axes *axes)
int xDataXML_W_XYs_LegendreSeries_LegendreSeriesToTOM(statusMessageReporting *smr, xDataXML_element *XE, xDataTOM_LegendreSeries *LegendreSeries)
int xDataTOM_smrLibraryID
Definition: xDataTOM.cc:34
xDataTOM_Int xDataXML_convertAttributeTo_xDataTOM_Int(statusMessageReporting *smr, xDataXML_element *element, char const *name, xDataTOM_Int *n, int required)
int xDataTOM_W_XYs_LegendreSeries_initialize(statusMessageReporting *smr, xDataTOM_W_XYs_LegendreSeries *W_XYs_LegendreSeries, int index, int length, double value, enum xDataTOM_subAxesType subAxesType, xDataTOM_axes *axes, xDataTOM_interpolation *interpolation)
char const * xDataTOM_regionsW_XYs_LegendreSeries_ID
static int xDataXML_regionsW_XYs_LegendreSeries_regionToTOM(statusMessageReporting *smr, xDataXML_element *XE, xDataTOM_W_XYs_LegendreSeries *W_XYs_LegendreSeries, char const *wLabel, xDataTOM_axes *axes)
xDataXML_element * xDataXML_getNextElement(xDataXML_element *element)
xDataXML_element * xDataXML_getFirstElement(xDataXML_element *element)
void * xDataXML_initializeData(statusMessageReporting *smr, xDataXML_element *XE, xDataTOM_element *TE, char const *ID, size_t size)