From a07642f156c25890dbbfe2b89ef3b4e09c02a86e Mon Sep 17 00:00:00 2001 From: beder Date: Wed, 7 Sep 2011 00:45:28 -0500 Subject: [PATCH] Started implementing node_data --- CMakeLists.txt | 6 +++++- include/yaml-cpp/value/detail/node.h | 7 +++++++ include/yaml-cpp/value/detail/node_data.h | 23 ++++++++++++++++++++++- include/yaml-cpp/value/impl.h | 6 ++++++ include/yaml-cpp/value/type.h | 14 ++++++++++++++ include/yaml-cpp/value/value.h | 5 ++--- src/value/detail/node_data.cpp | 11 +++++++++++ util/value.cpp | 2 +- 8 files changed, 68 insertions(+), 6 deletions(-) create mode 100644 include/yaml-cpp/value/type.h create mode 100644 src/value/detail/node_data.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index c8ac8dc..aef2a0c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -55,7 +55,11 @@ option(MSVC_STHREADED_RT "MSVC: Build with single-threaded static runtime libs ( ### ### Sources, headers, directories and libs ### -file(GLOB sources "src/[a-zA-Z]*.cpp") +file(GLOB sources + "src/[a-zA-Z]*.cpp" + "src/value/[a-zA-Z]*.cpp" + "src/value/detail/[a-zA-Z]*.cpp" +) file(GLOB public_headers "include/yaml-cpp/[a-zA-Z]*.h" "include/yaml-cpp/value/[a-zA-Z]*.h" diff --git a/include/yaml-cpp/value/detail/node.h b/include/yaml-cpp/value/detail/node.h index 358e435..9b48c4a 100644 --- a/include/yaml-cpp/value/detail/node.h +++ b/include/yaml-cpp/value/detail/node.h @@ -7,6 +7,7 @@ #include "yaml-cpp/dll.h" +#include "yaml-cpp/value/type.h" #include "yaml-cpp/value/ptr.h" #include "yaml-cpp/value/detail/node_data.h" @@ -19,6 +20,7 @@ namespace YAML public: node(); + ValueType::value type() const; void assign_data(const node& rhs); void set_scalar(const std::string& data); @@ -30,6 +32,11 @@ namespace YAML { } + inline ValueType::value node::type() const + { + return m_pData ? m_pData->type() : ValueType::Null; + } + inline void node::assign_data(const node& rhs) { m_pData = rhs.m_pData; diff --git a/include/yaml-cpp/value/detail/node_data.h b/include/yaml-cpp/value/detail/node_data.h index a72ff55..b9395b7 100644 --- a/include/yaml-cpp/value/detail/node_data.h +++ b/include/yaml-cpp/value/detail/node_data.h @@ -7,7 +7,10 @@ #include "yaml-cpp/dll.h" +#include "yaml-cpp/value/type.h" #include "yaml-cpp/value/ptr.h" +#include +#include namespace YAML { @@ -16,7 +19,25 @@ namespace YAML class node_data { public: - explicit node_data(const std::string& data) {} + explicit node_data(const std::string& scalar); + + ValueType::value type() const { return m_type; } + const std::string scalar() const { return m_data; } + + private: + ValueType::value m_type; + + // scalar + std::string m_scalar; + + // sequence + typedef std::vector node_seq; + node_seq m_sequence; + + // map + typedef std::pair kv_pair; + typedef std::vector node_map; + node_map m_map; }; } } diff --git a/include/yaml-cpp/value/impl.h b/include/yaml-cpp/value/impl.h index 960c53b..ddcf1a6 100644 --- a/include/yaml-cpp/value/impl.h +++ b/include/yaml-cpp/value/impl.h @@ -14,6 +14,7 @@ namespace YAML { inline Value::Value(): m_pMemory(new detail::memory_holder) { + EnsureNodeExists(); } template @@ -30,6 +31,11 @@ namespace YAML { } + inline ValueType::value Value::Type() const + { + return m_pNode ? m_pNode->type() : ValueType::Undefined; + } + // access template inline const T Value::as() const diff --git a/include/yaml-cpp/value/type.h b/include/yaml-cpp/value/type.h new file mode 100644 index 0000000..6890fd0 --- /dev/null +++ b/include/yaml-cpp/value/type.h @@ -0,0 +1,14 @@ +#ifndef VALUE_TYPE_H_62B23520_7C8E_11DE_8A39_0800200C9A66 +#define VALUE_TYPE_H_62B23520_7C8E_11DE_8A39_0800200C9A66 + +#if defined(_MSC_VER) || (defined(__GNUC__) && (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) || (__GNUC__ >= 4)) // GCC supports "pragma once" correctly since 3.4 +#pragma once +#endif + + +namespace YAML +{ + struct ValueType { enum value { Undefined, Null, Scalar, Sequence, Map }; }; +} + +#endif // VALUE_TYPE_H_62B23520_7C8E_11DE_8A39_0800200C9A66 diff --git a/include/yaml-cpp/value/value.h b/include/yaml-cpp/value/value.h index a054fd4..e1ae370 100644 --- a/include/yaml-cpp/value/value.h +++ b/include/yaml-cpp/value/value.h @@ -7,14 +7,13 @@ #include "yaml-cpp/dll.h" -#include "yaml-cpp/value/ptr.h" #include "yaml-cpp/value/iterator.h" +#include "yaml-cpp/value/ptr.h" +#include "yaml-cpp/value/type.h" #include namespace YAML { - struct ValueType { enum value { Undefined, Null, Scalar, Sequence, Map }; }; - class Value { public: diff --git a/src/value/detail/node_data.cpp b/src/value/detail/node_data.cpp new file mode 100644 index 0000000..dc79a75 --- /dev/null +++ b/src/value/detail/node_data.cpp @@ -0,0 +1,11 @@ +#include "yaml-cpp/value/detail/node_data.h" + +namespace YAML +{ + namespace detail + { + node_data::node_data(const std::string& scalar): m_type(ValueType::Scalar), m_scalar(scalar) + { + } + } +} diff --git a/util/value.cpp b/util/value.cpp index 0bc8b17..8d8f460 100644 --- a/util/value.cpp +++ b/util/value.cpp @@ -3,7 +3,7 @@ int main() { YAML::Value value; - value = "Hello"; + value["key"] = "value"; return 0; }