make alias assignment explicit

This commit is contained in:
Robert Haschke 2018-03-17 17:58:55 +01:00
parent 1b38ced175
commit 7542e04151
2 changed files with 16 additions and 5 deletions

View File

@ -239,11 +239,12 @@ inline void Node::Assign(char* rhs) {
} }
inline Node& Node::operator=(const Node& rhs) { inline Node& Node::operator=(const Node& rhs) {
if (!m_isValid || !rhs.m_isValid) AssignData(rhs);
throw InvalidNode(); return *this;
if (is(rhs)) }
return *this;
AssignNode(rhs); inline Node& Node::operator=(const NodeAlias& rhs) {
AssignNode(rhs.m_node);
return *this; return *this;
} }

View File

@ -26,6 +26,7 @@ struct iterator_value;
} // namespace YAML } // namespace YAML
namespace YAML { namespace YAML {
class YAML_CPP_API NodeAlias;
class YAML_CPP_API Node { class YAML_CPP_API Node {
public: public:
friend class NodeBuilder; friend class NodeBuilder;
@ -81,6 +82,7 @@ class YAML_CPP_API Node {
template <typename T> template <typename T>
Node& operator=(const T& rhs); Node& operator=(const T& rhs);
Node& operator=(const Node& rhs); Node& operator=(const Node& rhs);
Node& operator=(const NodeAlias& rhs);
void reset(const Node& rhs = Node()); void reset(const Node& rhs = Node());
// size/iterator // size/iterator
@ -134,6 +136,14 @@ class YAML_CPP_API Node {
mutable detail::node* m_pNode; 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 bool operator==(const Node& lhs, const Node& rhs);
YAML_CPP_API Node Clone(const Node& node); YAML_CPP_API Node Clone(const Node& node);