Commit 329fde434a836aba90fc15dd11ea7bf136c210af

Authored by Jürgen Knödlseder
1 parent e3a47b69

Add GXmlElement::has_attribute() method and correct tscalc flag handling in GModel.

ChangeLog
1 -2015-02-04 Juergen Knoedlseder <jurgen.knodlseder@irap.omp.eu> 1 +2015-02-05 Juergen Knoedlseder <jurgen.knodlseder@irap.omp.eu>
2 2
3 * Version 1.0.0 released 3 * Version 1.0.0 released
4 ======================== 4 ========================
@@ -12,6 +12,7 @@ @@ -12,6 +12,7 @@
12 Do not dump unqueried parameters (#1349) 12 Do not dump unqueried parameters (#1349)
13 Add GBilinear class 13 Add GBilinear class
14 Add WCS projections (MOL) 14 Add WCS projections (MOL)
  15 + Add GXmlElement::has_attribute() method
15 16
16 17
17 2015-01-07 Juergen Knoedlseder <jurgen.knodlseder@irap.omp.eu> 18 2015-01-07 Juergen Knoedlseder <jurgen.knodlseder@irap.omp.eu>
@@ -2,7 +2,7 @@ New Features and Important Changes in GammaLib 1.0.0 @@ -2,7 +2,7 @@ New Features and Important Changes in GammaLib 1.0.0
2 2
3 Author(s) : Juergen Knoedlseder 3 Author(s) : Juergen Knoedlseder
4 4
5 -4 February 2015 5 +5 February 2015
6 6
7 7
8 1. Introduction 8 1. Introduction
@@ -93,7 +93,8 @@ bilinear interpolations within GammaLib. @@ -93,7 +93,8 @@ bilinear interpolations within GammaLib.
93 93
94 14. XML module 94 14. XML module
95 -------------- 95 --------------
96 -None 96 +The method GXmlElement::has_attribute() has been added to check whether an
  97 +XML element contains a given attribute.
97 98
98 99
99 15. VO module 100 15. VO module
include/GXmlElement.hpp
1 /*************************************************************************** 1 /***************************************************************************
2 * GXmlElement.hpp - XML element node class definition * 2 * GXmlElement.hpp - XML element node class definition *
3 * ----------------------------------------------------------------------- * 3 * ----------------------------------------------------------------------- *
4 - * copyright (C) 2010-2014 by Juergen Knoedlseder * 4 + * copyright (C) 2010-2015 by Juergen Knoedlseder *
5 * ----------------------------------------------------------------------- * 5 * ----------------------------------------------------------------------- *
6 * * 6 * *
7 * This program is free software: you can redistribute it and/or modify * 7 * This program is free software: you can redistribute it and/or modify *
@@ -61,15 +61,16 @@ public: @@ -61,15 +61,16 @@ public:
61 virtual void clear(void); 61 virtual void clear(void);
62 virtual GXmlElement* clone(void) const; 62 virtual GXmlElement* clone(void) const;
63 virtual std::string classname(void) const; 63 virtual std::string classname(void) const;
64 - const std::string& name(void) const { return m_name; }  
65 - void name(const std::string& name) { m_name=name; } 64 + const std::string& name(void) const;
  65 + void name(const std::string& name);
66 std::string attribute(const std::string& name) const; 66 std::string attribute(const std::string& name) const;
67 void attribute(const std::string& name, const std::string& value); 67 void attribute(const std::string& name, const std::string& value);
  68 + bool has_attribute(const std::string& name) const;
68 void remove_attribute(const std::string& name); 69 void remove_attribute(const std::string& name);
69 - GXmlNode* parent(void) const { return m_parent; }  
70 - void parent(GXmlNode* node) { m_parent = node; } 70 + GXmlNode* parent(void) const;
  71 + void parent(GXmlNode* parent);
71 virtual void write(GUrl& url, const int& indent = 0) const; 72 virtual void write(GUrl& url, const int& indent = 0) const;
72 - virtual NodeType type(void) const { return NT_ELEMENT; } 73 + virtual NodeType type(void) const;
73 virtual std::string print(const GChatter& chatter = NORMAL, 74 virtual std::string print(const GChatter& chatter = NORMAL,
74 const int& indent = 0) const; 75 const int& indent = 0) const;
75 76
@@ -100,4 +101,66 @@ std::string GXmlElement::classname(void) const @@ -100,4 +101,66 @@ std::string GXmlElement::classname(void) const
100 return ("GXmlElement"); 101 return ("GXmlElement");
101 } 102 }
102 103
  104 +
  105 +/***********************************************************************//**
  106 + * @brief Return XML element name
  107 + *
  108 + * @return XML element name.
  109 + ***************************************************************************/
  110 +inline
  111 +const std::string& GXmlElement::name(void) const
  112 +{
  113 + return (m_name);
  114 +}
  115 +
  116 +
  117 +/***********************************************************************//**
  118 + * @brief Set XML element name
  119 + *
  120 + * @param[in] name XML element name.
  121 + ***************************************************************************/
  122 +inline
  123 +void GXmlElement::name(const std::string& name)
  124 +{
  125 + m_name = name;
  126 + return;
  127 +}
  128 +
  129 +
  130 +/***********************************************************************//**
  131 + * @brief Return parent of XML element
  132 + *
  133 + * @return Parent of XML element.
  134 + ***************************************************************************/
  135 +inline
  136 +GXmlNode* GXmlElement::parent(void) const
  137 +{
  138 + return (m_parent);
  139 +}
  140 +
  141 +
  142 +/***********************************************************************//**
  143 + * @brief Set parent of XML element
  144 + *
  145 + * @param[in] node Parent of XML element.
  146 + ***************************************************************************/
  147 +inline
  148 +void GXmlElement::parent(GXmlNode* parent)
  149 +{
  150 + m_parent = parent;
  151 + return;
  152 +}
  153 +
  154 +
  155 +/***********************************************************************//**
  156 + * @brief Return XML node type
  157 + *
  158 + * @return XML node type (NT_ELEMENT).
  159 + ***************************************************************************/
  160 +inline
  161 +GXmlNode::NodeType GXmlElement::type(void) const
  162 +{
  163 + return (NT_ELEMENT);
  164 +}
  165 +
103 #endif /* GXMLELEMENT_HPP */ 166 #endif /* GXMLELEMENT_HPP */
pyext/GXmlElement.i
@@ -50,9 +50,10 @@ public: @@ -50,9 +50,10 @@ public:
50 void name(const std::string& name); 50 void name(const std::string& name);
51 std::string attribute(const std::string& name) const; 51 std::string attribute(const std::string& name) const;
52 void attribute(const std::string& name, const std::string& value); 52 void attribute(const std::string& name, const std::string& value);
  53 + bool has_attribute(const std::string& name) const;
53 void remove_attribute(const std::string& name); 54 void remove_attribute(const std::string& name);
54 GXmlNode* parent(void) const; 55 GXmlNode* parent(void) const;
55 - void parent(GXmlNode* node); 56 + void parent(GXmlNode* parent);
56 virtual void write(GUrl& url, const int& indent = 0) const; 57 virtual void write(GUrl& url, const int& indent = 0) const;
57 virtual NodeType type(void) const; 58 virtual NodeType type(void) const;
58 }; 59 };
src/model/GModelSky.cpp
@@ -666,16 +666,16 @@ void GModelSky::read(const GXmlElement&amp; xml) @@ -666,16 +666,16 @@ void GModelSky::read(const GXmlElement&amp; xml)
666 name(xml.attribute("name")); 666 name(xml.attribute("name"));
667 667
668 // Set model TS 668 // Set model TS
669 - std::string ts = xml.attribute("ts");  
670 - if (ts.length() > 0) { 669 + if (xml.has_attribute("ts")) {
  670 + std::string ts = xml.attribute("ts");
671 this->ts(gammalib::todouble(ts)); 671 this->ts(gammalib::todouble(ts));
672 } 672 }
673 673
674 - // Check flag if TS value should be computed  
675 - bool tscalc = (xml.attribute("tscalc") == "1") ? true : false;  
676 -  
677 - // Set flag if TS value should be computed  
678 - this->tscalc(tscalc); 674 + // Set TS computation flag
  675 + if (xml.has_attribute("tscalc")) {
  676 + bool tscalc = (xml.attribute("tscalc") == "1") ? true : false;
  677 + this->tscalc(tscalc);
  678 + }
679 679
680 // Set instruments 680 // Set instruments
681 instruments(xml.attribute("instrument")); 681 instruments(xml.attribute("instrument"));
src/xml/GXmlElement.cpp
1 /*************************************************************************** 1 /***************************************************************************
2 * GXmlElement.cpp - XML element node class implementation * 2 * GXmlElement.cpp - XML element node class implementation *
3 * ----------------------------------------------------------------------- * 3 * ----------------------------------------------------------------------- *
4 - * copyright (C) 2010-2013 by Juergen Knoedlseder * 4 + * copyright (C) 2010-2015 by Juergen Knoedlseder *
5 * ----------------------------------------------------------------------- * 5 * ----------------------------------------------------------------------- *
6 * * 6 * *
7 * This program is free software: you can redistribute it and/or modify * 7 * This program is free software: you can redistribute it and/or modify *
@@ -264,6 +264,33 @@ void GXmlElement::attribute(const std::string&amp; name, const std::string&amp; value) @@ -264,6 +264,33 @@ void GXmlElement::attribute(const std::string&amp; name, const std::string&amp; value)
264 264
265 265
266 /***********************************************************************//** 266 /***********************************************************************//**
  267 + * @brief Check if element has a given attribute
  268 + *
  269 + * @param[in] name Attribute name.
  270 + * @return True if attribute exists, false otherwise.
  271 + *
  272 + * Checks whether the element contains an attribute with @p name. If the
  273 + * attribute was found true is returned, false otherwise.
  274 + ***************************************************************************/
  275 +bool GXmlElement::has_attribute(const std::string& name) const
  276 +{
  277 + // Initialise found flag
  278 + bool found = false;
  279 +
  280 + // Search attribute value in list of attributes
  281 + for (int i = 0; i < m_attr.size(); ++i) {
  282 + if (m_attr[i]->name() == name) {
  283 + found = true;
  284 + break;
  285 + }
  286 + }
  287 +
  288 + // Return found flag
  289 + return found;
  290 +}
  291 +
  292 +
  293 +/***********************************************************************//**
267 * @brief Remove attribute from element 294 * @brief Remove attribute from element
268 * 295 *
269 * @param[in] name Attribute name. 296 * @param[in] name Attribute name.