Geant4  v4-10.4-release
 모두 클래스 네임스페이스들 파일들 함수 변수 타입정의 열거형 타입 열거형 멤버 Friends 매크로 그룹들 페이지들
xDataTOM_importXML_XYs.cc
이 파일의 문서화 페이지로 가기
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 
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 */
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 ) {
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
int xDataXML_stringTo_double(statusMessageReporting *smr, void *smrUserInterface, char const *c, double *value, char const *endings, char **e)
xDataTOM_Int xDataXML_convertAttributeTo_xDataTOM_Int(statusMessageReporting *smr, xDataXML_element *element, char const *name, xDataTOM_Int *n, int required)
int xDataXML_axesElememtToTOM(statusMessageReporting *smr, xDataXML_element *XE, xDataTOM_axes *axes)
int xDataXML_XYsToTOM(statusMessageReporting *smr, xDataXML_element *XE, xDataTOM_element *TE)
int xDataXML_stringToDoubles(statusMessageReporting *smr, xDataXML_element *XE, char const *s, int length, double *d)
xDataXML_element * xDataXML_getFirstElement(xDataXML_element *element)
xDataTOM_subAxesType
Definition: xDataTOM.h:24
double accuracy
Definition: xDataTOM.h:82
xDataXML_element * xDataXML_getNextElement(xDataXML_element *element)
xDataTOM_element * element
Definition: xDataTOM.h:152
double * data
Definition: xDataTOM.h:84
char const * xDataTOM_XYs_ID
Definition: xDataTOM_XYs.cc:14
void * xDataXML_get_smrUserInterfaceFromElement(xDataXML_element *element)
xDataTOM_xDataInfo xDataInfo
Definition: xDataTOM.h:187
#define smr_malloc2(smr, size, zero, forItem)
const XML_Char int const XML_Char * value
Definition: expat.h:331
static const G4double d1
int xDataTOM_subAxes_initialize(statusMessageReporting *smr, xDataTOM_subAxes *subAxes, enum xDataTOM_subAxesType type, int offset, xDataTOM_axes *axes, xDataTOM_interpolation *interpolation)
static int xDataXML_XYsDataToTOM2(statusMessageReporting *smr, xDataXML_element *XE, xDataTOM_xDataInfo *xDI, int index, int length, double value, double accuracy)
void * smr_freeMemory(void **p)
xDataTOM_subAxes subAxes
Definition: xDataTOM.h:83
int xDataXML_convertAttributeToDouble(statusMessageReporting *smr, xDataXML_element *element, char const *name, double *d, int required)
double value
Definition: xDataTOM.h:82
#define smr_setReportError3p(smr, userInterface, libraryID, code, fmt)
#define smr_setReportError3(smr, userInterface, libraryID, code, fmt,...)
const char * ID
Definition: xDataTOM.h:151
int xDataXML_XYsDataToTOM(statusMessageReporting *smr, xDataXML_element *XE, xDataTOM_XYs *XYs, int index, int length, double value, double accuracy, enum xDataTOM_subAxesType subAxesType, int axesOffest, xDataTOM_axes *axes, xDataTOM_interpolation *interpolation)
int xDataTOM_smrLibraryID
Definition: xDataTOM.cc:34
xDataTOM_axes axes
Definition: xDataTOM.h:153