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) {}
|
||||
|
||||
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(); }
|
||||
|
||||
const std::string& scalar() const { return m_pRef->scalar(); }
|
||||
|
@@ -18,6 +18,7 @@ namespace YAML
|
||||
{
|
||||
public:
|
||||
friend class ValueBuilder;
|
||||
friend class ValueEvents;
|
||||
friend class detail::node_data;
|
||||
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