123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148 |
- #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
|