graphbuilderadapter.h
Go to the documentation of this file.
00001 #ifndef GRAPHBUILDERADAPTER_H_62B23520_7C8E_11DE_8A39_0800200C9A66_PM
00002 #define GRAPHBUILDERADAPTER_H_62B23520_7C8E_11DE_8A39_0800200C9A66_PM
00003 
00004 #if defined(_MSC_VER) || (defined(__GNUC__) && (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) || (__GNUC__ >= 4)) // GCC supports "pragma once" correctly since 3.4
00005 #pragma once
00006 #endif
00007 
00008 #include <cstdlib>
00009 #include <map>
00010 #include <stack>
00011 #include "yaml-cpp-pm/eventhandler.h"
00012 #include "yaml-cpp-pm/contrib/anchordict.h"
00013 #include "yaml-cpp-pm/contrib/graphbuilder.h"
00014 
00015 namespace YAML_PM
00016 {
00017   class GraphBuilderAdapter : public EventHandler
00018   {
00019   public:
00020     GraphBuilderAdapter(GraphBuilderInterface& builder)
00021     : m_builder(builder), m_pRootNode(NULL), m_pKeyNode(NULL)
00022     {
00023     }
00024     
00025     virtual void OnDocumentStart(const Mark& mark) {(void)mark;}
00026     virtual void OnDocumentEnd() {}
00027     
00028     virtual void OnNull(const Mark& mark, anchor_t anchor);
00029     virtual void OnAlias(const Mark& mark, anchor_t anchor);
00030     virtual void OnScalar(const Mark& mark, const std::string& tag, anchor_t anchor, const std::string& value);
00031     
00032     virtual void OnSequenceStart(const Mark& mark, const std::string& tag, anchor_t anchor);
00033     virtual void OnSequenceEnd();
00034     
00035     virtual void OnMapStart(const Mark& mark, const std::string& tag, anchor_t anchor);
00036     virtual void OnMapEnd();
00037     
00038     void *RootNode() const {return m_pRootNode;}
00039   
00040   private:
00041     struct ContainerFrame
00042     {
00043       ContainerFrame(void *pSequence)
00044       : pContainer(pSequence), pPrevKeyNode(&sequenceMarker)
00045       {}
00046       ContainerFrame(void *pMap, void* pPrevKeyNode)
00047       : pContainer(pMap), pPrevKeyNode(pPrevKeyNode)
00048       {}
00049       
00050       void *pContainer;
00051       void *pPrevKeyNode;
00052       
00053       bool isMap() const {return pPrevKeyNode != &sequenceMarker;}
00054     
00055     private:
00056       static int sequenceMarker;
00057     };
00058     typedef std::stack<ContainerFrame> ContainerStack;
00059     typedef AnchorDict<void*> AnchorMap;
00060     
00061     GraphBuilderInterface& m_builder;
00062     ContainerStack m_containers;
00063     AnchorMap m_anchors;
00064     void *m_pRootNode;
00065     void *m_pKeyNode;
00066     
00067     void *GetCurrentParent() const;
00068     void RegisterAnchor(anchor_t anchor, void *pNode);
00069     void DispositionNode(void *pNode);
00070   };
00071 }
00072 
00073 #endif // GRAPHBUILDERADAPTER_H_62B23520_7C8E_11DE_8A39_0800200C9A66_PM


libpointmatcher
Author(s):
autogenerated on Thu Jun 20 2019 19:51:29