squash/revert: fix memory merging
This commit is contained in:
parent
5e5e33a709
commit
49a56a1bcd
@ -35,7 +35,25 @@ class YAML_CPP_API memory : public ref_counted {
|
||||
Nodes m_nodes;
|
||||
};
|
||||
|
||||
typedef ref_holder<memory> shared_memory;
|
||||
struct memory_ref : ref_counted {
|
||||
|
||||
ref_holder<memory> m_ptr;
|
||||
|
||||
memory_ref() : m_ptr(new memory) {}
|
||||
~memory_ref() {}
|
||||
|
||||
node& create_node() { return m_ptr->create_node(); }
|
||||
|
||||
void merge(memory_ref& rhs) {
|
||||
if (m_ptr == rhs.m_ptr) {
|
||||
return;
|
||||
}
|
||||
m_ptr->merge(*rhs.m_ptr);
|
||||
rhs.m_ptr = m_ptr;
|
||||
};
|
||||
};
|
||||
|
||||
typedef ref_holder<memory_ref> shared_memory;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@ -15,17 +15,17 @@
|
||||
#include <string>
|
||||
|
||||
namespace YAML {
|
||||
inline Node::Node() : m_pMemory(new detail::memory), m_pNode(NULL) {}
|
||||
inline Node::Node() : m_pMemory(new detail::memory_ref), m_pNode(NULL) {}
|
||||
|
||||
inline Node::Node(NodeType::value type)
|
||||
: m_pMemory(new detail::memory),
|
||||
: m_pMemory(new detail::memory_ref),
|
||||
m_pNode(&(m_pMemory->create_node())) {
|
||||
m_pNode->set_type(type);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline Node::Node(const T& rhs)
|
||||
: m_pMemory(new detail::memory),
|
||||
: m_pMemory(new detail::memory_ref),
|
||||
m_pNode(&(m_pMemory->create_node())) {
|
||||
Assign(rhs);
|
||||
}
|
||||
@ -52,7 +52,7 @@ inline void Node::EnsureNodeExists() const {
|
||||
if (!isValid())
|
||||
throw InvalidNode();
|
||||
if (!m_pNode) {
|
||||
m_pMemory.reset(new detail::memory);
|
||||
m_pMemory.reset(new detail::memory_ref);
|
||||
m_pNode = &m_pMemory->create_node();
|
||||
m_pNode->set_null();
|
||||
}
|
||||
|
||||
@ -11,7 +11,7 @@ namespace YAML {
|
||||
struct Mark;
|
||||
|
||||
NodeBuilder::NodeBuilder()
|
||||
: m_pMemory(new detail::memory), m_pRoot(0), m_mapDepth(0) {
|
||||
: m_pMemory(new detail::memory_ref), m_pRoot(0), m_mapDepth(0) {
|
||||
m_anchors.push_back(0); // since the anchors start at 1
|
||||
}
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user