Started emitting events for Values

This commit is contained in:
Jesse Beder
2011-09-10 12:42:42 -05:00
parent 09beb5c47a
commit f5a9d4c8e3
4 changed files with 60 additions and 0 deletions

View File

@@ -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(); }

View File

@@ -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
View 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
View 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