Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-05-12 09:08:10

0001 #ifndef NODE_NODEBUILDER_H_62B23520_7C8E_11DE_8A39_0800200C9A66
0002 #define NODE_NODEBUILDER_H_62B23520_7C8E_11DE_8A39_0800200C9A66
0003 
0004 #if defined(_MSC_VER) ||                                            \
0005     (defined(__GNUC__) && (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) || \
0006      (__GNUC__ >= 4))  // GCC supports "pragma once" correctly since 3.4
0007 #pragma once
0008 #endif
0009 
0010 #include <vector>
0011 
0012 #include "ATOOLS/YAML/yaml-cpp/anchor.h"
0013 #include "ATOOLS/YAML/yaml-cpp/emitterstyle.h"
0014 #include "ATOOLS/YAML/yaml-cpp/eventhandler.h"
0015 #include "ATOOLS/YAML/yaml-cpp/node/ptr.h"
0016 
0017 namespace SHERPA_YAML {
0018 namespace detail {
0019 class node;
0020 }  // namespace detail
0021 struct Mark;
0022 }  // namespace SHERPA_YAML
0023 
0024 namespace SHERPA_YAML {
0025 class Node;
0026 
0027 class NodeBuilder : public EventHandler {
0028  public:
0029   NodeBuilder();
0030   NodeBuilder(const NodeBuilder&) = delete;
0031   NodeBuilder(NodeBuilder&&) = delete;
0032   NodeBuilder& operator=(const NodeBuilder&) = delete;
0033   NodeBuilder& operator=(NodeBuilder&&) = delete;
0034   ~NodeBuilder() override;
0035 
0036   Node Root();
0037 
0038   void OnDocumentStart(const Mark& mark) override;
0039   void OnDocumentEnd() override;
0040 
0041   void OnNull(const Mark& mark, anchor_t anchor) override;
0042   void OnAlias(const Mark& mark, anchor_t anchor) override;
0043   void OnScalar(const Mark& mark, const std::string& tag,
0044                         anchor_t anchor, const std::string& value) override;
0045 
0046   void OnSequenceStart(const Mark& mark, const std::string& tag,
0047                                anchor_t anchor, EmitterStyle::value style) override;
0048   void OnSequenceEnd() override;
0049 
0050   void OnMapStart(const Mark& mark, const std::string& tag,
0051                           anchor_t anchor, EmitterStyle::value style) override;
0052   void OnMapEnd() override;
0053 
0054  private:
0055   detail::node& Push(const Mark& mark, anchor_t anchor);
0056   void Push(detail::node& node);
0057   void Pop();
0058   void RegisterAnchor(anchor_t anchor, detail::node& node);
0059 
0060  private:
0061   detail::shared_memory_holder m_pMemory;
0062   detail::node* m_pRoot;
0063 
0064   using Nodes = std::vector<detail::node *>;
0065   Nodes m_stack;
0066   Nodes m_anchors;
0067 
0068   using PushedKey = std::pair<detail::node*, bool>;
0069   std::vector<PushedKey> m_keys;
0070   std::size_t m_mapDepth;
0071 };
0072 }  // namespace SHERPA_YAML
0073 
0074 #endif  // NODE_NODEBUILDER_H_62B23520_7C8E_11DE_8A39_0800200C9A66