Free Electron
emitfromevents.h
1 #ifndef EMITFROMEVENTS_H_62B23520_7C8E_11DE_8A39_0800200C9A66
2 #define EMITFROMEVENTS_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 <stack>
11 
12 #include "yaml-cpp/anchor.h"
13 #include "yaml-cpp/emitterstyle.h"
14 #include "yaml-cpp/eventhandler.h"
15 
16 namespace YAML {
17 struct Mark;
18 } // namespace YAML
19 
20 namespace YAML {
21 class Emitter;
22 
23 class EmitFromEvents : public EventHandler {
24  public:
25  EmitFromEvents(Emitter& emitter);
26 
27  void OnDocumentStart(const Mark& mark) override;
28  void OnDocumentEnd() override;
29 
30  void OnNull(const Mark& mark, anchor_t anchor) override;
31  void OnAlias(const Mark& mark, anchor_t anchor) override;
32  void OnScalar(const Mark& mark, const std::string& tag,
33  anchor_t anchor, const std::string& value) override;
34 
35  void OnSequenceStart(const Mark& mark, const std::string& tag,
36  anchor_t anchor, EmitterStyle::value style) override;
37  void OnSequenceEnd() override;
38 
39  void OnMapStart(const Mark& mark, const std::string& tag,
40  anchor_t anchor, EmitterStyle::value style) override;
41  void OnMapEnd() override;
42 
43  private:
44  void BeginNode();
45  void EmitProps(const std::string& tag, anchor_t anchor);
46 
47  private:
48  Emitter& m_emitter;
49 
50  struct State {
51  enum value { WaitingForSequenceEntry, WaitingForKey, WaitingForValue };
52  };
53  std::stack<State::value> m_stateStack;
54 };
55 }
56 
57 #endif // EMITFROMEVENTS_H_62B23520_7C8E_11DE_8A39_0800200C9A66
Definition: anchor.h:12