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_polynomialToTOM( statusMessageReporting *smr, xDataXML_element *XE, xDataTOM_element *TE ) { 21 22 int length, dataProcessed = 0; 23 xDataTOM_xDataInfo *xDI = &(TE->xDataInfo); 24 xDataTOM_polynomial *polynomial = NULL; 25 xDataXML_element *XMLChild; 26 27 if( xDataXML_convertAttributeTo_xDataTOM_Int( smr, XE, "length", &length, 1 ) != 0 ) return( 1 ); 28 if( ( xDI->data = xDataXML_initializeData( smr, XE, TE, xDataTOM_polynomial_ID, sizeof( xDataTOM_polynomial ) ) ) == NULL ) return( 1 ); 29 if( xDataTOM_polynomial_initialize( smr, (xDataTOM_polynomial *) xDI->data, length, &(xDI->axes) ) != 0 ) goto err; 30 polynomial = (xDataTOM_polynomial *) xDI->data; 31 32 for( XMLChild = xDataXML_getFirstElement( XE ); XMLChild != NULL; XMLChild = xDataXML_getNextElement( XMLChild ) ) { 33 if( strcmp( "axes", XMLChild->name ) == 0 ) { 34 continue; } 35 else if( strcmp( "data", XMLChild->name ) == 0 ) { 36 if( dataProcessed ) { 37 smr_setReportError3p( smr, xDataXML_get_smrUserInterfaceFromElement( XE ), xDataTOM_smrLibraryID, -1, "multiple 'data' elements found" ); 38 goto err; 39 } 40 dataProcessed = 1; 41 if( xDataXML_stringToDoubles( smr, XE, XMLChild->text.text, length, (double *) polynomial->coefficients ) != 0 ) goto err; 42 } 43 } 44 if( dataProcessed == 0 ) { 45 smr_setReportError3p( smr, xDataXML_get_smrUserInterfaceFromElement( XE ), xDataTOM_smrLibraryID, -1, "data element missing" ); 46 goto err; 47 } 48 return( 0 ); 49 50 err: 51 if( polynomial != NULL ) xDataTOM_polynomial_release( polynomial ); 52 smr_freeMemory( (void **) &(xDI->data) ); 53 return( 1 ); 54 } 55 56 #if defined __cplusplus 57 } 58 #endif 59