summaryrefslogtreecommitdiffstats
path: root/contrib/libs/yaml-cpp/src/memory.cpp
blob: 7a544e6f2214f43f7d47cdaeebe298bb88c18dc2 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include "yaml-cpp/node/detail/memory.h"
#include "yaml-cpp/node/detail/node.h"  // IWYU pragma: keep
#include "yaml-cpp/node/ptr.h"

namespace YAML {
namespace detail {

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;
}

node& memory::create_node() {
  shared_node pNode(new node);
  m_nodes.insert(pNode);
  return *pNode;
}

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