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 /* 18 ************************************************************ 19 */ 20 int xDataXML_axesElememtToTOM( statusMessageReporting *smr, xDataXML_element *XE, xDataTOM_axes *axes ) { 21 22 int axesProcessed = 0; 23 xDataXML_element *XMLChild; 24 25 for( XMLChild = xDataXML_getFirstElement( XE ); XMLChild != NULL; XMLChild = xDataXML_getNextElement( XMLChild ) ) { 26 if( strcmp( "axes", XMLChild->name ) == 0 ) { 27 if( axesProcessed ) { 28 smr_setReportError3p( smr, xDataXML_get_smrUserInterfaceFromElement( XE ), xDataTOM_smrLibraryID, -1, "multiple 'axes' elements found" ); 29 return( 1 ); 30 } 31 axesProcessed = 1; 32 if( xDataXML_axesToTOM( smr, XMLChild, axes ) != 0 ) return( 1 ); 33 } 34 } 35 if( axesProcessed == 0 ) { 36 smr_setReportError3p( smr, xDataXML_get_smrUserInterfaceFromElement( XE ), xDataTOM_smrLibraryID, -1, "axes element missing" ); 37 return( 1 ); 38 } 39 40 return( 0 ); 41 } 42 /* 43 ************************************************************ 44 */ 45 int xDataXML_axesToTOM( statusMessageReporting *smr, xDataXML_element *XE, xDataTOM_axes *axes ) { 46 47 int i = 0, n = 0, index; 48 xDataXML_element *XMLChild; 49 char const *label, *unit, *sInterpolation, *attribute; 50 xDataTOM_interpolation interpolation; 51 52 for( XMLChild = xDataXML_getFirstElement( XE ); XMLChild != NULL; XMLChild = xDataXML_getNextElement( XMLChild ) ) { 53 if( strcmp( "axis", XMLChild->name ) != 0 ) { 54 smr_setReportError3( smr, xDataXML_get_smrUserInterfaceFromElement( XE ), xDataTOM_smrLibraryID, -1, 55 "non axis element found: name = %s", XMLChild->name ); 56 return( 1 ); 57 } 58 n++; 59 } 60 if( xDataTOM_axes_initialize( smr, axes, n ) != 0 ) return( 1 ); 61 62 for( XMLChild = xDataXML_getFirstElement( XE ), i = 0; XMLChild != NULL; XMLChild = xDataXML_getNextElement( XMLChild ), i++ ) { 63 attribute = "index"; 64 if( xDataXML_convertAttributeTo_xDataTOM_Int( smr, XMLChild, attribute, &index, 1 ) != 0 ) goto errA; 65 attribute = "label"; 66 if( ( label = xDataXML_getAttributesValueInElement( XMLChild, attribute ) ) == NULL ) goto errA; 67 attribute = "unit"; 68 if( ( unit = xDataXML_getAttributesValueInElement( XMLChild, attribute ) ) == NULL ) goto errA; 69 if( i < ( n - 1 ) ) { 70 attribute = "interpolation"; 71 if( ( sInterpolation = xDataXML_getAttributesValueInElement( XMLChild, attribute ) ) == NULL ) goto errA; 72 if( xDataTOM_interpolation_setFromString( smr, &interpolation, sInterpolation ) != 0 ) goto err; } 73 else { 74 sInterpolation = ""; 75 if( xDataTOM_interpolation_set( smr, &interpolation, xDataTOM_interpolationFlag_linear, xDataTOM_interpolationFlag_linear, 76 xDataTOM_interpolationQualifier_dependent ) != 0 ) goto err; 77 } 78 xDataTOM_axis_initialize( smr, &(axes->axis[i]), index, label, unit, &interpolation ); 79 } 80 return( 0 ); 81 82 errA: 83 smr_setReportError3( smr, xDataXML_get_smrUserInterfaceFromElement( XE ), xDataTOM_smrLibraryID, -1, "axis missing attribute '%s'", attribute ); 84 err: 85 n = i; 86 for( i = 0; i < n; i++ ) xDataTOM_axis_release( smr, &(axes->axis[i]) ); 87 smr_freeMemory( (void **) &(axes->axis) ); 88 return( 1 ); 89 } 90 91 #if defined __cplusplus 92 } 93 #endif 94