From aa8d4e4750ec9fe9f8cc680eb90f1b15955c817e Mon Sep 17 00:00:00 2001 From: Onyad Date: Thu, 4 Sep 2025 18:33:17 +0300 Subject: [PATCH] up --- include/yaml-cpp/node/detail/memory.h | 1 + src/memory.cpp | 8 ++++++++ 2 files changed, 9 insertions(+) diff --git a/include/yaml-cpp/node/detail/memory.h b/include/yaml-cpp/node/detail/memory.h index e881545..942ab66 100644 --- a/include/yaml-cpp/node/detail/memory.h +++ b/include/yaml-cpp/node/detail/memory.h @@ -25,6 +25,7 @@ class YAML_CPP_API memory { memory() : m_nodes{} {} node& create_node(); void merge(const memory& rhs); + size_t size() const; private: using Nodes = std::set; diff --git a/src/memory.cpp b/src/memory.cpp index 676e4c7..7a544e6 100644 --- a/src/memory.cpp +++ b/src/memory.cpp @@ -9,6 +9,10 @@ void memory_holder::merge(memory_holder& rhs) { if (m_pMemory == rhs.m_pMemory) return; + if (m_pMemory->size() < rhs.m_pMemory->size()) { + std::swap(m_pMemory, rhs.m_pMemory); + } + m_pMemory->merge(*rhs.m_pMemory); rhs.m_pMemory = m_pMemory; } @@ -22,5 +26,9 @@ node& memory::create_node() { void memory::merge(const memory& rhs) { m_nodes.insert(rhs.m_nodes.begin(), rhs.m_nodes.end()); } + +size_t memory::size() const { + return m_nodes.size(); +} } // namespace detail } // namespace YAML