Block-Structured AMR Software Framework
AMReX_Parser_Exe.H
Go to the documentation of this file.
1 #ifndef AMREX_PARSER_EXE_H_
2 #define AMREX_PARSER_EXE_H_
3 #include <AMReX_Config.H>
4 
5 #include <AMReX_Parser_Y.H>
6 #include <AMReX_Stack.H>
7 #include <AMReX_Vector.H>
8 
9 #include <limits>
10 
11 #ifndef AMREX_PARSER_STACK_SIZE
12 #define AMREX_PARSER_STACK_SIZE 16
13 #endif
14 
15 #define AMREX_PARSER_LOCAL_IDX0 1000
16 #define AMREX_PARSER_GET_DATA(i) ((i)<1000) ? x[i] : pstack[(i)-1000]
17 
18 namespace amrex {
19 
20 // N: node
21 // P: pointer offset
22 // V: value (i.e., double literal)
23 
57 };
58 
59 struct alignas(8) ParserExeNull {
61 };
62 
63 struct alignas(8) ParserExeNumber {
65  double v;
66 };
67 
68 struct alignas(8) ParserExeSymbol {
70  int i;
71 };
72 
73 struct alignas(8) ParserExeADD {
75 };
76 
77 struct alignas(8) ParserExeSUB_F {
79 };
80 
81 struct alignas(8) ParserExeSUB_B {
83 };
84 
85 struct alignas(8) ParserExeMUL {
87 };
88 
89 struct alignas(8) ParserExeDIV_F {
91 };
92 
93 struct alignas(8) ParserExeDIV_B {
95 };
96 
97 struct alignas(8) ParserExeF1 {
100 };
101 
102 struct alignas(8) ParserExeF2_F {
105 };
106 
107 struct alignas(8) ParserExeF2_B {
110 };
111 
112 struct alignas(8) ParserExeADD_VP {
114  int i;
115  double v;
116 };
117 
118 struct alignas(8) ParserExeSUB_VP {
120  int i;
121  double v;
122 };
123 
124 struct alignas(8) ParserExeMUL_VP {
126  int i;
127  double v;
128 };
129 
130 struct alignas(8) ParserExeDIV_VP {
132  int i;
133  double v;
134 };
135 
136 struct alignas(8) ParserExeADD_PP {
138  int i1;
139  int i2;
140 };
141 
142 struct alignas(8) ParserExeSUB_PP {
144  int i1;
145  int i2;
146 };
147 
148 struct alignas(8) ParserExeMUL_PP {
150  int i1;
151  int i2;
152 };
153 
154 struct alignas(8) ParserExeDIV_PP {
156  int i1;
157  int i2;
158 };
159 
160 struct alignas(8) ParserExeADD_VN {
162  double v;
163 };
164 
165 struct alignas(8) ParserExeSUB_VN {
167  double v;
168 };
169 
170 struct alignas(8) ParserExeMUL_VN {
172  double v;
173 };
174 
175 struct alignas(8) ParserExeDIV_VN {
177  double v;
178 };
179 
180 struct alignas(8) ParserExeADD_PN {
182  int i;
183 };
184 
185 struct alignas(8) ParserExeSUB_PN {
187  int i;
188  double sign;
189 };
190 
191 struct alignas(8) ParserExeMUL_PN {
193  int i;
194 };
195 
196 struct alignas(8) ParserExeDIV_PN {
198  int i;
199  bool reverse;
200 };
201 
202 struct alignas(8) ParserExeSquare {
204 };
205 
206 struct alignas(8) ParserExePOWI {
208  int i;
209 };
210 
211 struct alignas(8) ParserExeIF {
213  int offset;
214 };
215 
216 struct alignas(8) ParserExeJUMP {
218  int offset;
219 };
220 
222 double parser_exe_eval (const char* p, double const* x)
223 {
224  if (p == nullptr) { return std::numeric_limits<double>::max(); }
225 
227  while (*((parser_exe_t*)p) != PARSER_EXE_NULL) { // NOLINT
228  switch (*((parser_exe_t*)p))
229  {
230  case PARSER_EXE_NUMBER:
231  {
232  pstack.push(((ParserExeNumber*)p)->v);
233  p += sizeof(ParserExeNumber);
234  break;
235  }
236  case PARSER_EXE_SYMBOL:
237  {
238  int i = ((ParserExeSymbol*)p)->i;
239  double d = AMREX_PARSER_GET_DATA(i);
240  pstack.push(d);
241  p += sizeof(ParserExeSymbol);
242  break;
243  }
244  case PARSER_EXE_ADD:
245  {
246  double b = pstack.top(); // NOLINT
247  pstack.pop();
248  pstack.top() += b; // NOLINT
249  p += sizeof(ParserExeADD);
250  break;
251  }
252  case PARSER_EXE_SUB_F:
253  {
254  double b = pstack.top(); // NOLINT
255  pstack.pop();
256  pstack.top() -= b; // NOLINT
257  p += sizeof(ParserExeSUB_F);
258  break;
259  }
260  case PARSER_EXE_SUB_B:
261  {
262  double b = pstack.top(); // NOLINT
263  pstack.pop();
264  pstack.top() = b - pstack.top(); // NOLINT
265  p += sizeof(ParserExeSUB_B);
266  break;
267  }
268  case PARSER_EXE_MUL:
269  {
270  double b = pstack.top(); // NOLINT
271  pstack.pop();
272  pstack.top() *= b; // NOLINT
273  p += sizeof(ParserExeMUL);
274  break;
275  }
276  case PARSER_EXE_DIV_F:
277  {
278  double v = pstack.top(); // NOLINT
279  pstack.pop();
280  pstack.top() /= v; // NOLINT
281  p += sizeof(ParserExeDIV_F);
282  break;
283  }
284  case PARSER_EXE_DIV_B:
285  {
286  double v = pstack.top(); // NOLINT
287  pstack.pop();
288  pstack.top() = v / pstack.top(); // NOLINT
289  p += sizeof(ParserExeDIV_B);
290  break;
291  }
292  case PARSER_EXE_F1:
293  {
294  pstack.top() = parser_call_f1(((ParserExeF1*)p)->ftype, pstack.top()); // NOLINT
295  p += sizeof(ParserExeF1);
296  break;
297  }
298  case PARSER_EXE_F2_F:
299  {
300  double v = pstack.top(); // NOLINT
301  pstack.pop();
302  pstack.top() = parser_call_f2(((ParserExeF2_F*)p)->ftype, pstack.top(), v); // NOLINT
303  p += sizeof(ParserExeF2_F);
304  break;
305  }
306  case PARSER_EXE_F2_B:
307  {
308  double v = pstack.top(); // NOLINT
309  pstack.pop();
310  pstack.top() = parser_call_f2(((ParserExeF2_B*)p)->ftype, v, pstack.top()); // NOLINT
311  p += sizeof(ParserExeF2_B);
312  break;
313  }
314  case PARSER_EXE_ADD_VP:
315  {
316  int i = ((ParserExeADD_VP*)p)->i;
317  double d = AMREX_PARSER_GET_DATA(i);
318  pstack.push(((ParserExeADD_VP*)p)->v + d);
319  p += sizeof(ParserExeADD_VP);
320  break;
321  }
322  case PARSER_EXE_SUB_VP:
323  {
324  int i = ((ParserExeSUB_VP*)p)->i;
325  double d = AMREX_PARSER_GET_DATA(i);
326  pstack.push(((ParserExeSUB_VP*)p)->v - d);
327  p += sizeof(ParserExeSUB_VP);
328  break;
329  }
330  case PARSER_EXE_MUL_VP:
331  {
332  int i = ((ParserExeMUL_VP*)p)->i;
333  double d = AMREX_PARSER_GET_DATA(i);
334  pstack.push(((ParserExeMUL_VP*)p)->v * d);
335  p += sizeof(ParserExeMUL_VP);
336  break;
337  }
338  case PARSER_EXE_DIV_VP:
339  {
340  int i = ((ParserExeDIV_VP*)p)->i;
341  double d = AMREX_PARSER_GET_DATA(i);
342  pstack.push(((ParserExeDIV_VP*)p)->v / d);
343  p += sizeof(ParserExeDIV_VP);
344  break;
345  }
346  case PARSER_EXE_ADD_PP:
347  {
348  int i = ((ParserExeADD_PP*)p)->i1;
349  double d1 = AMREX_PARSER_GET_DATA(i);
350  i = ((ParserExeADD_PP*)p)->i2;
351  double d2 = AMREX_PARSER_GET_DATA(i);
352  pstack.push(d1+d2);
353  p += sizeof(ParserExeADD_PP);
354  break;
355  }
356  case PARSER_EXE_SUB_PP:
357  {
358  int i = ((ParserExeSUB_PP*)p)->i1;
359  double d1 = AMREX_PARSER_GET_DATA(i);
360  i = ((ParserExeSUB_PP*)p)->i2;
361  double d2 = AMREX_PARSER_GET_DATA(i);
362  pstack.push(d1-d2);
363  p += sizeof(ParserExeSUB_PP);
364  break;
365  }
366  case PARSER_EXE_MUL_PP:
367  {
368  int i = ((ParserExeMUL_PP*)p)->i1;
369  double d1 = AMREX_PARSER_GET_DATA(i);
370  i = ((ParserExeMUL_PP*)p)->i2;
371  double d2 = AMREX_PARSER_GET_DATA(i);
372  pstack.push(d1*d2);
373  p += sizeof(ParserExeMUL_PP);
374  break;
375  }
376  case PARSER_EXE_DIV_PP:
377  {
378  int i = ((ParserExeDIV_PP*)p)->i1;
379  double d1 = AMREX_PARSER_GET_DATA(i);
380  i = ((ParserExeDIV_PP*)p)->i2;
381  double d2 = AMREX_PARSER_GET_DATA(i);
382  pstack.push(d1/d2);
383  p += sizeof(ParserExeDIV_PP);
384  break;
385  }
386  case PARSER_EXE_ADD_VN:
387  {
388  pstack.top() += ((ParserExeADD_VN*)p)->v; // NOLINT
389  p += sizeof(ParserExeADD_VN);
390  break;
391  }
392  case PARSER_EXE_SUB_VN:
393  {
394  pstack.top() = ((ParserExeSUB_VN*)p)->v - pstack.top(); // NOLINT
395  p += sizeof(ParserExeSUB_VN);
396  break;
397  }
398  case PARSER_EXE_MUL_VN:
399  {
400  pstack.top() *= ((ParserExeMUL_VN*)p)->v; // NOLINT
401  p += sizeof(ParserExeMUL_VN);
402  break;
403  }
404  case PARSER_EXE_DIV_VN:
405  {
406  pstack.top() = ((ParserExeDIV_VN*)p)->v / pstack.top(); // NOLINT
407  p += sizeof(ParserExeDIV_VN);
408  break;
409  }
410  case PARSER_EXE_ADD_PN:
411  {
412  int i = ((ParserExeADD_PN*)p)->i;
413  double d = AMREX_PARSER_GET_DATA(i);
414  pstack.top() += d; // NOLINT
415  p += sizeof(ParserExeADD_PN);
416  break;
417  }
418  case PARSER_EXE_SUB_PN:
419  {
420  int i = ((ParserExeSUB_PN*)p)->i;
421  double d = AMREX_PARSER_GET_DATA(i);
422  pstack.top() = (d - pstack.top()) * (((ParserExeSUB_PN*)p)->sign); // NOLINT
423  p += sizeof(ParserExeSUB_PN);
424  break;
425  }
426  case PARSER_EXE_MUL_PN:
427  {
428  int i = ((ParserExeMUL_PN*)p)->i;
429  double d = AMREX_PARSER_GET_DATA(i);
430  pstack.top() *= d; // NOLINT
431  p += sizeof(ParserExeMUL_PN);
432  break;
433  }
434  case PARSER_EXE_DIV_PN:
435  {
436  int i = ((ParserExeDIV_PN*)p)->i;
437  double d = AMREX_PARSER_GET_DATA(i);
438  if (((ParserExeDIV_PN*)p)->reverse) {
439  pstack.top() /= d; // NOLINT
440  } else {
441  pstack.top() = d / pstack.top(); // NOLINT
442  }
443  p += sizeof(ParserExeDIV_PN);
444  break;
445  }
446  case PARSER_EXE_SQUARE:
447  {
448  double& d = pstack.top();
449  d *= d;
450  p += sizeof(ParserExeSquare);
451  break;
452  }
453  case PARSER_EXE_POWI:
454  {
455  double& d = pstack.top();
456  int n = ((ParserExePOWI*)p)->i;
457  if (n != 0) {
458  if (n < 0) {
459  d = 1.0/d;
460  n = -n;
461  }
462  double y = 1.0;
463  while (n > 1) {
464  if (n % 2 == 0) {
465  d *= d;
466  n = n/2;
467  } else {
468  y *= d;
469  d *= d;
470  n = (n-1)/2;
471  }
472  }
473  d *= y;
474  } else {
475  d = 1.0;
476  }
477  p += sizeof(ParserExePOWI);
478  break;
479  }
480  case PARSER_EXE_IF:
481  {
482  double cond = pstack.top(); // NOLINT
483  pstack.pop();
484  if (cond == 0.0) { // false branch
485  p += ((ParserExeIF*)p)->offset;
486  }
487  p += sizeof(ParserExeIF);
488  break;
489  }
490  case PARSER_EXE_JUMP:
491  {
492  int offset = ((ParserExeJUMP*)p)->offset;
493  p += sizeof(ParserExeJUMP) + offset;
494  break;
495  }
496  default:
497  AMREX_ALWAYS_ASSERT_WITH_MESSAGE(false,"parser_exe_eval: unknown node type");
498  }
499  }
500  return pstack.top(); // NOLINT
501 }
502 
503 void parser_compile_exe_size (struct parser_node* node, char*& p, std::size_t& exe_size,
504  int& max_stack_size, int& stack_size, Vector<char const*>& local_variables);
505 
506 inline std::size_t
507 parser_exe_size (struct amrex_parser* parser, int& max_stack_size, int& stack_size)
508 {
509  parser_ast_sort(parser->ast);
510  char* p = nullptr;
511  std::size_t exe_size = 0;
512  max_stack_size = 0;
513  stack_size = 0;
514  Vector<char const*> local_variables;
515  parser_compile_exe_size(parser->ast, p, exe_size, max_stack_size, stack_size, local_variables);
516  stack_size -= static_cast<int>(local_variables.size())+1;
517  return exe_size+sizeof(ParserExeNull);
518 }
519 
520 inline Vector<char const*>
521 parser_compile (struct amrex_parser* parser, char* p)
522 {
523  std::size_t exe_size = 0;
524  int max_stack_size = 0;
525  int stack_size = 0;
526  Vector<char const*> local_variables;
527  parser_compile_exe_size(parser->ast, p, exe_size, max_stack_size, stack_size, local_variables);
528  new(p) ParserExeNull;
529  return local_variables;
530 }
531 
532 void parser_exe_print(char const* parser, Vector<std::string> const& vars,
533  Vector<char const*> const& locals);
534 
535 }
536 
537 #endif
#define AMREX_ALWAYS_ASSERT_WITH_MESSAGE(EX, MSG)
Definition: AMReX_BLassert.H:49
#define AMREX_FORCE_INLINE
Definition: AMReX_Extension.H:119
#define AMREX_GPU_HOST_DEVICE
Definition: AMReX_GpuQualifiers.H:20
Array4< int const > offset
Definition: AMReX_HypreMLABecLap.cpp:1089
#define AMREX_PARSER_GET_DATA(i)
Definition: AMReX_Parser_Exe.H:16
This class is a thin wrapper around std::vector. Unlike vector, Vector::operator[] provides bound che...
Definition: AMReX_Vector.H:27
Long size() const noexcept
Definition: AMReX_Vector.H:50
@ max
Definition: AMReX_ParallelReduce.H:17
Definition: AMReX_Amr.cpp:49
parser_f2_t
Definition: AMReX_Parser_Y.H:81
parser_exe_t
Definition: AMReX_Parser_Exe.H:24
@ PARSER_EXE_SUB_VP
Definition: AMReX_Parser_Exe.H:38
@ PARSER_EXE_POWI
Definition: AMReX_Parser_Exe.H:54
@ PARSER_EXE_ADD_VN
Definition: AMReX_Parser_Exe.H:45
@ PARSER_EXE_NUMBER
Definition: AMReX_Parser_Exe.H:26
@ PARSER_EXE_SYMBOL
Definition: AMReX_Parser_Exe.H:27
@ PARSER_EXE_DIV_B
Definition: AMReX_Parser_Exe.H:33
@ PARSER_EXE_DIV_VN
Definition: AMReX_Parser_Exe.H:48
@ PARSER_EXE_F2_B
Definition: AMReX_Parser_Exe.H:36
@ PARSER_EXE_SUB_F
Definition: AMReX_Parser_Exe.H:29
@ PARSER_EXE_SUB_VN
Definition: AMReX_Parser_Exe.H:46
@ PARSER_EXE_SQUARE
Definition: AMReX_Parser_Exe.H:53
@ PARSER_EXE_F2_F
Definition: AMReX_Parser_Exe.H:35
@ PARSER_EXE_ADD
Definition: AMReX_Parser_Exe.H:28
@ PARSER_EXE_DIV_PN
Definition: AMReX_Parser_Exe.H:52
@ PARSER_EXE_ADD_VP
Definition: AMReX_Parser_Exe.H:37
@ PARSER_EXE_MUL_PP
Definition: AMReX_Parser_Exe.H:43
@ PARSER_EXE_SUB_PN
Definition: AMReX_Parser_Exe.H:50
@ PARSER_EXE_MUL_VN
Definition: AMReX_Parser_Exe.H:47
@ PARSER_EXE_ADD_PN
Definition: AMReX_Parser_Exe.H:49
@ PARSER_EXE_JUMP
Definition: AMReX_Parser_Exe.H:56
@ PARSER_EXE_ADD_PP
Definition: AMReX_Parser_Exe.H:41
@ PARSER_EXE_MUL_PN
Definition: AMReX_Parser_Exe.H:51
@ PARSER_EXE_MUL
Definition: AMReX_Parser_Exe.H:31
@ PARSER_EXE_MUL_VP
Definition: AMReX_Parser_Exe.H:39
@ PARSER_EXE_SUB_B
Definition: AMReX_Parser_Exe.H:30
@ PARSER_EXE_NULL
Definition: AMReX_Parser_Exe.H:25
@ PARSER_EXE_F1
Definition: AMReX_Parser_Exe.H:34
@ PARSER_EXE_DIV_F
Definition: AMReX_Parser_Exe.H:32
@ PARSER_EXE_IF
Definition: AMReX_Parser_Exe.H:55
@ PARSER_EXE_DIV_VP
Definition: AMReX_Parser_Exe.H:40
@ PARSER_EXE_SUB_PP
Definition: AMReX_Parser_Exe.H:42
@ PARSER_EXE_DIV_PP
Definition: AMReX_Parser_Exe.H:44
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE double parser_call_f1(enum parser_f1_t type, double a)
Definition: AMReX_Parser_Y.H:404
void parser_ast_sort(struct parser_node *node)
Definition: AMReX_Parser_Y.cpp:1456
parser_f1_t
Definition: AMReX_Parser_Y.H:24
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE double parser_call_f2(enum parser_f2_t type, double a, double b)
Definition: AMReX_Parser_Y.H:436
void parser_compile_exe_size(struct parser_node *node, char *&p, std::size_t &exe_size, int &max_stack_size, int &stack_size, Vector< char const * > &local_variables)
Definition: AMReX_Parser_Exe.cpp:7
std::size_t parser_exe_size(struct amrex_parser *parser, int &max_stack_size, int &stack_size)
Definition: AMReX_Parser_Exe.H:507
void parser_exe_print(char const *p, Vector< std::string > const &vars, Vector< char const * > const &locals)
Definition: AMReX_Parser_Exe.cpp:641
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE double parser_exe_eval(const char *p, double const *x)
Definition: AMReX_Parser_Exe.H:222
Vector< char const * > parser_compile(struct amrex_parser *parser, char *p)
Definition: AMReX_Parser_Exe.H:521
Definition: AMReX_Parser_Exe.H:180
int i
Definition: AMReX_Parser_Exe.H:182
enum parser_exe_t type
Definition: AMReX_Parser_Exe.H:181
Definition: AMReX_Parser_Exe.H:136
int i1
Definition: AMReX_Parser_Exe.H:138
enum parser_exe_t type
Definition: AMReX_Parser_Exe.H:137
int i2
Definition: AMReX_Parser_Exe.H:139
Definition: AMReX_Parser_Exe.H:160
enum parser_exe_t type
Definition: AMReX_Parser_Exe.H:161
double v
Definition: AMReX_Parser_Exe.H:162
Definition: AMReX_Parser_Exe.H:112
enum parser_exe_t type
Definition: AMReX_Parser_Exe.H:113
double v
Definition: AMReX_Parser_Exe.H:115
int i
Definition: AMReX_Parser_Exe.H:114
Definition: AMReX_Parser_Exe.H:73
enum parser_exe_t type
Definition: AMReX_Parser_Exe.H:74
Definition: AMReX_Parser_Exe.H:93
enum parser_exe_t type
Definition: AMReX_Parser_Exe.H:94
Definition: AMReX_Parser_Exe.H:89
enum parser_exe_t type
Definition: AMReX_Parser_Exe.H:90
Definition: AMReX_Parser_Exe.H:196
bool reverse
Definition: AMReX_Parser_Exe.H:199
enum parser_exe_t type
Definition: AMReX_Parser_Exe.H:197
int i
Definition: AMReX_Parser_Exe.H:198
Definition: AMReX_Parser_Exe.H:154
int i2
Definition: AMReX_Parser_Exe.H:157
int i1
Definition: AMReX_Parser_Exe.H:156
enum parser_exe_t type
Definition: AMReX_Parser_Exe.H:155
Definition: AMReX_Parser_Exe.H:175
double v
Definition: AMReX_Parser_Exe.H:177
enum parser_exe_t type
Definition: AMReX_Parser_Exe.H:176
Definition: AMReX_Parser_Exe.H:130
double v
Definition: AMReX_Parser_Exe.H:133
int i
Definition: AMReX_Parser_Exe.H:132
enum parser_exe_t type
Definition: AMReX_Parser_Exe.H:131
Definition: AMReX_Parser_Exe.H:97
parser_f1_t ftype
Definition: AMReX_Parser_Exe.H:99
enum parser_exe_t type
Definition: AMReX_Parser_Exe.H:98
Definition: AMReX_Parser_Exe.H:107
enum parser_exe_t type
Definition: AMReX_Parser_Exe.H:108
parser_f2_t ftype
Definition: AMReX_Parser_Exe.H:109
Definition: AMReX_Parser_Exe.H:102
enum parser_exe_t type
Definition: AMReX_Parser_Exe.H:103
parser_f2_t ftype
Definition: AMReX_Parser_Exe.H:104
Definition: AMReX_Parser_Exe.H:211
int offset
Definition: AMReX_Parser_Exe.H:213
enum parser_exe_t type
Definition: AMReX_Parser_Exe.H:212
Definition: AMReX_Parser_Exe.H:216
enum parser_exe_t type
Definition: AMReX_Parser_Exe.H:217
int offset
Definition: AMReX_Parser_Exe.H:218
Definition: AMReX_Parser_Exe.H:191
int i
Definition: AMReX_Parser_Exe.H:193
enum parser_exe_t type
Definition: AMReX_Parser_Exe.H:192
Definition: AMReX_Parser_Exe.H:148
int i1
Definition: AMReX_Parser_Exe.H:150
enum parser_exe_t type
Definition: AMReX_Parser_Exe.H:149
int i2
Definition: AMReX_Parser_Exe.H:151
Definition: AMReX_Parser_Exe.H:170
double v
Definition: AMReX_Parser_Exe.H:172
enum parser_exe_t type
Definition: AMReX_Parser_Exe.H:171
Definition: AMReX_Parser_Exe.H:124
double v
Definition: AMReX_Parser_Exe.H:127
int i
Definition: AMReX_Parser_Exe.H:126
enum parser_exe_t type
Definition: AMReX_Parser_Exe.H:125
Definition: AMReX_Parser_Exe.H:85
enum parser_exe_t type
Definition: AMReX_Parser_Exe.H:86
Definition: AMReX_Parser_Exe.H:59
enum parser_exe_t type
Definition: AMReX_Parser_Exe.H:60
Definition: AMReX_Parser_Exe.H:63
double v
Definition: AMReX_Parser_Exe.H:65
enum parser_exe_t type
Definition: AMReX_Parser_Exe.H:64
Definition: AMReX_Parser_Exe.H:206
enum parser_exe_t type
Definition: AMReX_Parser_Exe.H:207
int i
Definition: AMReX_Parser_Exe.H:208
Definition: AMReX_Parser_Exe.H:81
enum parser_exe_t type
Definition: AMReX_Parser_Exe.H:82
Definition: AMReX_Parser_Exe.H:77
enum parser_exe_t type
Definition: AMReX_Parser_Exe.H:78
Definition: AMReX_Parser_Exe.H:185
enum parser_exe_t type
Definition: AMReX_Parser_Exe.H:186
double sign
Definition: AMReX_Parser_Exe.H:188
int i
Definition: AMReX_Parser_Exe.H:187
Definition: AMReX_Parser_Exe.H:142
int i1
Definition: AMReX_Parser_Exe.H:144
enum parser_exe_t type
Definition: AMReX_Parser_Exe.H:143
int i2
Definition: AMReX_Parser_Exe.H:145
Definition: AMReX_Parser_Exe.H:165
enum parser_exe_t type
Definition: AMReX_Parser_Exe.H:166
double v
Definition: AMReX_Parser_Exe.H:167
Definition: AMReX_Parser_Exe.H:118
double v
Definition: AMReX_Parser_Exe.H:121
int i
Definition: AMReX_Parser_Exe.H:120
enum parser_exe_t type
Definition: AMReX_Parser_Exe.H:119
Definition: AMReX_Parser_Exe.H:202
enum parser_exe_t type
Definition: AMReX_Parser_Exe.H:203
Definition: AMReX_Parser_Exe.H:68
enum parser_exe_t type
Definition: AMReX_Parser_Exe.H:69
int i
Definition: AMReX_Parser_Exe.H:70
Definition: AMReX_Stack.H:8
constexpr void push(T v)
Definition: AMReX_Stack.H:10
constexpr void pop()
Definition: AMReX_Stack.H:11
constexpr T const & top() const
Definition: AMReX_Stack.H:14
Definition: AMReX_Parser_Y.H:255
struct parser_node * ast
Definition: AMReX_Parser_Y.H:258