nodebuilder.h 1.9 KB

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