From a7ebb3615a2fa25edfa364eb7c7f2ae85ca3051f Mon Sep 17 00:00:00 2001 From: Jesse Beder Date: Thu, 8 Sep 2011 00:48:40 -0500 Subject: [PATCH] Added streamable conversions --- src/value/convert.cpp | 34 ++++++++++++++++++++++++++++++++++ util/value.cpp | 6 ++++-- 2 files changed, 38 insertions(+), 2 deletions(-) diff --git a/src/value/convert.cpp b/src/value/convert.cpp index 8bfd9cb..47cf659 100644 --- a/src/value/convert.cpp +++ b/src/value/convert.cpp @@ -1,7 +1,9 @@ #include "yaml-cpp/value.h" +#include namespace YAML { + // std::string template<> Value convert(const std::string& rhs) { return Value(rhs); @@ -14,4 +16,36 @@ namespace YAML rhs = value.scalar(); return true; } + +#define YAML_DEFINE_CONVERT_STREAMABLE(type)\ + template<> Value convert(const type& rhs) {\ + std::stringstream stream;\ + stream << rhs;\ + return Value(stream.str());\ + }\ + template<> bool convert(const Value& value, type& rhs) {\ + if(value.Type() != ValueType::Scalar)\ + return false;\ + std::stringstream stream(value.scalar());\ + stream >> rhs;\ + return !!stream;\ + } + + YAML_DEFINE_CONVERT_STREAMABLE(int) + YAML_DEFINE_CONVERT_STREAMABLE(unsigned) + YAML_DEFINE_CONVERT_STREAMABLE(short) + YAML_DEFINE_CONVERT_STREAMABLE(unsigned short) + YAML_DEFINE_CONVERT_STREAMABLE(long) + YAML_DEFINE_CONVERT_STREAMABLE(unsigned long) + YAML_DEFINE_CONVERT_STREAMABLE(long long) + YAML_DEFINE_CONVERT_STREAMABLE(unsigned long long) + + YAML_DEFINE_CONVERT_STREAMABLE(char) + YAML_DEFINE_CONVERT_STREAMABLE(unsigned char) + + YAML_DEFINE_CONVERT_STREAMABLE(float) + YAML_DEFINE_CONVERT_STREAMABLE(double) + YAML_DEFINE_CONVERT_STREAMABLE(long double) + +#undef YAML_DEFINE_CONVERT_STREAMABLE } diff --git a/util/value.cpp b/util/value.cpp index 136ca45..48fcfe1 100644 --- a/util/value.cpp +++ b/util/value.cpp @@ -7,8 +7,10 @@ int main() std::cout << value["key"].as() << "\n"; value["key"]["key"] = "value"; std::cout << value["key"]["key"].as() << "\n"; -// value[5] = "monkey"; -// std::cout << value[5].as() << "\n"; + value[5] = "monkey"; + std::cout << value[5].as() << "\n"; + value["monkey"] = 5; + std::cout << value["monkey"].as() << "\n"; return 0; }