From 7542e041518f5ed973b5276ab4d05c8e25da11b1 Mon Sep 17 00:00:00 2001 From: Robert Haschke Date: Sat, 17 Mar 2018 17:58:55 +0100 Subject: [PATCH] make alias assignment explicit --- include/yaml-cpp/node/impl.h | 11 ++++++----- include/yaml-cpp/node/node.h | 10 ++++++++++ 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/include/yaml-cpp/node/impl.h b/include/yaml-cpp/node/impl.h index 20c487a..fdca084 100644 --- a/include/yaml-cpp/node/impl.h +++ b/include/yaml-cpp/node/impl.h @@ -239,11 +239,12 @@ inline void Node::Assign(char* rhs) { } inline Node& Node::operator=(const Node& rhs) { - if (!m_isValid || !rhs.m_isValid) - throw InvalidNode(); - if (is(rhs)) - return *this; - AssignNode(rhs); + AssignData(rhs); + return *this; +} + +inline Node& Node::operator=(const NodeAlias& rhs) { + AssignNode(rhs.m_node); return *this; } diff --git a/include/yaml-cpp/node/node.h b/include/yaml-cpp/node/node.h index 1ded7d2..5d82368 100644 --- a/include/yaml-cpp/node/node.h +++ b/include/yaml-cpp/node/node.h @@ -26,6 +26,7 @@ struct iterator_value; } // namespace YAML namespace YAML { +class YAML_CPP_API NodeAlias; class YAML_CPP_API Node { public: friend class NodeBuilder; @@ -81,6 +82,7 @@ class YAML_CPP_API Node { template Node& operator=(const T& rhs); Node& operator=(const Node& rhs); + Node& operator=(const NodeAlias& rhs); void reset(const Node& rhs = Node()); // size/iterator @@ -134,6 +136,14 @@ class YAML_CPP_API Node { mutable detail::node* m_pNode; }; +class NodeAlias { + friend class Node; +public: + NodeAlias(const Node& node) : m_node(node) {} +private: + const Node& m_node; +}; + YAML_CPP_API bool operator==(const Node& lhs, const Node& rhs); YAML_CPP_API Node Clone(const Node& node);