| #ifndef NODE_NODE_H_62B23520_7C8E_11DE_8A39_0800200C9A66 |
| #define NODE_NODE_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 |
| |
| #include <stdexcept> |
| #include <string> |
| |
| #include "yaml-cpp/dll.h" |
| #include "yaml-cpp/emitterstyle.h" |
| #include "yaml-cpp/mark.h" |
| #include "yaml-cpp/node/detail/iterator_fwd.h" |
| #include "yaml-cpp/node/ptr.h" |
| #include "yaml-cpp/node/type.h" |
| |
| namespace YAML { |
| namespace detail { |
| class node; |
| class node_data; |
| struct iterator_value; |
| } // namespace detail |
| } // namespace YAML |
| |
| namespace YAML { |
| class YAML_CPP_API Node { |
| public: |
| friend class NodeBuilder; |
| friend class NodeEvents; |
| friend struct detail::iterator_value; |
| friend class detail::node; |
| friend class detail::node_data; |
| template <typename> |
| friend class detail::iterator_base; |
| template <typename T, typename S> |
| friend struct as_if; |
| |
| using iterator = YAML::iterator; |
| using const_iterator = YAML::const_iterator; |
| |
| Node(); |
| explicit Node(NodeType::value type); |
| template <typename T> |
| explicit Node(const T& rhs); |
| explicit Node(const detail::iterator_value& rhs); |
| Node(const Node& rhs); |
| ~Node(); |
| |
| YAML::Mark Mark() const; |
| NodeType::value Type() const; |
| bool IsDefined() const; |
| bool IsNull() const { return Type() == NodeType::Null; } |
| bool IsScalar() const { return Type() == NodeType::Scalar; } |
| bool IsSequence() const { return Type() == NodeType::Sequence; } |
| bool IsMap() const { return Type() == NodeType::Map; } |
| |
| // bool conversions |
| explicit operator bool() const { return IsDefined(); } |
| bool operator!() const { return !IsDefined(); } |
| |
| // access |
| template <typename T> |
| T as() const; |
| template <typename T, typename S> |
| T as(const S& fallback) const; |
| const std::string& Scalar() const; |
| |
| const std::string& Tag() const; |
| void SetTag(const std::string& tag); |
| |
| // style |
| // WARNING: This API might change in future releases. |
| EmitterStyle::value Style() const; |
| void SetStyle(EmitterStyle::value style); |
| |
| // assignment |
| bool is(const Node& rhs) const; |
| template <typename T> |
| Node& operator=(const T& rhs); |
| Node& operator=(const Node& rhs); |
| void reset(const Node& rhs = Node()); |
| |
| // size/iterator |
| std::size_t size() const; |
| |
| const_iterator begin() const; |
| iterator begin(); |
| |
| const_iterator end() const; |
| iterator end(); |
| |
| // sequence |
| template <typename T> |
| void push_back(const T& rhs); |
| void push_back(const Node& rhs); |
| |
| // indexing |
| template <typename Key> |
| const Node operator[](const Key& key) const; |
| template <typename Key> |
| Node operator[](const Key& key); |
| template <typename Key> |
| bool remove(const Key& key); |
| |
| const Node operator[](const Node& key) const; |
| Node operator[](const Node& key); |
| bool remove(const Node& key); |
| |
| // map |
| template <typename Key, typename Value> |
| void force_insert(const Key& key, const Value& value); |
| |
| private: |
| enum Zombie { ZombieNode }; |
| explicit Node(Zombie); |
| explicit Node(Zombie, const std::string&); |
| explicit Node(detail::node& node, detail::shared_memory_holder pMemory); |
| |
| void EnsureNodeExists() const; |
| |
| template <typename T> |
| void Assign(const T& rhs); |
| void Assign(const char* rhs); |
| void Assign(char* rhs); |
| |
| void AssignData(const Node& rhs); |
| void AssignNode(const Node& rhs); |
| |
| private: |
| bool m_isValid; |
| // String representation of invalid key, if the node is invalid. |
| std::string m_invalidKey; |
| mutable detail::shared_memory_holder m_pMemory; |
| mutable detail::node* m_pNode; |
| }; |
| |
| YAML_CPP_API bool operator==(const Node& lhs, const Node& rhs); |
| |
| YAML_CPP_API Node Clone(const Node& node); |
| |
| template <typename T> |
| struct convert; |
| } |
| |
| #endif // NODE_NODE_H_62B23520_7C8E_11DE_8A39_0800200C9A66 |