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_regionsXYs_regionToTOM( statusMessageReporting *smr, xDataXML_element *XE, xDataTOM_XYs *XYs, xDataTOM_axes *axes ); 18 static 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 */ 23 int xDataXML_regionsXYsToTOM( statusMessageReporting *smr, xDataXML_element *XE, xDataTOM_element *TE ) { 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 { 44 smr_setReportError3( smr, xDataXML_get_smrUserInterfaceFromElement( XE ), xDataTOM_smrLibraryID, -1, 45 "invalid element '%s' in xData 'regionsXYs'", XMLChild->name ); 46 goto err; 47 } 48 } 49 50 return( 0 ); 51 52 err: 53 /* Need to free things here?????????.*/ 54 return( 1 ); 55 } 56 /* 57 ************************************************************ 58 */ 59 static 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 ) { 74 smr_setReportError3( smr, xDataXML_get_smrUserInterfaceFromElement( XE ), xDataTOM_smrLibraryID, -1, 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 ) { 81 smr_setReportError3( smr, xDataXML_get_smrUserInterfaceFromElement( XE ), xDataTOM_smrLibraryID, -1, 82 "multiple %s elements in element 'region'", XMLChild->name ); 83 goto err; 84 } 85 dataElement = XMLChild; } 86 else { 87 smr_setReportError3( smr, xDataXML_get_smrUserInterfaceFromElement( XE ), xDataTOM_smrLibraryID, -1, 88 "invalid element '%s' in element 'region'", XMLChild->name ); 89 goto err; 90 } 91 } 92 if( interpolationAxesElement == NULL ) { 93 smr_setReportError3p( smr, xDataXML_get_smrUserInterfaceFromElement( XE ), xDataTOM_smrLibraryID, -1, 94 "missing 'interpolationAxes' element in element 'region'" ); 95 goto err; 96 } 97 if( ( sInterpolation = xDataXML_getAttributesValueInElement( interpolationAxesElement, "interpolation" ) ) == NULL ) { 98 smr_setReportError3p( smr, xDataXML_get_smrUserInterfaceFromElement( interpolationAxesElement ), xDataTOM_smrLibraryID, -1, 99 "missing attribute 'interpolation'" ); 100 goto err; 101 } 102 if( xDataTOM_interpolation_setFromString( smr, &interpolation, sInterpolation ) != 0 ) goto err; 103 if( dataElement == NULL ) { 104 smr_setReportError3p( smr, xDataXML_get_smrUserInterfaceFromElement( XE ), xDataTOM_smrLibraryID, -1, 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 111 err: 112 /* Need to free things here?????????.*/ 113 114 return( 1 ); 115 } 116 /* 117 ************************************************************ 118 */ 119 static 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 128