Geant4 Cross Reference |
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 117