1 #ifndef GRAPHBUILDERADAPTER_H_62B23520_7C8E_11DE_8A39_0800200C9A66 2 #define GRAPHBUILDERADAPTER_H_62B23520_7C8E_11DE_8A39_0800200C9A66 4 #if defined(_MSC_VER) || \ 5 (defined(__GNUC__) && (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) || \ 6 (__GNUC__ >= 4)) // GCC supports "pragma once" correctly since 3.4 14 #include "yaml-cpp/anchor.h" 15 #include "yaml-cpp/contrib/anchordict.h" 16 #include "yaml-cpp/emitterstyle.h" 17 #include "yaml-cpp/eventhandler.h" 20 class GraphBuilderInterface;
25 class GraphBuilderAdapter :
public EventHandler {
27 GraphBuilderAdapter(GraphBuilderInterface& builder)
32 m_pKeyNode(
nullptr) {}
33 GraphBuilderAdapter(
const GraphBuilderAdapter&) =
delete;
34 GraphBuilderAdapter(GraphBuilderAdapter&&) =
delete;
35 GraphBuilderAdapter& operator=(
const GraphBuilderAdapter&) =
delete;
36 GraphBuilderAdapter& operator=(GraphBuilderAdapter&&) =
delete;
38 virtual void OnDocumentStart(
const Mark& mark) { (void)mark; }
39 virtual void OnDocumentEnd() {}
41 virtual void OnNull(
const Mark& mark, anchor_t anchor);
42 virtual void OnAlias(
const Mark& mark, anchor_t anchor);
43 virtual void OnScalar(
const Mark& mark,
const std::string& tag,
44 anchor_t anchor,
const std::string& value);
46 virtual void OnSequenceStart(
const Mark& mark,
const std::string& tag,
47 anchor_t anchor, EmitterStyle::value style);
48 virtual void OnSequenceEnd();
50 virtual void OnMapStart(
const Mark& mark,
const std::string& tag,
51 anchor_t anchor, EmitterStyle::value style);
52 virtual void OnMapEnd();
54 void* RootNode()
const {
return m_pRootNode; }
57 struct ContainerFrame {
58 ContainerFrame(
void* pSequence)
59 : pContainer(pSequence), pPrevKeyNode(&sequenceMarker) {}
60 ContainerFrame(
void* pMap,
void* pPreviousKeyNode)
61 : pContainer(pMap), pPrevKeyNode(pPreviousKeyNode) {}
66 bool isMap()
const {
return pPrevKeyNode != &sequenceMarker; }
69 static int sequenceMarker;
71 typedef std::stack<ContainerFrame> ContainerStack;
72 typedef AnchorDict<void*> AnchorMap;
74 GraphBuilderInterface& m_builder;
75 ContainerStack m_containers;
80 void* GetCurrentParent()
const;
81 void RegisterAnchor(anchor_t anchor,
void* pNode);
82 void DispositionNode(
void* pNode);
86 #endif // GRAPHBUILDERADAPTER_H_62B23520_7C8E_11DE_8A39_0800200C9A66