mirror of
https://github.com/jbeder/yaml-cpp.git
synced 2025-09-09 20:51:16 +00:00
Fixed node iterator
This commit is contained in:
@@ -47,9 +47,9 @@ namespace YAML
|
|||||||
value_type dereference() const {
|
value_type dereference() const {
|
||||||
const typename base_type::value_type& v = *this->base();
|
const typename base_type::value_type& v = *this->base();
|
||||||
if(v.pNode)
|
if(v.pNode)
|
||||||
return value_type(Value(*v.pNode, m_pMemory));
|
return value_type(Value(*v, m_pMemory));
|
||||||
if(v.pKey && v.pValue)
|
if(v.first && v.second)
|
||||||
return value_type(Value(*v.pKey, m_pMemory), Value(*v.pValue, m_pMemory));
|
return value_type(Value(*v.first, m_pMemory), Value(*v.second, m_pMemory));
|
||||||
return value_type();
|
return value_type();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -21,13 +21,17 @@ namespace YAML
|
|||||||
struct iterator_type { enum value { None, Sequence, Map }; };
|
struct iterator_type { enum value { None, Sequence, Map }; };
|
||||||
|
|
||||||
template<typename V>
|
template<typename V>
|
||||||
struct node_iterator_value {
|
struct node_iterator_value: public std::pair<V*, V*> {
|
||||||
node_iterator_value(): pNode(0), pKey(0), pValue(0) {}
|
typedef std::pair<V*, V*> kv;
|
||||||
explicit node_iterator_value(V& rhs): pNode(&rhs), pKey(0), pValue(0) {}
|
|
||||||
explicit node_iterator_value(V& key, V& value): pNode(0), pKey(&key), pValue(&value) {}
|
node_iterator_value(): kv(), pNode(0) {}
|
||||||
|
explicit node_iterator_value(V& rhs): kv(), pNode(&rhs) {}
|
||||||
|
explicit node_iterator_value(V& key, V& value): kv(&key, &value), pNode(0) {}
|
||||||
|
|
||||||
|
V& operator *() const { return *pNode; }
|
||||||
|
V& operator ->() const { return *pNode; }
|
||||||
|
|
||||||
V *pNode;
|
V *pNode;
|
||||||
V *pKey, *pValue;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef std::vector<node *> node_seq;
|
typedef std::vector<node *> node_seq;
|
||||||
|
@@ -1,4 +1,5 @@
|
|||||||
#include "valueevents.h"
|
#include "valueevents.h"
|
||||||
|
#include "yaml-cpp/value.h"
|
||||||
|
|
||||||
namespace YAML
|
namespace YAML
|
||||||
{
|
{
|
||||||
@@ -7,7 +8,7 @@ namespace YAML
|
|||||||
Visit(m_root);
|
Visit(m_root);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Visit(detail::node& node)
|
void ValueEvents::Visit(const detail::node& node)
|
||||||
{
|
{
|
||||||
int& refCount = m_refCount[node.ref()];
|
int& refCount = m_refCount[node.ref()];
|
||||||
refCount++;
|
refCount++;
|
||||||
@@ -15,8 +16,13 @@ namespace YAML
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
if(node.type() == ValueType::Sequence) {
|
if(node.type() == ValueType::Sequence) {
|
||||||
|
for(detail::const_node_iterator it=node.begin();it!=node.end();++it)
|
||||||
|
Visit(**it);
|
||||||
} else if(node.type() == ValueType::Map) {
|
} else if(node.type() == ValueType::Map) {
|
||||||
|
for(detail::const_node_iterator it=node.begin();it!=node.end();++it) {
|
||||||
|
Visit(*it->first);
|
||||||
|
Visit(*it->second);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -7,7 +7,7 @@
|
|||||||
|
|
||||||
#include "yaml-cpp/anchor.h"
|
#include "yaml-cpp/anchor.h"
|
||||||
#include "yaml-cpp/value/ptr.h"
|
#include "yaml-cpp/value/ptr.h"
|
||||||
#include <multiset>
|
#include <map>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
namespace YAML
|
namespace YAML
|
||||||
@@ -20,7 +20,7 @@ namespace YAML
|
|||||||
ValueEvents(const Value& value);
|
ValueEvents(const Value& value);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void Visit(detail::node& node);
|
void Visit(const detail::node& node);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
detail::shared_memory_holder m_pMemory;
|
detail::shared_memory_holder m_pMemory;
|
||||||
|
Reference in New Issue
Block a user