From a8fdb1718da0458a5ea924b7ebf4da17facf35ab Mon Sep 17 00:00:00 2001 From: beder Date: Tue, 6 Sep 2011 00:32:53 -0500 Subject: [PATCH] Added overload for operator [] for char * (non-const version) --- include/yaml-cpp/node.h | 2 ++ include/yaml-cpp/nodeimpl.h | 8 ++++++++ test/parsertests.cpp | 17 +++++++++++++++++ 3 files changed, 27 insertions(+) diff --git a/include/yaml-cpp/node.h b/include/yaml-cpp/node.h index 8e16636..2c0a686 100644 --- a/include/yaml-cpp/node.h +++ b/include/yaml-cpp/node.h @@ -77,7 +77,9 @@ namespace YAML // specific to maps const Node *FindValue(const char *key) const; + const Node *FindValue(char *key) const; const Node& operator [] (const char *key) const; + const Node& operator [] (char *key) const; // for tags const std::string& Tag() const { return m_tag; } diff --git a/include/yaml-cpp/nodeimpl.h b/include/yaml-cpp/nodeimpl.h index 4906a98..6ea24e4 100644 --- a/include/yaml-cpp/nodeimpl.h +++ b/include/yaml-cpp/nodeimpl.h @@ -68,10 +68,18 @@ namespace YAML inline const Node *Node::FindValue(const char *key) const { return FindValue(std::string(key)); } + + inline const Node *Node::FindValue(char *key) const { + return FindValue(std::string(key)); + } inline const Node& Node::operator [] (const char *key) const { return GetValue(std::string(key)); } + + inline const Node& Node::operator [] (char *key) const { + return GetValue(std::string(key)); + } } #endif // NODEIMPL_H_62B23520_7C8E_11DE_8A39_0800200C9A66 diff --git a/test/parsertests.cpp b/test/parsertests.cpp index e7da3b7..f6218db 100644 --- a/test/parsertests.cpp +++ b/test/parsertests.cpp @@ -864,6 +864,22 @@ namespace Test } return true; } + + bool NonConstKey() + { + std::string input = "{a: 1}"; + std::stringstream stream(input); + YAML::Parser parser(stream); + YAML::Node doc; + parser.GetNextDocument(doc); + + std::vector key(2); + key[0] = 'a'; + key[1] = '\0'; + if(doc[&key[0]].to() != 1) + return false; + return true; + } } namespace { @@ -1142,6 +1158,7 @@ namespace Test RunParserTest(&Parser::ExplicitNonSpecificSequenceTag, "explicit, non-specific sequence tag", passed, total); RunParserTest(&Parser::Infinity, "infinity", passed, total); RunParserTest(&Parser::NaN, "NaN", passed, total); + RunParserTest(&Parser::NonConstKey, "non const key", passed, total); RunEncodingTest(&EncodeToUtf8, false, "UTF-8, no BOM", passed, total); RunEncodingTest(&EncodeToUtf8, true, "UTF-8 with BOM", passed, total);