Geant4  10.02.p01
xDataTOM_importXML_V_W_XYs.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 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
int xDataXML_numberOfElementsByTagName(statusMessageReporting *, xDataXML_element *element, char const *tagName)
void * xDataXML_get_smrUserInterfaceFromElement(xDataXML_element *element)
int xDataXML_W_XYsDataToTOM(statusMessageReporting *smr, xDataXML_element *XE, xDataTOM_W_XYs *W_XYs, int index, double value, xDataTOM_axes *axes, int axesOffset)
char const * xDataTOM_axes_getLabel(statusMessageReporting *smr, xDataTOM_axes *axes, int index)
int xDataTOM_smrLibraryID
Definition: xDataTOM.cc:34
int xDataTOM_V_W_XYs_initialize(statusMessageReporting *smr, xDataTOM_V_W_XYs *V_W_XYs, int length, xDataTOM_axes *axes)
xDataTOM_Int xDataXML_convertAttributeTo_xDataTOM_Int(statusMessageReporting *smr, xDataXML_element *element, char const *name, xDataTOM_Int *n, int required)
char const * xDataTOM_V_W_XYs_ID
int xDataXML_V_W_XYsToTOM(statusMessageReporting *smr, xDataXML_element *XE, xDataTOM_element *TE)
static int xDataXML_V_W_XYs_W_XYsToTOM(statusMessageReporting *smr, xDataXML_element *XE, xDataTOM_W_XYs *W_XYs, xDataTOM_axes *axes)
void * smr_freeMemory(void **p)
xDataXML_element * xDataXML_getNextElement(xDataXML_element *element)
xDataXML_element * xDataXML_getFirstElement(xDataXML_element *element)
void * xDataXML_initializeData(statusMessageReporting *smr, xDataXML_element *XE, xDataTOM_element *TE, char const *ID, size_t size)
int xDataXML_convertAttributeToDouble(statusMessageReporting *smr, xDataXML_element *element, char const *name, double *d, int required)