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_W_XYs_XYsToTOM( statusMessageReporting *smr, xDataXML_element *XE, xDataTOM_XYs *XYs, xDataTOM_axes *axes, 18 int axesOffset ); 19 /* 20 ************************************************************ 21 */ 22 int xDataXML_W_XYsToTOM( statusMessageReporting *smr, xDataXML_element *XE, xDataTOM_element *TE ) { 23 24 xDataTOM_xDataInfo *xDI = &(TE->xDataInfo); 25 xDataTOM_W_XYs *W_XYs; 26 27 /* Need to release W_XYs if an error occurs later. */ 28 if( ( xDI->data = xDataXML_initializeData( smr, XE, TE, xDataTOM_W_XYs_ID, sizeof( xDataTOM_W_XYs ) ) ) == NULL ) return( 1 ); 29 W_XYs = (xDataTOM_W_XYs *) xDI->data; 30 31 if( xDataXML_W_XYsDataToTOM( smr, XE, W_XYs, 0, 0., &(xDI->axes), 0 ) != 0 ) goto err; 32 return( 0 ); 33 34 err: 35 smr_freeMemory( (void **) &(xDI->data) ); 36 return( 1 ); 37 } 38 /* 39 ************************************************************ 40 */ 41 int xDataXML_W_XYsDataToTOM( statusMessageReporting *smr, xDataXML_element *XE, xDataTOM_W_XYs *W_XYs, int index, double value, xDataTOM_axes *axes, 42 int axesOffset ) { 43 44 int length; 45 char const *wLabel; 46 xDataXML_element *XMLChild; 47 48 if( ( wLabel = xDataTOM_axes_getLabel( smr, axes, axesOffset ) ) == NULL ) goto err; 49 length = xDataXML_numberOfElementsByTagName( smr, XE, wLabel ); 50 if( xDataTOM_W_XYs_initialize( smr, W_XYs, index, length, value, axes, axesOffset ) != 0 ) return( 1 ); 51 52 for( XMLChild = xDataXML_getFirstElement( XE ), index = 0; XMLChild != NULL; XMLChild = xDataXML_getNextElement( XMLChild ) ) { 53 if( strcmp( "axes", XMLChild->name ) == 0 ) { 54 continue; } 55 else if( strcmp( wLabel, XMLChild->name ) == 0 ) { 56 if( xDataXML_W_XYs_XYsToTOM( smr, XMLChild, &(W_XYs->XYs[index]), axes, axesOffset + 1 ) != 0 ) goto err; 57 index++; } 58 else { 59 smr_setReportError3( smr, xDataXML_get_smrUserInterfaceFromElement( XE ), xDataTOM_smrLibraryID, -1, 60 "invalid element '%s' in xData = 'W_XYs'", XMLChild->name ); 61 goto err; 62 } 63 } 64 65 return( 0 ); 66 67 err: 68 return( 1 ); 69 } 70 /* 71 ************************************************************ 72 */ 73 static int xDataXML_W_XYs_XYsToTOM( statusMessageReporting *smr, xDataXML_element *XE, xDataTOM_XYs *XYs, xDataTOM_axes *axes, 74 int axesOffset ) { 75 76 int index, length; 77 double accuracy, value; 78 79 if( xDataXML_convertAttributeTo_xDataTOM_Int( smr, XE, "index", &index, 1 ) != 0 ) return( 1 ); 80 if( xDataXML_convertAttributeTo_xDataTOM_Int( smr, XE, "length", &length, 1 ) != 0 ) return( 1 ); 81 if( xDataXML_convertAttributeToDouble( smr, XE, "accuracy", &accuracy, 1 ) != 0 ) return( 1 ); 82 if( xDataXML_convertAttributeToDouble( smr, XE, "value", &value, 1 ) != 0 ) return( 1 ); 83 return( xDataXML_XYsDataToTOM( smr, XE, XYs, index, length, value, accuracy, xDataTOM_subAxesType_proxy, axesOffset, axes, NULL ) ); 84 } 85 86 #if defined __cplusplus 87 } 88 #endif 89