Iterator improvements: safety assertions in xml_named_node_iterator, const_cast workaround for BCC32 bug

git-svn-id: http://pugixml.googlecode.com/svn/trunk@915 99668b35-9821-0410-8761-19e4c4f06640
This commit is contained in:
arseny.kapoulkine@gmail.com 2012-05-02 15:38:09 +00:00
parent a50f47f805
commit a9a537ad40
2 changed files with 7 additions and 3 deletions

View File

@ -4928,7 +4928,7 @@ namespace pugi
PUGI__FN xml_node* xml_node_iterator::operator->() const PUGI__FN xml_node* xml_node_iterator::operator->() const
{ {
assert(_wrap._root); assert(_wrap._root);
return &_wrap; return const_cast<xml_node*>(&_wrap); // BCC32 workaround
} }
PUGI__FN const xml_node_iterator& xml_node_iterator::operator++() PUGI__FN const xml_node_iterator& xml_node_iterator::operator++()
@ -4989,7 +4989,7 @@ namespace pugi
PUGI__FN xml_attribute* xml_attribute_iterator::operator->() const PUGI__FN xml_attribute* xml_attribute_iterator::operator->() const
{ {
assert(_wrap._attr); assert(_wrap._attr);
return &_wrap; return const_cast<xml_attribute*>(&_wrap); // BCC32 workaround
} }
PUGI__FN const xml_attribute_iterator& xml_attribute_iterator::operator++() PUGI__FN const xml_attribute_iterator& xml_attribute_iterator::operator++()
@ -5039,16 +5039,19 @@ namespace pugi
PUGI__FN xml_node& xml_named_node_iterator::operator*() const PUGI__FN xml_node& xml_named_node_iterator::operator*() const
{ {
assert(_node._root);
return _node; return _node;
} }
PUGI__FN xml_node* xml_named_node_iterator::operator->() const PUGI__FN xml_node* xml_named_node_iterator::operator->() const
{ {
return &_node; assert(_node._root);
return const_cast<xml_node*>(&_node); // BCC32 workaround
} }
PUGI__FN const xml_named_node_iterator& xml_named_node_iterator::operator++() PUGI__FN const xml_named_node_iterator& xml_named_node_iterator::operator++()
{ {
assert(_node._root);
_node = _node.next_sibling(_name); _node = _node.next_sibling(_name);
return *this; return *this;
} }

View File

@ -359,6 +359,7 @@ namespace pugi
{ {
friend class xml_attribute_iterator; friend class xml_attribute_iterator;
friend class xml_node_iterator; friend class xml_node_iterator;
friend class xml_named_node_iterator;
protected: protected:
xml_node_struct* _root; xml_node_struct* _root;