1 #ifndef TOKEN_H_62B23520_7C8E_11DE_8A39_0800200C9A66
2 #define TOKEN_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 "yaml-cpp/mark.h"
11 #include <iostream>
12 #include <string>
13 #include <vector>
14 
15 namespace YODA_YAML {
16 const std::string TokenNames[] = {
17     "DIRECTIVE", "DOC_START", "DOC_END", "BLOCK_SEQ_START", "BLOCK_MAP_START",
18     "BLOCK_SEQ_END", "BLOCK_MAP_END", "BLOCK_ENTRY", "FLOW_SEQ_START",
19     "FLOW_MAP_START", "FLOW_SEQ_END", "FLOW_MAP_END", "FLOW_MAP_COMPACT",
20     "FLOW_ENTRY", "KEY", "VALUE", "ANCHOR", "ALIAS", "TAG", "SCALAR"};
21 
22 struct Token {
23   // enums
24   enum STATUS { VALID, INVALID, UNVERIFIED };
25   enum TYPE {
26     DIRECTIVE,
27     DOC_START,
28     DOC_END,
29     BLOCK_SEQ_START,
30     BLOCK_MAP_START,
31     BLOCK_SEQ_END,
32     BLOCK_MAP_END,
33     BLOCK_ENTRY,
34     FLOW_SEQ_START,
35     FLOW_MAP_START,
36     FLOW_SEQ_END,
37     FLOW_MAP_END,
38     FLOW_MAP_COMPACT,
39     FLOW_ENTRY,
40     KEY,
41     VALUE,
42     ANCHOR,
43     ALIAS,
44     TAG,
45     PLAIN_SCALAR,
46     NON_PLAIN_SCALAR
47   };
48 
49   // data
TokenToken50   Token(TYPE type_, const Mark& mark_)
51       : status(VALID), type(type_), mark(mark_), data(0) {}
52 
53   friend std::ostream& operator<<(std::ostream& out, const Token& token) {
54     out << TokenNames[token.type] << std::string(": ") << token.value;
55     for (std::size_t i = 0; i < token.params.size(); i++)
56       out << std::string(" ") << token.params[i];
57     return out;
58   }
59 
60   STATUS status;
61   TYPE type;
62   Mark mark;
63   std::string value;
64   std::vector<std::string> params;
65   int data;
66 };
67 }
68 
69 #endif  // TOKEN_H_62B23520_7C8E_11DE_8A39_0800200C9A66
70