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