LArSoft  v09_90_00
Liquid Argon Software toolkit - https://larsoft.org/
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 
21 std::string
23 {
25  return "";
26 
27  switch (tag) {
28 
29  case NIL:
30  case BOOL:
31  case NUMBER:
32  case STRING: {
33  return any_cast<atom_t>(value);
34  }
35 
36  case COMPLEX: {
37  auto c = any_cast<complex_t>(value);
38  return '(' + c.first + ',' + c.second + ')';
39  }
40 
41  case SEQUENCE: {
42  auto q = any_cast<sequence_t>(value);
43  string s("[");
44  string sep;
45  for (auto const& v : q) {
46  s.append(sep).append(v.to_string());
47  sep = ",";
48  }
49  return s + ']';
50  }
51 
52  case TABLE: {
53  auto t = any_cast<table_t>(value);
54  string s("{");
55  string sep;
56  for (auto const& pr : t) {
57  s.append(sep).append(pr.first + ':' + pr.second.to_string());
58  sep = " ";
59  }
60  return s + '}';
61  }
62 
63  case TABLEID: {
64  return string("@id::") + any_cast<atom_t>(value);
65  }
66 
67  case UNKNOWN:
68  default: {
69  return "";
70  }
71 
72  }; // switch
73 
74 } // to_string()
75 
76 // ----------------------------------------------------------------------
77 
78 void
79 fhicl::extended_value::set_prolog(bool new_prolog_state)
80 {
81  in_prolog = new_prolog_state;
82 
83  switch (tag) {
84 
85  case NIL:
86  case BOOL:
87  case NUMBER:
88  case STRING:
89  case COMPLEX:
90  case TABLEID: {
91  break;
92  }
93 
94  case SEQUENCE: {
95  auto& q = any_cast<sequence_t&>(value);
96  for (auto& e : q) {
97  e.set_prolog(new_prolog_state);
98  }
99  break;
100  }
101 
102  case TABLE: {
103  auto& t = any_cast<table_t&>(value);
104  for (auto& pr : t) {
105  pr.second.set_prolog(new_prolog_state);
106  }
107  break;
108  }
109 
110  case UNKNOWN:
111  default: {
112  break;
113  }
114 
115  }; // switch
116 
117 } // set_prolog()
118 
119 std::string
121 {
122  std::string result;
123  static std::regex const splitRE("(.*):([0-9-]*)");
124  std::smatch m;
125  if (std::regex_match(src_info, m, splitRE)) {
126  result =
127  std::string("line ") + m[2].str() + " of file \"" + m[1].str() + '"';
128  } else {
129  result = "<unknown>";
130  }
131  return result;
132 }
133 
134 // ======================================================================
std::pair< std::string, std::string > complex_t
std::vector< extended_value > sequence_t
std::string to_string() const
std::string pretty_src_info() const
bool isSnippetMode(bool m=false) noexcept
Float_t e
Definition: plot.C:35
void set_prolog(bool new_prolog_state)