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