yaml-cpp

FORK: A YAML parser and emitter in C++
git clone https://git.neptards.moe/neptards/yaml-cpp.git
Log | Files | Refs | README | LICENSE

nodebuilder.h (2180B)


      1 #ifndef NODE_NODEBUILDER_H_62B23520_7C8E_11DE_8A39_0800200C9A66
      2 #define NODE_NODEBUILDER_H_62B23520_7C8E_11DE_8A39_0800200C9A66
      3 
      4 #if defined(_MSC_VER) ||                                            \
      5     (defined(__GNUC__) && (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) || \
      6      (__GNUC__ >= 4))  // GCC supports "pragma once" correctly since 3.4
      7 #pragma once
      8 #endif
      9 
     10 #include <vector>
     11 
     12 #include "yaml-cpp/anchor.h"
     13 #include "yaml-cpp/emitterstyle.h"
     14 #include "yaml-cpp/eventhandler.h"
     15 #include "yaml-cpp/node/ptr.h"
     16 
     17 namespace YAML {
     18 namespace detail {
     19 class node;
     20 }  // namespace detail
     21 struct Mark;
     22 }  // namespace YAML
     23 
     24 namespace YAML {
     25 class Node;
     26 
     27 class NodeBuilder : public EventHandler {
     28  public:
     29   NodeBuilder();
     30   NodeBuilder(const NodeBuilder&) = delete;
     31   NodeBuilder(NodeBuilder&&) = delete;
     32   NodeBuilder& operator=(const NodeBuilder&) = delete;
     33   NodeBuilder& operator=(NodeBuilder&&) = delete;
     34   ~NodeBuilder() override;
     35 
     36   Node Root();
     37 
     38   void OnDocumentStart(const Mark& mark) override;
     39   void OnDocumentEnd() override;
     40 
     41   void OnNull(const Mark& mark, anchor_t anchor) override;
     42   void OnAlias(const Mark& mark, anchor_t anchor) override;
     43   void OnScalar(const Mark& mark, const std::string& tag,
     44                         anchor_t anchor, const std::string& value) override;
     45 
     46   void OnSequenceStart(const Mark& mark, const std::string& tag,
     47                                anchor_t anchor, EmitterStyle::value style) override;
     48   void OnSequenceEnd() override;
     49 
     50   void OnMapStart(const Mark& mark, const std::string& tag,
     51                           anchor_t anchor, EmitterStyle::value style) override;
     52   void OnMapEnd() override;
     53 
     54  private:
     55   detail::node& Push(const Mark& mark, anchor_t anchor);
     56   void Push(detail::node& node);
     57   void Pop();
     58   void RegisterAnchor(anchor_t anchor, detail::node& node);
     59 
     60  private:
     61   detail::shared_memory_holder m_pMemory;
     62   detail::node* m_pRoot;
     63 
     64   using Nodes = std::vector<detail::node *>;
     65   Nodes m_stack;
     66   Nodes m_anchors;
     67 
     68   using PushedKey = std::pair<detail::node*, bool>;
     69   std::vector<PushedKey> m_keys;
     70   std::size_t m_mapDepth;
     71 };
     72 }  // namespace YAML
     73 
     74 #endif  // NODE_NODEBUILDER_H_62B23520_7C8E_11DE_8A39_0800200C9A66