Added templated casting to nodes, as well as operator == and != (for quick checks, especially to help in testing). Implemented size() on a map node to return the number of key/value pairs (as in std::map)

This commit is contained in:
Jesse Beder
2009-09-06 15:54:11 +00:00
parent 729fb4d30b
commit 07443495c8
5 changed files with 79 additions and 24 deletions

View File

@@ -53,6 +53,9 @@ namespace YAML
template <typename T>
const T Read() const;
template <typename T>
operator T() const;
template <typename T>
friend void operator >> (const Node& node, T& value);
@@ -109,6 +112,24 @@ namespace YAML
const Node *m_pIdentity;
mutable bool m_referenced;
};
// comparisons with auto-conversion
template <typename T>
bool operator == (const T& value, const Node& node);
template <typename T>
bool operator == (const Node& node, const T& value);
template <typename T>
bool operator != (const T& value, const Node& node);
template <typename T>
bool operator != (const Node& node, const T& value);
bool operator == (const char *value, const Node& node);
bool operator == (const Node& node, const char *value);
bool operator != (const char *value, const Node& node);
bool operator != (const Node& node, const char *value);
}
#include "nodeimpl.h"

View File

@@ -25,6 +25,11 @@ namespace YAML
return value;
}
template <typename T>
Node::operator T() const {
return Read<T>();
}
template <typename T>
inline void operator >> (const Node& node, T& value) {
if(!node.Read(value))
@@ -80,6 +85,43 @@ namespace YAML
inline const Node& Node::operator [] (const char *key) const {
return GetValue(std::string(key));
}
template <typename T>
inline bool operator == (const T& value, const Node& node) {
return value == node.Read<T>();
}
template <typename T>
inline bool operator == (const Node& node, const T& value) {
return value == node.Read<T>();
}
template <typename T>
inline bool operator != (const T& value, const Node& node) {
return value != node.Read<T>();
}
template <typename T>
inline bool operator != (const Node& node, const T& value) {
return value != node.Read<T>();
}
inline bool operator == (const char *value, const Node& node) {
return std::string(value) == node;
}
inline bool operator == (const Node& node, const char *value) {
return std::string(value) == node;
}
inline bool operator != (const char *value, const Node& node) {
return std::string(value) != node;
}
inline bool operator != (const Node& node, const char *value) {
return std::string(value) != node;
}
}
#endif // NODEIMPL_H_62B23520_7C8E_11DE_8A39_0800200C9A66