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_XYsDataToTOM2( statusMessageReporting *smr, xDataXML_element *XE, xDataTOM_xDataInfo *xDI, int index, int length, double value, 18 double accuracy ); 19 /* 20 ************************************************************ 21 */ 22 int xDataXML_XYsToTOM( statusMessageReporting *smr, xDataXML_element *XE, xDataTOM_element *TE ) { 23 24 int dataProcessed = 0, length; 25 double accuracy; 26 xDataTOM_xDataInfo *xDI = &(TE->xDataInfo); 27 xDataXML_element *XMLChild; 28 29 xDI->element = TE; 30 if( xDataXML_convertAttributeTo_xDataTOM_Int( smr, XE, "length", &length, 1 ) != 0 ) return( 1 ); 31 if( xDataXML_convertAttributeToDouble( smr, XE, "accuracy", &accuracy, 1 ) != 0 ) return( 1 ); 32 if( xDataXML_axesElememtToTOM( smr, XE, &(xDI->axes) ) != 0 ) return( 1 ); 33 for( XMLChild = xDataXML_getFirstElement( XE ); XMLChild != NULL; XMLChild = xDataXML_getNextElement( XMLChild ) ) { 34 if( strcmp( "axes", XMLChild->name ) == 0 ) { 35 continue; } 36 else if( strcmp( "data", XMLChild->name ) == 0 ) { 37 if( dataProcessed ) { 38 smr_setReportError3p( smr, xDataXML_get_smrUserInterfaceFromElement( XE ), xDataTOM_smrLibraryID, -1, "multiple 'data' elements found" ); 39 goto err; 40 } 41 dataProcessed = 1; 42 if( xDataXML_XYsDataToTOM2( smr, XMLChild, xDI, -1, length, 0., accuracy ) != 0 ) goto err; 43 } 44 } 45 if( dataProcessed == 0 ) { 46 smr_setReportError3p( smr, xDataXML_get_smrUserInterfaceFromElement( XE ), xDataTOM_smrLibraryID, -1, "data element missing" ); 47 goto err; 48 } 49 return( 0 ); 50 51 err: 52 return( 1 ); 53 } 54 /* 55 ************************************************************ 56 */ 57 static int xDataXML_XYsDataToTOM2( statusMessageReporting *smr, xDataXML_element *XE, xDataTOM_xDataInfo *xDI, int index, int length, double value, 58 double accuracy ) { 59 60 xDataTOM_XYs *XYs; 61 62 xDI->ID = xDataTOM_XYs_ID; 63 if( ( xDI->data = (xDataTOM_XYs *) smr_malloc2( smr, sizeof( xDataTOM_XYs ), 1, "xDI->data" ) ) == NULL ) goto err; 64 XYs = (xDataTOM_XYs *) xDI->data; 65 66 if( xDataXML_XYsDataToTOM( smr, XE, XYs, index, length, value, accuracy, xDataTOM_subAxesType_proxy, 0, &(xDI->axes), NULL ) != 0 ) goto err; 67 return( 0 ); 68 69 err: 70 smr_freeMemory( (void **) &(xDI->data) ); 71 return( 1 ); 72 } 73 /* 74 ************************************************************ 75 */ 76 int xDataXML_XYsDataToTOM( statusMessageReporting *smr, xDataXML_element *XE, xDataTOM_XYs *XYs, int index, int length, double value, double accuracy, 77 enum xDataTOM_subAxesType subAxesType, int axesOffest, xDataTOM_axes *axes, xDataTOM_interpolation *interpolation ) { 78 79 XYs->index = index; 80 XYs->length = length; 81 XYs->value = value; 82 XYs->accuracy = accuracy; 83 if( xDataTOM_subAxes_initialize( smr, &(XYs->subAxes), subAxesType, axesOffest, axes, interpolation ) != 0 ) return( 1 ); 84 if( ( XYs->data = (double *) smr_malloc2( smr, 2 * length * sizeof( double ), 0, "XYs->data" ) ) == NULL ) goto err; 85 86 if( xDataXML_stringToDoubles( smr, XE, XE->text.text, 2 * length, (double *) XYs->data ) != 0 ) goto err; 87 return( 0 ); 88 89 err: 90 smr_freeMemory( (void **) &(XYs->data) ); 91 return( 1 ); 92 } 93 /* 94 ************************************************************ 95 */ 96 int xDataXML_stringToDoubles( statusMessageReporting *smr, xDataXML_element *XE, char const *s1, int length, double *d1 ) { 97 98 char *e1 = (char *) s1; 99 int i1; 100 101 for( i1 = 0; i1 < length; i1++, d1++, s1 = e1 ) { 102 if( xDataXML_stringTo_double( smr, xDataXML_get_smrUserInterfaceFromElement( XE ), s1, d1, " \n", &e1 ) ) return( 1 ); 103 } 104 while( isspace( *e1 ) ) e1++; /* There should be nothing but white spaces left in the string. */ // Loop checking, 11.06.2015, T. Koi 105 if( *e1 != 0 ) { 106 smr_setReportError3( smr, xDataXML_get_smrUserInterfaceFromElement( XE ), xDataTOM_smrLibraryID, -1, "text contains extra data = %s", e1 ); 107 return( 1 ); 108 } 109 return( 0 ); 110 } 111 112 #if defined __cplusplus 113 } 114 #endif 115