mirror of
https://github.com/jbeder/yaml-cpp.git
synced 2025-09-09 12:41:17 +00:00
Started emitting events for Values
This commit is contained in:
@@ -22,6 +22,8 @@ namespace YAML
|
|||||||
node(): m_pRef(new node_ref) {}
|
node(): m_pRef(new node_ref) {}
|
||||||
|
|
||||||
bool is(const node& rhs) const { return m_pRef == rhs.m_pRef; }
|
bool is(const node& rhs) const { return m_pRef == rhs.m_pRef; }
|
||||||
|
const node_ref *ref() const { return m_pRef.get(); }
|
||||||
|
|
||||||
ValueType::value type() const { return m_pRef->type(); }
|
ValueType::value type() const { return m_pRef->type(); }
|
||||||
|
|
||||||
const std::string& scalar() const { return m_pRef->scalar(); }
|
const std::string& scalar() const { return m_pRef->scalar(); }
|
||||||
|
@@ -18,6 +18,7 @@ namespace YAML
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
friend class ValueBuilder;
|
friend class ValueBuilder;
|
||||||
|
friend class ValueEvents;
|
||||||
friend class detail::node_data;
|
friend class detail::node_data;
|
||||||
template<typename, typename, typename> friend class detail::iterator_base;
|
template<typename, typename, typename> friend class detail::iterator_base;
|
||||||
|
|
||||||
|
22
src/value/valueevents.cpp
Normal file
22
src/value/valueevents.cpp
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
#include "valueevents.h"
|
||||||
|
|
||||||
|
namespace YAML
|
||||||
|
{
|
||||||
|
ValueEvents::ValueEvents(const Value& value): m_pMemory(value.m_pMemory), m_root(*value.m_pNode)
|
||||||
|
{
|
||||||
|
Visit(m_root);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Visit(detail::node& node)
|
||||||
|
{
|
||||||
|
int& refCount = m_refCount[node.ref()];
|
||||||
|
refCount++;
|
||||||
|
if(refCount > 1)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if(node.type() == ValueType::Sequence) {
|
||||||
|
|
||||||
|
} else if(node.type() == ValueType::Map) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
35
src/value/valueevents.h
Normal file
35
src/value/valueevents.h
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
#ifndef VALUE_VALUEEVENTS_H_62B23520_7C8E_11DE_8A39_0800200C9A66
|
||||||
|
#define VALUE_VALUEEVENTS_H_62B23520_7C8E_11DE_8A39_0800200C9A66
|
||||||
|
|
||||||
|
#if defined(_MSC_VER) || (defined(__GNUC__) && (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) || (__GNUC__ >= 4)) // GCC supports "pragma once" correctly since 3.4
|
||||||
|
#pragma once
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "yaml-cpp/anchor.h"
|
||||||
|
#include "yaml-cpp/value/ptr.h"
|
||||||
|
#include <multiset>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
namespace YAML
|
||||||
|
{
|
||||||
|
class Value;
|
||||||
|
|
||||||
|
class ValueEvents
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
ValueEvents(const Value& value);
|
||||||
|
|
||||||
|
private:
|
||||||
|
void Visit(detail::node& node);
|
||||||
|
|
||||||
|
private:
|
||||||
|
detail::shared_memory_holder m_pMemory;
|
||||||
|
detail::node& m_root;
|
||||||
|
|
||||||
|
typedef std::map<const detail::node_ref *, int> RefCount;
|
||||||
|
RefCount m_refCount;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // VALUE_VALUEEVENTS_H_62B23520_7C8E_11DE_8A39_0800200C9A66
|
||||||
|
|
Reference in New Issue
Block a user