Changeset 18:66f0f7c055b1 in rrlib_xml


Ignore:
Timestamp:
25.12.2010 05:59:27 (9 years ago)
Author:
Tobias Föhst <foehst@…>
Branch:
default
Phase:
public
Convert:
svn:3219ad6e-c0b7-4ac2-9554-e22e195eef7a/trunk@19
Message:

Added const_iterator and method to set complete content of tXMLNode

Files:
2 edited

Legend:

Unmodified
Added
Removed
  • tXMLNode.cpp

    r17 r18  
    212212 
    213213//---------------------------------------------------------------------- 
     214// tXMLNode SetContent 
     215//---------------------------------------------------------------------- 
     216void tXMLNode::SetContent(const std::string &content) 
     217{ 
     218  xmlNodeSetContentLen(this, reinterpret_cast<const xmlChar *>(content.c_str()), content.length()); 
     219} 
     220 
     221//---------------------------------------------------------------------- 
    214222// tXMLNode RemoveTextContent 
    215223//---------------------------------------------------------------------- 
  • tXMLNode.h

    r16 r18  
    132132public: 
    133133 
    134   class iterator : public std::iterator<std::forward_iterator_tag, tXMLNode> 
    135   { 
     134  class const_iterator; 
     135 
     136  class iterator : public std::iterator<std::forward_iterator_tag, tXMLNode, size_t> 
     137  { 
     138    friend class const_iterator; 
    136139    pointer element; 
    137140 
     
    181184  }; 
    182185 
     186  class const_iterator : public std::iterator<std::forward_iterator_tag, const tXMLNode, size_t> 
     187  { 
     188    pointer element; 
     189 
     190  public: 
     191    inline const_iterator() : element(0) {} 
     192    inline const_iterator(pointer element) : element(element) 
     193    { 
     194      if (this->element && this->element->type != XML_ELEMENT_NODE) 
     195      { 
     196        operator++(); 
     197      } 
     198    } 
     199    inline const_iterator(const iterator &other) : element(other.element) {}; 
     200 
     201    inline reference operator*() const 
     202    { 
     203      return *element; 
     204    } 
     205    inline pointer operator->() const 
     206    { 
     207      return &(operator*()); 
     208    } 
     209 
     210    inline const_iterator &operator ++ () 
     211    { 
     212      do 
     213      { 
     214        this->element = reinterpret_cast<tXMLNode *>(this->element->next); 
     215      } 
     216      while (this->element && this->element->type != XML_ELEMENT_NODE); 
     217      return *this; 
     218    } 
     219    inline const_iterator operator ++ (int) 
     220    { 
     221      const_iterator temp(*this); 
     222      operator++(); 
     223      return temp; 
     224    } 
     225 
     226    inline const bool operator == (const const_iterator &other) const 
     227    { 
     228      return element == other.element; 
     229    } 
     230    inline const bool operator != (const const_iterator &other) const 
     231    { 
     232      return !(*this == other); 
     233    } 
     234  }; 
     235 
    183236  /*! The dtor of tXMLNode 
    184237   */ 
     
    256309   * \returns A begin-iterator 
    257310   */ 
    258   inline const iterator GetChildrenBegin() const 
     311  inline const iterator GetChildrenBegin() 
    259312  { 
    260313    return iterator(reinterpret_cast<tXMLNode *>(this->children)); 
    261314  } 
    262315 
     316  /*! Get a const_iterator to the first of this node's children of type XML_ELEMENT_NODE 
     317   * 
     318   * \returns A begin-const_iterator 
     319   */ 
     320  inline const const_iterator GetChildrenBegin() const 
     321  { 
     322    return const_iterator(reinterpret_cast<tXMLNode *>(this->children)); 
     323  } 
     324 
    263325  /*! Get an end-iterator to mark the end of children traversal 
    264326   * 
    265327   * \returns An end-iterator 
    266328   */ 
    267   inline const iterator &GetChildrenEnd() const 
     329  inline const iterator &GetChildrenEnd() 
    268330  { 
    269331    static iterator end; 
     332    return end; 
     333  } 
     334 
     335  /*! Get a const_iterator to mark the end of children traversal 
     336   * 
     337   * \returns An end-const_iterator 
     338   */ 
     339  inline const const_iterator &GetChildrenEnd() const 
     340  { 
     341    static const_iterator end; 
    270342    return end; 
    271343  } 
     
    354426   * \returns A begin-iterator 
    355427   */ 
    356   const iterator GetNextSiblingsBegin() const 
     428  const iterator GetNextSiblingsBegin() 
    357429  { 
    358430    return iterator(reinterpret_cast<tXMLNode *>(this->next)); 
    359431  } 
    360432 
     433  /*! Get a const_iterator to the next of this node's siblings of type XML_ELEMENT_NODE 
     434   * 
     435   * \returns A begin-const_iterator 
     436   */ 
     437  const const_iterator GetNextSiblingsBegin() const 
     438  { 
     439    return const_iterator(reinterpret_cast<tXMLNode *>(this->next)); 
     440  } 
     441 
    361442  /*! Get an end-iterator to mark the end of sibling traversal 
    362443   * 
    363444   * \returns An end-iterator 
    364445   */ 
    365   const iterator &GetNextSiblingsEnd() const 
     446  const iterator &GetNextSiblingsEnd() 
    366447  { 
    367448    static iterator end; 
     449    return end; 
     450  } 
     451 
     452  /*! Get a const_iterator to mark the end of sibling traversal 
     453   * 
     454   * \returns An end-const_iterator 
     455   */ 
     456  const const_iterator &GetNextSiblingsEnd() const 
     457  { 
     458    static const_iterator end; 
    368459    return end; 
    369460  } 
     
    447538   */ 
    448539  void RemoveTextContent(); 
     540 
     541  /*! Set content of node 
     542   * 
     543   * \param content   The new content 
     544   */ 
     545  void SetContent(const std::string &content); 
    449546 
    450547  /*! Get whether this node has the given attribute or not 
Note: See TracChangeset for help on using the changeset viewer.