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

View File

@ -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 <typename T>
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);