Geant4  10.02.p01
xDataTOM_importXML_polynomial.cc
Go to the documentation of this file.
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
int xDataXML_polynomialToTOM(statusMessageReporting *smr, xDataXML_element *XE, xDataTOM_element *TE)
void * xDataXML_get_smrUserInterfaceFromElement(xDataXML_element *element)
int xDataTOM_smrLibraryID
Definition: xDataTOM.cc:34
xDataTOM_Int xDataXML_convertAttributeTo_xDataTOM_Int(statusMessageReporting *smr, xDataXML_element *element, char const *name, xDataTOM_Int *n, int required)
char const * xDataTOM_polynomial_ID
void * smr_freeMemory(void **p)
int xDataTOM_polynomial_release(xDataTOM_polynomial *polynomial)
int xDataXML_stringToDoubles(statusMessageReporting *smr, xDataXML_element *XE, char const *s1, int length, double *d1)
xDataXML_element * xDataXML_getNextElement(xDataXML_element *element)
int xDataTOM_polynomial_initialize(statusMessageReporting *smr, xDataTOM_polynomial *polynomial, int length, xDataTOM_axes *axes)
xDataXML_element * xDataXML_getFirstElement(xDataXML_element *element)
void * xDataXML_initializeData(statusMessageReporting *smr, xDataXML_element *XE, xDataTOM_element *TE, char const *ID, size_t size)