xData.cc File Reference

#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <errno.h>
#include "xData.h"

Go to the source code of this file.

Functions

xData_document * xData_parseReadFile (statusMessageReporting *smr, const char *fileName, xData_xDataTypeOk func, void *userData)
xData_document * xData_parseString (statusMessageReporting *smr, const char *str, xData_xDataTypeOk func, void *userData)
xData_document * xData_parseMalloc (statusMessageReporting *smr, xData_xDataTypeOk func, void *userData)
int xData_parseInitialize (statusMessageReporting *smr, xData_document *doc, xData_xDataTypeOk func, void *userData)
int xData_parseEndOfXML (statusMessageReporting *smr, xData_document *doc)
void * xData_parseFree (statusMessageReporting *smr, xData_document *doc)
int xData_parse (xData_document *doc, const char *s)
int xData_parseIsError (xData_document *doc)
xData_element * xData_getDocumentsElement (xData_document *doc)
xData_element * xData_getFirstElement (xData_element *element)
xData_element * xData_getNextElement (xData_element *element)
enum xData_itemMode xData_getFirstItem (xData_element *element, xData_item *item)
enum xData_itemMode xData_getNextItem (xData_item *item)
char * xData_getAttributesValue (xData_attributionList *attributes, const char *name)
const char * xData_getAttributesValueInElement (xData_element *element, const char *name)
int xData_initializeAttributionList (statusMessageReporting *, xData_attributionList *attributes)
int xData_copyAttributionList (statusMessageReporting *smr, xData_attributionList *dest, xData_attributionList *src)
int xData_attributeListLength (xData_attributionList *attributes)
xData_attribute * xData_attributeByIndex (xData_attributionList *attributes, int index)
int xData_releaseAttributionList (statusMessageReporting *smr, xData_attributionList *attributes)
xData_element * xData_getElements_xDataElement (statusMessageReporting *smr, xData_element *element)
int xData_getCommonData (statusMessageReporting *smr, xData_element *element, xData_Int *index, xData_Int *start, xData_Int *end, xData_Int *length)
int xData_xDataTypeConvertAttributes (statusMessageReporting *smr, xData_element *element)
xData_Int xData_convertAttributeTo_xData_Int (statusMessageReporting *smr, xData_element *element, const char *name, xData_Int *n)
int xData_convertAttributeToDouble (statusMessageReporting *smr, xData_element *element, const char *name, double *d)
int xData_numberOfElementsByTagName (statusMessageReporting *, xData_element *element, const char *tagName)
xData_elementList * xData_getElementsByTagName (statusMessageReporting *smr, xData_element *element, const char *tagName)
xData_elementList * xData_getElementsByTagNameAndSort (statusMessageReporting *smr, xData_element *element, const char *tagName, const char *sortAttributeName, xData_sortElementFunc sortFunction)
xData_element * xData_getOneElementByTagName (statusMessageReporting *smr, xData_element *element, char *name, int required)
void xData_freeElementList (statusMessageReporting *smr, xData_elementList *list)
int xData_is_xDataType (statusMessageReporting *smr, xDataType *xDT, char const *const type, int setMsg)
char const * xData_getFileName (xData_document *doc)
int xData_setFileName (statusMessageReporting *smr, xData_document *doc, char const *fileName)
xData_document * xData_getElementsDocument (xData_element *element)
void * xData_get_smrUserInterfaceFromDocument (xData_document *doc)
void * xData_get_smrUserInterfaceFromElement (xData_element *element)
int xData_stringTo_xData_Int (statusMessageReporting *smr, void *smrUserInterface, char const *c, xData_Int *value, char const *endings, char **e)
int xData_stringTo_double (statusMessageReporting *smr, void *smrUserInterface, char const *c, double *value, char const *endings, char **e)
int xData_addToAccessed (statusMessageReporting *, xData_element *element, int increment)
int xData_getAccessed (statusMessageReporting *, xData_element *element)


Function Documentation

int xData_addToAccessed ( statusMessageReporting *  ,
xData_element *  element,
int  increment 
)

Definition at line 1078 of file xData.cc.

Referenced by tpia_angularEnergy_getFromElement(), tpia_channel_getFromElement(), tpia_Legendre_getFromElement(), tpia_misc_get2d_xShared_yHistogram_data(), tpia_misc_get2dx_y_data(), tpia_misc_get2dxindex_y_data(), tpia_misc_getEqualProbableBin(), tpia_misc_getEqualProbableBins(), tpia_multiplicity_getFromElement(), tpia_product_getFromElement(), and tpia_target_heated_read().

01078                                                                                            {
01079 
01080     element->accessed += increment;
01081     return( element->accessed );
01082 }

xData_attribute* xData_attributeByIndex ( xData_attributionList *  attributes,
int  index 
)

Definition at line 603 of file xData.cc.

00603                                                                                         {
00604 
00605     if( index >= attributes->number ) return( NULL );
00606     return( &(attributes->attributes[index]) );
00607 }

int xData_attributeListLength ( xData_attributionList *  attributes  ) 

Definition at line 596 of file xData.cc.

00596                                                                    {
00597 
00598     return( attributes->number );
00599 }

xData_Int xData_convertAttributeTo_xData_Int ( statusMessageReporting *  smr,
xData_element *  element,
const char *  name,
xData_Int *  n 
)

Definition at line 710 of file xData.cc.

References smr_setMessageError(), xData_get_smrUserInterfaceFromElement(), and xData_getAttributesValueInElement().

Referenced by tpia_angularEnergy_getFromElement(), tpia_channel_getFromElement(), tpia_misc_getEqualProbableBin(), tpia_misc_getEqualProbableBins(), tpia_target_heated_read(), and xData_xDataTypeConvertAttributes().

00710                                                                                                                                     {
00711 /*
00712 *   Returns 1 if no such attribute, -1 if error converting to xData_Int and 0 if successful.
00713 */
00714     const char *value;
00715     char *e;
00716 
00717     if( ( value = xData_getAttributesValueInElement( element, name ) ) == NULL ) return( 1 );
00718     //*n = strtoll( value, &e, 10 );
00719     *n = strtol( value, &e, 10 );
00720     if( *e != 0 ) {
00721         smr_setMessageError( smr, xData_get_smrUserInterfaceFromElement( element ), __FILE__, __LINE__, 1, 
00722             "could not convert attribute %s's value = %s to an integer", name, value );
00723         return( -1 );
00724     }
00725     return( 0 );
00726 }

int xData_convertAttributeToDouble ( statusMessageReporting *  smr,
xData_element *  element,
const char *  name,
double *  d 
)

Definition at line 730 of file xData.cc.

References smr_setMessageError(), xData_get_smrUserInterfaceFromElement(), and xData_getAttributesValueInElement().

Referenced by tpia_angularEnergy_getFromElement(), tpia_misc_getEqualProbableBins(), and tpia_target_read().

00730                                                                                                                        {
00731 /*
00732 *   Returns 1 if no such attribute, -1 if error converting to double and 0 if successful.
00733 */
00734     const char *value;
00735     char *e;
00736 
00737     if( ( value = xData_getAttributesValueInElement( element, name ) ) == NULL ) return( 1 );
00738     *d = strtod( value, &e );
00739     if( *e != 0 ) {
00740         smr_setMessageError( smr, xData_get_smrUserInterfaceFromElement( element) , __FILE__, __LINE__, 1, 
00741             "could not convert attribute %s's values = %s to a double", name, value );
00742         return( -1 );
00743     }
00744     return( 0 );
00745 }

int xData_copyAttributionList ( statusMessageReporting *  smr,
xData_attributionList *  dest,
xData_attributionList *  src 
)

Definition at line 564 of file xData.cc.

Referenced by tpia_channel_getFromElement(), tpia_product_getFromElement(), tpia_target_heated_read(), and tpia_target_read().

00564                                                                                                                       {
00565 /*
00566 *   The dest must not be active, else a memory leak will occur, as this routine does no free-ing.
00567 */
00568     int i;
00569     size_t lens;
00570     xData_attribute *d, *s;
00571     char *p;
00572 
00573     //if( ( dest->attributes = xData_malloc2( smr, src->size, 0, "attributes" ) ) == NULL ) return( 1 );
00574     if( ( dest->attributes = (xData_attribute*) xData_malloc2( smr, src->size, 0, "attributes" ) ) == NULL ) return( 1 );
00575     dest->number = src->number;
00576     dest->size = src->size;
00577     d = dest->attributes;
00578     s = src->attributes;
00579     p = (char *) &(dest->attributes[src->number]);
00580     for( i = 0; i < src->number; i++, s++, d++ ) {
00581         lens = strlen( s->name ) + 1;
00582         d->name = p;
00583         strcpy( p, s->name );
00584         p += lens;
00585         lens = strlen( s->value ) + 1;
00586         d->value= p;
00587         strcpy( p, s->value );
00588         p += lens;
00589     }
00590 
00591     return( 0 );
00592 }

void xData_freeElementList ( statusMessageReporting *  smr,
xData_elementList *  list 
)

Definition at line 832 of file xData.cc.

References xData_free().

Referenced by tpia_angularEnergy_getFromElement(), tpia_Legendre_getFromElement(), and xData_getOneElementByTagName().

00832                                                                                    {
00833 
00834     xData_free( smr, list );
00835 }

void* xData_get_smrUserInterfaceFromDocument ( xData_document *  doc  ) 

Definition at line 944 of file xData.cc.

Referenced by xData_get_smrUserInterfaceFromElement(), and xData_parseEndOfXML().

00944                                                                     {
00945 
00946     if( doc == NULL ) return( NULL );
00947     return( &(doc->smrUserInterface ) );
00948 }

void* xData_get_smrUserInterfaceFromElement ( xData_element *  element  ) 

Definition at line 952 of file xData.cc.

References xData_get_smrUserInterfaceFromDocument(), and xData_getElementsDocument().

Referenced by getRowStartEndAtIndex(), xData_1d_x_copyData(), xData_convertAttributeTo_xData_Int(), xData_convertAttributeToDouble(), xData_getCommonData(), xData_getOneElementByTagName(), xData_is_xDataType(), and xData_xDataTypeConvertAttributes().

00952                                                                       {
00953 
00954     return( xData_get_smrUserInterfaceFromDocument( xData_getElementsDocument( element ) ) );
00955 }

int xData_getAccessed ( statusMessageReporting *  ,
xData_element *  element 
)

Definition at line 1087 of file xData.cc.

01087                                                                           {
01088 
01089     return( element->accessed );
01090 }

char* xData_getAttributesValue ( xData_attributionList *  attributes,
const char *  name 
)

Definition at line 530 of file xData.cc.

Referenced by tpia_misc_pointerToAttributeIfAllOk(), tpia_multiplicity_getTimeScaleFromElement(), tpia_target_getAttributesValue(), tpia_target_heated_read(), and xData_getAttributesValueInElement().

00530                                                                                       {
00531 
00532     int i;
00533     char *value = NULL;
00534 
00535     for( i = 0; i < attributes->number; i++ ) {
00536         if( !strcmp( attributes->attributes[i].name, name ) ) {
00537             value = attributes->attributes[i].value;
00538             break;
00539         }
00540     }
00541     return( value );
00542 }

const char* xData_getAttributesValueInElement ( xData_element *  element,
const char *  name 
)

Definition at line 546 of file xData.cc.

References xData_getAttributesValue().

Referenced by tpia_frame_setFromElement(), tpia_map_readFile(), tpia_target_read(), xData_convertAttributeTo_xData_Int(), xData_convertAttributeToDouble(), and xData_getElementsByTagNameAndSort().

00546                                                                                           {
00547 
00548     return( (const char *) xData_getAttributesValue( &(element->attributes), name ) );
00549 }

int xData_getCommonData ( statusMessageReporting *  smr,
xData_element *  element,
xData_Int *  index,
xData_Int *  start,
xData_Int *  end,
xData_Int *  length 
)

Definition at line 652 of file xData.cc.

References smr_setMessageError(), and xData_get_smrUserInterfaceFromElement().

00653                             {
00654 
00655     if( element->xDataTypeInfo.typeString == NULL ) {
00656         smr_setMessageError( smr, xData_get_smrUserInterfaceFromElement( element ), __FILE__, __LINE__, 1, "element %s is not xData", element->fullName );
00657         return( 1 );
00658     }
00659     *index = element->xDataTypeInfo.index;
00660     *start = element->xDataTypeInfo.start;
00661     *end = element->xDataTypeInfo.end;
00662     *length = element->xDataTypeInfo.length;
00663     return( 0 );
00664 }

xData_element* xData_getDocumentsElement ( xData_document *  doc  ) 

Definition at line 476 of file xData.cc.

Referenced by tpia_map_readFile(), tpia_target_heated_read(), and tpia_target_read().

00476 { return( doc->root.children ); }

xData_element* xData_getElements_xDataElement ( statusMessageReporting *  smr,
xData_element *  element 
)

Definition at line 622 of file xData.cc.

References xData_getOneElementByTagName().

Referenced by tpia_misc_getEqualProbableBins().

00622                                                                                                      {
00623 
00624     //return( xData_getOneElementByTagName( smr, element, "xData", 1 ) );
00625     return( xData_getOneElementByTagName( smr, element, (char*) "xData", 1 ) );
00626 }

xData_elementList* xData_getElementsByTagName ( statusMessageReporting *  smr,
xData_element *  element,
const char *  tagName 
)

Definition at line 761 of file xData.cc.

References xData_getFirstElement(), xData_getNextElement(), and xData_numberOfElementsByTagName().

Referenced by tpia_product_getDecayChannelFromElement(), xData_getElementsByTagNameAndSort(), and xData_getOneElementByTagName().

00761                                                                                                                           {
00762 
00763     int n = xData_numberOfElementsByTagName( smr, element, tagName );
00764     size_t size;
00765     xData_element *child;
00766     xData_elementListItem *p;
00767     xData_elementList *list = NULL;
00768 
00769 
00770     size = sizeof( xData_elementList ) + n * sizeof( xData_elementListItem );
00771     //if( ( list = xData_malloc2( smr, size, 0, "list" ) ) != NULL ) {
00772     if( ( list = (xData_elementList*) xData_malloc2( smr, size, 0, "list" ) ) != NULL ) {
00773         list->n = n;
00774         p = list->items = (xData_elementListItem *) &(list[1]);
00775         for( child = xData_getFirstElement( element ); child != NULL; child = xData_getNextElement( child ) ) {
00776             if( !strcmp( child->name, tagName ) ) {
00777                 p->element = child;
00778                 p->sortString = NULL;
00779                 p++;
00780             }
00781         }
00782     }
00783     return( list );
00784 }

xData_elementList* xData_getElementsByTagNameAndSort ( statusMessageReporting *  smr,
xData_element *  element,
const char *  tagName,
const char *  sortAttributeName,
xData_sortElementFunc  sortFunction 
)

Definition at line 788 of file xData.cc.

References xData_getAttributesValueInElement(), and xData_getElementsByTagName().

Referenced by tpia_angularEnergy_getFromElement(), tpia_Legendre_getFromElement(), and tpia_misc_getEqualProbableBins().

00789                                                                         {
00790 
00791     int i;
00792     xData_elementList *list = xData_getElementsByTagName( smr, element, tagName );
00793     xData_elementListItem *p;
00794 
00795     if( list != NULL ) {
00796         if( sortFunction == NULL ) {
00797             sortFunction = (xData_sortElementFunc) xData_elementList_defaultSorter;
00798             if( sortAttributeName == NULL ) sortFunction = (xData_sortElementFunc) xData_elementList_indexSorter;
00799         }
00800         if( sortAttributeName == NULL ) sortAttributeName = "index";
00801         for( i = 0, p = list->items; i < list->n; i++, p++ ) p->sortString = xData_getAttributesValueInElement( p->element, sortAttributeName );
00802         qsort( list->items, list->n, sizeof( xData_elementListItem ), sortFunction );
00803     }
00804 
00805     return( list );
00806 }

xData_document* xData_getElementsDocument ( xData_element *  element  ) 

Definition at line 934 of file xData.cc.

Referenced by xData_get_smrUserInterfaceFromElement().

00934                                                                     {
00935 
00936     xData_rootElement* root = element->parentRoot;
00937 
00938     while( root->parentRoot != NULL ) root = root->parentRoot;
00939     return( root->xData_doc );
00940 }

char const* xData_getFileName ( xData_document *  doc  ) 

Definition at line 914 of file xData.cc.

00914                                                      {
00915 
00916     return( doc->fileName );
00917 }

xData_element* xData_getFirstElement ( xData_element *  element  ) 

Definition at line 477 of file xData.cc.

Referenced by tpia_map_readFile(), tpia_multiplicity_getFromElement(), tpia_target_heated_read(), tpia_target_read(), xData_getElementsByTagName(), xData_getFirstItem(), and xData_numberOfElementsByTagName().

00477 { return( element->childrenRoot.children ); }

enum xData_itemMode xData_getFirstItem ( xData_element *  element,
xData_item *  item 
)

Definition at line 482 of file xData.cc.

References xData_getFirstElement().

00482                                                                                    {
00483 
00484     item->parentElement = element;
00485     item->element = xData_getFirstElement( element );
00486     if( item->element == NULL ) {
00487         item->mode = xData_itemModeText;
00488         if( element->text.length == 0 ) item->mode = xData_itemModeEnd; }
00489     else {
00490         item->mode = xData_itemModeElement;
00491         if( 0 < item->element->textOffset ) item->mode = xData_itemModeText;
00492     }
00493     item->textOffset = 0;
00494     item->textLength = element->text.length;
00495     if( item->element != NULL ) item->textLength = item->element->textOffset;
00496     item->text = element->text.text;
00497     return( item->mode );
00498 }

xData_element* xData_getNextElement ( xData_element *  element  ) 

Definition at line 478 of file xData.cc.

Referenced by tpia_map_readFile(), tpia_multiplicity_getFromElement(), tpia_target_heated_read(), tpia_target_read(), xData_getElementsByTagName(), and xData_numberOfElementsByTagName().

00478 { return( element->next ); }

enum xData_itemMode xData_getNextItem ( xData_item *  item  ) 

Definition at line 502 of file xData.cc.

00502                                                           {
00503 
00504     if( item->mode != xData_itemModeEnd ) {
00505         if( item->mode == xData_itemModeText ) {
00506             item->mode = xData_itemModeElement;
00507             if( item->element == NULL ) item->mode = xData_itemModeEnd;
00508             item->textOffset += item->textLength;
00509             item->textLength = 0;
00510             item->text = &(item->parentElement->text.text[item->textOffset]); }
00511         else {
00512             item->element = item->element->next;
00513             item->mode = xData_itemModeText;
00514             if( item->element == NULL ) {
00515                 if( item->textOffset < item->parentElement->text.length ) {
00516                     item->textLength = item->parentElement->text.length - item->textOffset; }
00517                 else {
00518                     item->mode = xData_itemModeEnd;
00519                 } }
00520             else {
00521                 item->textLength = item->element->textOffset - item->textOffset;
00522             }
00523         }
00524     }
00525     return( item->mode );
00526 }

xData_element* xData_getOneElementByTagName ( statusMessageReporting *  smr,
xData_element *  element,
char *  name,
int  required 
)

Definition at line 810 of file xData.cc.

References smr_setMessageError(), xData_freeElementList(), xData_get_smrUserInterfaceFromElement(), and xData_getElementsByTagName().

Referenced by tpia_angularEnergy_getFromElement(), tpia_channel_getFromElement(), tpia_misc_get2d_xShared_yHistogram_data(), tpia_misc_get2dx_y_data(), tpia_misc_get2dxindex_y_data(), tpia_misc_getEqualProbableBin(), tpia_target_heated_read(), and xData_getElements_xDataElement().

00810                                                                                                                              {
00811 
00812     xData_elementList *list;
00813     xData_element *xData = NULL;
00814 
00815     if( ( list = xData_getElementsByTagName( smr, element, name ) ) != NULL ) {
00816         if( list->n == 0 ) {
00817             if( required ) smr_setMessageError( smr, xData_get_smrUserInterfaceFromElement( element ), __FILE__, __LINE__, 
00818                 1, "element %s does not have sub-element named %s", element->fullName, name ); }
00819         else if( list->n > 1 ) {
00820             smr_setMessageError( smr, xData_get_smrUserInterfaceFromElement( element ), __FILE__, __LINE__, 1, 
00821                 "element %s contains more than one sub-element named %s", element->fullName, name ); }
00822         else {
00823             xData = list->items[0].element;
00824         }
00825         xData_freeElementList( smr, list );
00826     }
00827     return( xData );
00828 }

int xData_initializeAttributionList ( statusMessageReporting *  ,
xData_attributionList *  attributes 
)

Definition at line 554 of file xData.cc.

00554                                                                                                    {
00555 
00556     attributes->number = 0;
00557     attributes->size = 0;
00558     attributes->attributes = NULL;
00559     return( 0 );
00560 }

int xData_is_xDataType ( statusMessageReporting *  smr,
xDataType *  xDT,
char const *const   type,
int  setMsg 
)

Definition at line 900 of file xData.cc.

References smr_setMessageError(), and xData_get_smrUserInterfaceFromElement().

Referenced by xData_is_1d_x(), xData_is_2d_xindex_y(), xData_is_2d_xShared_yHistogram(), xData_is_2d_xy(), and xData_is_matrix().

00900                                                                                                            {
00901 
00902     if( xDT->typeString == NULL ) {
00903         if( setMsg ) smr_setMessageError( smr, xData_get_smrUserInterfaceFromElement( xDT->element ), __FILE__, __LINE__, 1, 
00904             "element %s not xData object", xDT->element->fullName ); }
00905     else if( xDT->typeString != type ) {
00906         if( setMsg ) smr_setMessageError( smr, xData_get_smrUserInterfaceFromElement( xDT->element ), __FILE__, __LINE__, 1, 
00907             "Element %s is not xData object of type %s", type );
00908     }
00909     return( xDT->typeString == type );
00910 }

int xData_numberOfElementsByTagName ( statusMessageReporting *  ,
xData_element *  element,
const char *  tagName 
)

Definition at line 750 of file xData.cc.

References xData_getFirstElement(), and xData_getNextElement().

Referenced by tpia_target_heated_read(), and xData_getElementsByTagName().

00750                                                                                                              {
00751 
00752     int n = 0;
00753     xData_element *child;
00754 
00755     for( child = xData_getFirstElement( element ); child != NULL; child = xData_getNextElement( child ) ) if( !strcmp( child->name, tagName ) ) n++;
00756     return( n );
00757 }

int xData_parse ( xData_document *  doc,
const char *  s 
)

Definition at line 251 of file xData.cc.

References XML_Parse().

Referenced by xData_parseReadFile(), and xData_parseString().

00251                                                       {
00252 
00253     if( doc->status != xData_statusParsing ) return( doc->status );
00254     if( XML_Parse( doc->xmlParser, s, strlen( s ), 0 ) == XML_STATUS_ERROR ) return( -1 );
00255     return( 0 );
00256 }

int xData_parseEndOfXML ( statusMessageReporting *  smr,
xData_document *  doc 
)

Definition at line 187 of file xData.cc.

References smr_isOk(), smr_setMessageError(), xData_get_smrUserInterfaceFromDocument(), XML_ErrorString(), XML_GetCurrentColumnNumber(), XML_GetCurrentLineNumber(), XML_GetErrorCode(), XML_Parse(), and XML_ParserFree().

Referenced by xData_parseFree(), xData_parseReadFile(), and xData_parseString().

00187                                                                             {
00188 
00189     if( doc->xmlParser ) {
00190         doc->err = XML_GetErrorCode( doc->xmlParser );
00191         doc->err_line = XML_GetCurrentLineNumber( doc->xmlParser );
00192         doc->err_column = XML_GetCurrentColumnNumber( doc->xmlParser );
00193         if( smr_isOk( smr ) && ( XML_Parse( doc->xmlParser, NULL, 0, 1 ) == XML_STATUS_ERROR ) ) {
00194             doc->status = xData_statusError;
00195             smr_setMessageError( smr, xData_get_smrUserInterfaceFromDocument( doc ), __FILE__, __LINE__, xData_errXMLParser, 
00196                 "status = %d\nXML_Error code = %d\nXML_ErrorString = %s\nerror line, column = %d, %d", xData_errXMLParser, 
00197                 doc->err, XML_ErrorString( doc->err ), doc->err_line, doc->err_column );
00198         }
00199         XML_ParserFree( doc->xmlParser );
00200         doc->xmlParser = NULL;
00201         if( doc->status != xData_statusError ) doc->status = xData_statusCompleted;
00202     }
00203     return( 0 );
00204 }

void* xData_parseFree ( statusMessageReporting *  smr,
xData_document *  doc 
)

Definition at line 208 of file xData.cc.

References xData_free(), and xData_parseEndOfXML().

Referenced by tpia_map_readFile(), tpia_target_heated_read(), tpia_target_read(), xData_parseMalloc(), xData_parseReadFile(), and xData_parseString().

00208                                                                           {
00209 
00210     xData_parseEndOfXML( smr, doc );
00211     //doc->root.children = xData_parseFreeElement( smr, doc->root.children );
00212     doc->root.children = (xData_element*) xData_parseFreeElement( smr, doc->root.children );
00213     //doc->fileName = xData_free( smr, doc->fileName );
00214     doc->fileName = (char*) xData_free( smr, doc->fileName );
00215     xData_smrUserInterfaceFree( doc );
00216     xData_free( smr, doc );
00217     return( NULL );
00218 }

int xData_parseInitialize ( statusMessageReporting *  smr,
xData_document *  doc,
xData_xDataTypeOk  func,
void *  userData 
)

Definition at line 157 of file xData.cc.

References smr_isOk(), smr_setMessageError(), XML_ParserCreate(), XML_SetCharacterDataHandler(), XML_SetElementHandler(), and XML_SetUserData().

Referenced by xData_parseMalloc().

00157                                                                                                                       {
00158 
00159     XML_Parser xmlParser;
00160 
00161     doc->status = xData_statusParsing;
00162     doc->error = xData_errNone;
00163     //doc->err = 0;
00164     doc->err = (XML_Error) 0;
00165     doc->err_line = 0;
00166     doc->err_column = 0;
00167     doc->fileName = NULL;
00168     doc->xDataTypeOk_userFunction = func;
00169     doc->xDataTypeOk_userData = userData;
00170     xData_smrUserInterfaceInitialize( doc );
00171     doc->smr= smr;
00172     doc->xmlParser = xmlParser = XML_ParserCreate( NULL );
00173     if( xmlParser == NULL ) {
00174         smr_setMessageError( smr, NULL, __FILE__, __LINE__, xData_errXML_ParserCreate, "XML_ParserCreate failed" ); }
00175     else {
00176         XML_SetUserData( doc->xmlParser, doc  );
00177         xData_parseInitializeRootElement( doc, &(doc->root), NULL, 0 );
00178         doc->currentRoot = &(doc->root);
00179         XML_SetElementHandler( xmlParser, xData_parseStartElement, xData_parseEndElement );
00180         XML_SetCharacterDataHandler( xmlParser, xData_parseCharacterData );
00181     }
00182     return( !smr_isOk( smr ) );
00183 }

int xData_parseIsError ( xData_document *  doc  ) 

Definition at line 469 of file xData.cc.

00469                                               {
00470 
00471     return( doc->status == xData_statusError );
00472 }

xData_document* xData_parseMalloc ( statusMessageReporting *  smr,
xData_xDataTypeOk  func,
void *  userData 
)

Definition at line 141 of file xData.cc.

References xData_parseFree(), and xData_parseInitialize().

Referenced by xData_parseReadFile(), and xData_parseString().

00141                                                                                                          {
00142 /*
00143 *   Returns NULL is any error occurred.
00144 */
00145     xData_document *doc;
00146 
00147     //if( ( doc = xData_malloc2( smr, sizeof( xData_document ), 1, "xData_document" ) ) != NULL ) {
00148     if( ( doc = (xData_document*) xData_malloc2( smr, sizeof( xData_document ), 1, "xData_document" ) ) != NULL ) {
00149         //if( xData_parseInitialize( smr, doc, func, userData ) ) doc = xData_parseFree( smr, doc );
00150         if( xData_parseInitialize( smr, doc, func, userData ) ) doc = (xData_document*) xData_parseFree( smr, doc );
00151     }
00152     return( doc );
00153 }

xData_document* xData_parseReadFile ( statusMessageReporting *  smr,
const char *  fileName,
xData_xDataTypeOk  func,
void *  userData 
)

Definition at line 84 of file xData.cc.

References buffer, CLHEP::detail::n, smr_isOk(), smr_setMessageError(), xData_parse(), xData_parseEndOfXML(), xData_parseFree(), xData_parseMalloc(), and xData_setFileName().

Referenced by tpia_map_readFile(), tpia_target_heated_read(), and tpia_target_read().

00084                                                                                                                                  {
00085 /*
00086 *   Returns NULL is any error occurred. If an error occurs in an expat routine, xData_parseEndOfXML will set smr appropriately.
00087 */
00088     int f;
00089     char buffer[10 * 1000];
00090     ssize_t count, n = sizeof( buffer ) - 1;
00091     ssize_t s = 0;
00092     xData_document *doc = NULL;
00093 
00094     if( ( doc = xData_parseMalloc( smr, func, userData ) ) != NULL ) {
00095         if( xData_setFileName( smr, doc, fileName ) == 0 ) {
00096             f = open( fileName, O_RDONLY );
00097             if( f == -1 ) {
00098                 xData_parseEndOfXML( smr, doc );
00099                 smr_setMessageError( smr, NULL, __FILE__, __LINE__, xData_errFileError, "could not open file %s", fileName ); }
00100             else {
00101                 while( ( count = read( f, buffer, n ) ) > 0 ) {
00102                     s += count;
00103                     buffer[count] = 0;
00104                     if( xData_parse( doc, buffer ) ) break;
00105                     if( !smr_isOk( doc->smr ) ) break;
00106                 }
00107                 close( f );
00108                 xData_parseEndOfXML( smr, doc );
00109                 if( count < 0 ) smr_setMessageError( smr, NULL, __FILE__, __LINE__, xData_errFileError, 
00110                     "read failed with errno = %d for %s", errno, fileName );
00111             }
00112         }
00113         if( ( doc != NULL ) && ( !smr_isOk( smr ) ) ) {
00114             xData_parseFree( smr, doc );
00115             doc = NULL;
00116         }
00117     }
00118     return( doc );
00119 }

xData_document* xData_parseString ( statusMessageReporting *  smr,
const char *  str,
xData_xDataTypeOk  func,
void *  userData 
)

Definition at line 123 of file xData.cc.

References smr_isOk(), xData_parse(), xData_parseEndOfXML(), xData_parseFree(), and xData_parseMalloc().

00123                                                                                                                           {
00124 /*
00125 *   Returns NULL is any error occurred. If an error occurs in an expat routine, xData_parseEndOfXML will set smr appropriately.
00126 */
00127     xData_document *doc = NULL;
00128     if( ( doc = xData_parseMalloc( smr, func, userData ) ) != NULL ) {
00129         xData_parse( doc, str );
00130         xData_parseEndOfXML( smr, doc );
00131         if( !smr_isOk( smr ) ) {
00132             xData_parseFree( smr, doc );
00133             doc = NULL;
00134         }
00135     }
00136     return( doc );
00137 }

int xData_releaseAttributionList ( statusMessageReporting *  smr,
xData_attributionList *  attributes 
)

Definition at line 611 of file xData.cc.

References xData_free().

Referenced by tpia_channel_release(), tpia_product_release(), tpia_target_heated_release(), and tpia_target_release().

00611                                                                                                    {
00612 
00613     attributes->number = 0;
00614     attributes->size = 0;
00615     //attributes->attributes = xData_free( smr, attributes->attributes );
00616     attributes->attributes = (xData_attribute*) xData_free( smr, attributes->attributes );
00617     return( 0 );
00618 }

int xData_setFileName ( statusMessageReporting *  smr,
xData_document *  doc,
char const *  fileName 
)

Definition at line 921 of file xData.cc.

References xData_free().

Referenced by xData_parseReadFile().

00921                                                                                                 {
00922 
00923     doc->fileName = (char*) xData_free( smr, doc->fileName );
00924     if( fileName != NULL ) {
00925         //if( ( doc->fileName = xData_malloc2( smr, strlen( fileName ) + 1, 0, "doc->fileName" ) ) == NULL ) return( 1 );
00926         if( ( doc->fileName = (char*) xData_malloc2( smr, strlen( fileName ) + 1, 0, "doc->fileName" ) ) == NULL ) return( 1 );
00927         strcpy( doc->fileName, fileName );
00928     }
00929     return( 0 );
00930 }

int xData_stringTo_double ( statusMessageReporting *  smr,
void *  smrUserInterface,
char const *  c,
double *  value,
char const *  endings,
char **  e 
)

Definition at line 1044 of file xData.cc.

References smr_setMessageError().

01044                                                                                                                                               {
01045 
01046     char const *s;
01047     char tmp[64];
01048     int status = 1, n = sizeof( tmp );
01049 
01050     for( s = c; *s != 0; s++ ) if( !isspace( *s ) ) break;
01051     *value = strtod( s, e );
01052     if( *e == s ) {
01053         smr_setMessageError(smr, smrUserInterface, __FILE__, __LINE__, 1, "could not convert \"%s\" to an double", xData_shortStringForMessage( n, tmp, c ));}
01054     else {
01055         if( *endings == 0 ) while( isspace( **e ) ) (*e)++;
01056         if( **e == 0 ) {
01057             status = 0; }
01058         else {
01059             if( *endings == 0 ) {
01060                 smr_setMessageError( smr, smrUserInterface, __FILE__, __LINE__, 1, "double string \"%s\" does not end with a '\\0'", 
01061                     xData_shortStringForMessage( n, tmp, c ) ); }
01062             else {
01063                 if( strchr( endings, **e ) == NULL ) {
01064                     smr_setMessageError( smr, smrUserInterface, __FILE__, __LINE__, 1, "double string \"%s\" does not end with a white space or a '\\0\'", 
01065                         xData_shortStringForMessage( n, tmp, c ) ); }
01066                 else {
01067                     status = 0;
01068                 }
01069             }
01070         }
01071     }
01072     return( status );
01073 }

int xData_stringTo_xData_Int ( statusMessageReporting *  smr,
void *  smrUserInterface,
char const *  c,
xData_Int *  value,
char const *  endings,
char **  e 
)

Definition at line 1010 of file xData.cc.

References smr_setMessageError().

01010                                                                                                                                                     {
01011 
01012     char const *s;
01013     char tmp[64];
01014     int status = 1, n = sizeof( tmp );
01015 
01016     for( s = c; *s != 0; s++ ) if( !isspace( *s ) ) break;
01017     //*value = strtoll( s, e, 10 );
01018     *value = strtol( s, e, 10 );
01019     if( *e == s ) {
01020         smr_setMessageError(smr, smrUserInterface, __FILE__, __LINE__, 1, "could not convert \"%s\" to an integer", xData_shortStringForMessage( n, tmp, c ));}
01021     else {
01022         if( *endings == 0 ) while( isspace( **e ) ) (*e)++;
01023         if( **e == 0 ) {
01024             status = 0; }
01025         else {
01026             if( *endings == 0 ) {
01027                 smr_setMessageError( smr, smrUserInterface, __FILE__, __LINE__, 1, "integer string \"%s\" does not end with a '\\0'", 
01028                     xData_shortStringForMessage( n, tmp, c ) ); }
01029             else {
01030                 if( strchr( endings, **e ) == NULL ) {
01031                     smr_setMessageError( smr, smrUserInterface, __FILE__, __LINE__, 1, "integer string \"%s\" does not end with a white space or a '\\0\'", 
01032                         xData_shortStringForMessage( n, tmp, c ) ); }
01033                 else {
01034                     status = 0;
01035                 }
01036             }
01037         }
01038     }
01039     return( status );
01040 }

int xData_xDataTypeConvertAttributes ( statusMessageReporting *  smr,
xData_element *  element 
)

Definition at line 668 of file xData.cc.

References smr_setMessageError(), xData_convertAttributeTo_xData_Int(), and xData_get_smrUserInterfaceFromElement().

Referenced by xData_init_1d_x(), xData_init_2d_xindex_y(), xData_init_2d_xShared_yHistogram(), xData_init_2d_xy(), and xData_init_matrix().

00668                                                                                             {
00669 
00670     xDataType *xDT = &(element->xDataTypeInfo);
00671     void *smrUser = xData_get_smrUserInterfaceFromElement( element );
00672 
00673     xDT->index = -1;
00674     xDT->start = -1;
00675     xDT->end = -1;
00676     xDT->length = -1;
00677     if( ( xDT->indexPresent = xData_convertAttributeTo_xData_Int( smr, element, "index", &(xDT->index) ) ) < 0 ) return( 1 );
00678     if( ( xDT->startPresent = xData_convertAttributeTo_xData_Int( smr, element, "start", &(xDT->start) ) ) < 0 ) return( 1 );
00679     if( ( xDT->endPresent = xData_convertAttributeTo_xData_Int( smr, element, "end", &(xDT->end) ) ) < 0 ) return( 1 );
00680     if( ( xDT->lengthPresent = xData_convertAttributeTo_xData_Int( smr, element, "length", &(xDT->length) ) ) < 0 ) return( 1 );
00681     if( ( xDT->endPresent > 0 ) ) {
00682         if( xDT->lengthPresent > 0 ) {
00683             smr_setMessageError( smr, smrUser, __FILE__, __LINE__, 1, "missing length (or end) in xData" );
00684             return( 1 );
00685         }
00686         xDT->end = xDT->length; }
00687     else {
00688         if( xDT->lengthPresent > 0 ) xDT->length = xDT->end;
00689     }
00690 
00691     if( xDT->startPresent > 0 ) xDT->start = 0;
00692     if( xDT->start < 0 ) {
00693         smr_setMessageError( smr, smrUser, __FILE__, __LINE__, 1, "start = %d < 0", xDT->start );
00694         return( 1 );
00695     }
00696     if( xDT->end < xDT->start ) {
00697         smr_setMessageError( smr, smrUser, __FILE__, __LINE__, 1, "start = %d >= end = %d", xDT->start, xDT->end );
00698         return( 1 );
00699     }
00700     if( xDT->length < 0 ) {
00701         smr_setMessageError( smr, smrUser, __FILE__, __LINE__, 1, "length = %d < 0", xDT->length );
00702         return( 1 );
00703     }
00704 
00705     return( 0 );
00706 }


Generated on Mon May 27 17:51:17 2013 for Geant4 by  doxygen 1.4.7