extended_value.cc
Go to the documentation of this file.
1 // ======================================================================
2 //
3 // extended_value
4 //
5 // ======================================================================
6 
10 
11 #include <regex>
12 
13 using std::any_cast;
14 using std::string;
15 
16 // ----------------------------------------------------------------------
17 
20 {
22  return "";
23 
24  switch (tag) {
25 
26  case NIL:
27  case BOOL:
28  case NUMBER:
29  case STRING: {
30  return any_cast<atom_t>(value);
31  }
32 
33  case COMPLEX: {
34  auto c = any_cast<complex_t>(value);
35  return '(' + c.first + ',' + c.second + ')';
36  }
37 
38  case SEQUENCE: {
39  auto q = any_cast<sequence_t>(value);
40  string s("[");
41  string sep;
42  for (auto const& v : q) {
43  s.append(sep).append(v.to_string());
44  sep = ",";
45  }
46  return s + ']';
47  }
48 
49  case TABLE: {
50  auto t = any_cast<table_t>(value);
51  string s("{");
52  string sep;
53  for (auto const& pr : t) {
54  s.append(sep).append(pr.first + ':' + pr.second.to_string());
55  sep = " ";
56  }
57  return s + '}';
58  }
59 
60  case TABLEID: {
61  return string("@id::") + any_cast<atom_t>(value);
62  }
63 
64  case UNKNOWN:
65  default: {
66  return "";
67  }
68 
69  }; // switch
70 
71 } // to_string()
72 
73 // ----------------------------------------------------------------------
74 
75 void
76 fhicl::extended_value::set_prolog(bool new_prolog_state)
77 {
78  in_prolog = new_prolog_state;
79 
80  switch (tag) {
81 
82  case NIL:
83  case BOOL:
84  case NUMBER:
85  case STRING:
86  case COMPLEX:
87  case TABLEID: {
88  break;
89  }
90 
91  case SEQUENCE: {
92  auto& q = any_cast<sequence_t&>(value);
93  for (auto& e : q) {
94  e.set_prolog(new_prolog_state);
95  }
96  break;
97  }
98 
99  case TABLE: {
100  auto& t = any_cast<table_t&>(value);
101  for (auto& pr : t) {
102  pr.second.set_prolog(new_prolog_state);
103  }
104  break;
105  }
106 
107  case UNKNOWN:
108  default: {
109  break;
110  }
111 
112  }; // switch
113 
114 } // set_prolog()
115 
118 {
120  static std::regex const splitRE("(.*):([0-9-]*)");
121  std::smatch m;
122  if (std::regex_match(src_info, m, splitRE)) {
123  result =
124  std::string("line ") + m[2].str() + " of file \"" + m[1].str() + '"';
125  } else {
126  result = "<unknown>";
127  }
128  return result;
129 }
130 
131 // ======================================================================
bool isSnippetMode(bool m)
Definition: parse_shims.cc:9
static QCString result
std::string string
Definition: nybbler.cc:12
std::pair< std::string, std::string > complex_t
const double e
std::vector< extended_value > sequence_t
std::string to_string() const
std::string pretty_src_info() const
void set_prolog(bool new_prolog_state)
static QCString * s
Definition: config.cpp:1042