From 11903da3fbab8c3fe3cb6964881a132a7ceb473c Mon Sep 17 00:00:00 2001 From: jbeder Date: Mon, 15 Mar 2010 04:25:17 +0000 Subject: [PATCH] Added overloads for parsing stl maps and vectors --- include/stlnode.h | 36 ++++++++++++++++++++++++++++++++++++ include/yaml.h | 1 + test/spectests.cpp | 6 +++--- 3 files changed, 40 insertions(+), 3 deletions(-) create mode 100644 include/stlnode.h diff --git a/include/stlnode.h b/include/stlnode.h new file mode 100644 index 0000000..cfe2f03 --- /dev/null +++ b/include/stlnode.h @@ -0,0 +1,36 @@ +#pragma once + +#ifndef STLNODE_H_62B23520_7C8E_11DE_8A39_0800200C9A66 +#define STLNODE_H_62B23520_7C8E_11DE_8A39_0800200C9A66 + + +#include +#include + +namespace YAML +{ + template + void operator >> (const Node& node, std::vector& v) + { + v.clear(); + v.resize(node.size()); + for(unsigned i=0;i> v[i]; + } + + + template + void operator >> (const Node& node, std::map& m) + { + m.clear(); + for(Iterator it=node.begin();it!=node.end();++it) { + K k; + V v; + it.first() >> k; + it.second() >> v; + m[k] = v; + } + } +} + +#endif // STLNODE_H_62B23520_7C8E_11DE_8A39_0800200C9A66 diff --git a/include/yaml.h b/include/yaml.h index 6950ad7..d1e83ca 100644 --- a/include/yaml.h +++ b/include/yaml.h @@ -6,6 +6,7 @@ #include "parser.h" #include "node.h" +#include "stlnode.h" #include "iterator.h" #include "emitter.h" #include "stlemitter.h" diff --git a/test/spectests.cpp b/test/spectests.cpp index 3cfc25c..9648d9e 100644 --- a/test/spectests.cpp +++ b/test/spectests.cpp @@ -1121,9 +1121,9 @@ namespace Test { " 0.278"; PARSE(doc, input); - StringMap key; - key._["first"] = "Sammy"; - key._["last"] = "Sosa"; + std::map key; + key["first"] = "Sammy"; + key["last"] = "Sosa"; YAML_ASSERT(doc.size() == 1); YAML_ASSERT(doc[key].size() == 2); YAML_ASSERT(doc[key]["hr"] == 65);