libwreport  3.40
interpreter.h
1 #ifndef WREPORT_BULLETIN_INTERPETER_H
2 #define WREPORT_BULLETIN_INTERPETER_H
3 
4 #include <memory>
5 #include <stack>
6 #include <wreport/bulletin/associated_fields.h>
7 #include <wreport/bulletin/bitmaps.h>
8 #include <wreport/opcodes.h>
9 #include <wreport/tables.h>
10 
11 namespace wreport {
12 struct Vartable;
13 struct DTable;
14 struct Var;
15 
16 namespace bulletin {
17 
26 {
27  const Tables& tables;
28  std::stack<Opcodes> opcode_stack;
29 
32 
35 
37  int c_scale_change = 0;
38 
40  int c_width_change = 0;
41 
44 
50 
52  std::map<wreport::Varcode, uint32_t> c03_refval_overrides;
53 
57 
58 protected:
64 
65 public:
66  Interpreter(const Tables& tables, const Opcodes& opcodes);
67  virtual ~Interpreter();
68 
69  Interpreter(const Interpreter&) = delete;
70  Interpreter& operator=(const Interpreter&) = delete;
71 
73  void run();
74 
81  virtual void b_variable(Varcode code);
82 
92  virtual void c_modifier(Varcode code, Opcodes& next);
93 
105  virtual void r_replication(Varcode code, Varcode delayed_code,
106  const Opcodes& ops);
107 
111  virtual void r_bitmap(Varcode code, Varcode delayed_code,
112  const Opcodes& ops);
113 
126  virtual void run_r_repetition(unsigned cur, unsigned total);
127 
138  virtual void run_d_expansion(Varcode code);
139 
155  virtual void define_bitmap(unsigned bitmap_size);
156 
160  virtual void define_variable(Varinfo info);
161 
166 
177  virtual unsigned define_delayed_replication_factor(Varinfo info);
178 
185  virtual unsigned define_bitmap_delayed_replication_factor(Varinfo info);
186 
193  virtual unsigned define_associated_field_significance(Varinfo info);
194 
199  virtual void define_substituted_value(unsigned pos);
200 
205  virtual void define_attribute(Varinfo info, unsigned pos);
206 
208  virtual void define_raw_character_data(Varcode code);
209 
214  virtual void define_c03_refval_override(Varcode code);
215 
217  static void print_c_modifier(FILE* out, Varcode code, Opcodes& nex);
218 };
219 
224 class Printer : public Interpreter
225 {
226 protected:
233  void print_lead(Varcode code);
234 
235 public:
241  FILE* out;
242 
249  unsigned indent;
250 
252  unsigned indent_step;
253 
254  Printer(const Tables& tables, const Opcodes& opcodes);
255 
256  void b_variable(Varcode code) override;
257  void c_modifier(Varcode code, Opcodes& next) override;
258  void r_replication(Varcode code, Varcode delayed_code,
259  const Opcodes& ops) override;
260  void run_d_expansion(Varcode code) override;
261  void define_variable(Varinfo info) override;
263  void define_bitmap(unsigned bitmap_size) override;
264  unsigned define_bitmap_delayed_replication_factor(Varinfo info) override;
265  unsigned define_associated_field_significance(Varinfo info) override;
266 };
267 
268 } // namespace bulletin
269 } // namespace wreport
270 #endif
virtual void define_variable_with_associated_field(Varinfo info)
Request processing, according to info, of a data variable.
virtual void define_c03_refval_override(Varcode code)
Request processing of a new value for the reference value of the given B code.
Definition: bitmaps.h:66
void c_modifier(Varcode code, Opcodes &next) override
Notify of a C modifier.
virtual unsigned define_associated_field_significance(Varinfo info)
Request processing of an associated field significance variable (B31021).
virtual void b_variable(Varcode code)
Notify of a B variable entry.
void define_bitmap(unsigned bitmap_size) override
Request processing of a data present bitmap.
virtual void r_bitmap(Varcode code, Varcode delayed_code, const Opcodes &ops)
Handle a replicated section which defines a bitmap.
std::map< wreport::Varcode, uint32_t > c03_refval_overrides
Current reference value overrides.
Definition: interpreter.h:52
void define_variable(Varinfo info) override
Request processing, according to info, of a data variable.
virtual unsigned define_delayed_replication_factor(Varinfo info)
Request processing, according to info, of a data variabile that is significant for controlling the en...
virtual void c_modifier(Varcode code, Opcodes &next)
Notify of a C modifier.
virtual void define_attribute(Varinfo info, unsigned pos)
Request processing of an attribute encoded with info, related to the variable as position pos in the ...
virtual void run_r_repetition(unsigned cur, unsigned total)
Executes a repetition of the opcodes on top of the stack.
unsigned define_associated_field_significance(Varinfo info) override
Request processing of an associated field significance variable (B31021).
virtual void run_d_expansion(Varcode code)
Executes the expansion of code, which has been put on top of the opcode stack.
Collection of BUFR/CREX tables used to work on a bulletin.
Definition: tables.h:14
void run_d_expansion(Varcode code) override
Executes the expansion of code, which has been put on top of the opcode stack.
unsigned indent_step
How many spaces in an indentation level.
Definition: interpreter.h:252
virtual void define_bitmap(unsigned bitmap_size)
Request processing of a data present bitmap.
static void print_c_modifier(FILE *out, Varcode code, Opcodes &nex)
Print a description of this C modifier.
Interpreter that pretty-prints the opcodes using indentation to show structure.
Definition: interpreter.h:224
unsigned c03_refval_override_bits
Set to the number of reference value override bits while reading the override values.
Definition: interpreter.h:56
uint16_t Varcode
Holds the WMO variable code of a variable.
Definition: fwd.h:12
Varinfo get_varinfo(Varcode code)
Return a Varinfo for the given Varcode, applying all relevant C modifications that are currently acti...
unsigned indent
Current indent level.
Definition: interpreter.h:249
void define_variable_with_associated_field(Varinfo info) override
Request processing, according to info, of a data variable.
Information about a variable.
Definition: varinfo.h:139
void run()
Run the interpreter.
Sequence of opcodes, as a slice of a Varcode vector.
Definition: opcodes.h:19
unsigned define_bitmap_delayed_replication_factor(Varinfo info) override
Request processing of a delayed replication factor variable used to encode the size of a bitmap...
int c_width_change
Current value of width change from C modifier.
Definition: interpreter.h:40
String functions.
Definition: benchmark.h:13
Interpreter for data descriptor sections.
Definition: interpreter.h:25
Definition: associated_fields.h:12
int c_scale_change
Current value of scale change from C modifier.
Definition: interpreter.h:37
virtual void define_substituted_value(unsigned pos)
Request processing of a substituted value corresponding to position pos in the list or previous varia...
void r_replication(Varcode code, Varcode delayed_code, const Opcodes &ops) override
Handle a replicated section.
Bitmaps bitmaps
Bitmap iteration.
Definition: interpreter.h:31
FILE * out
Output stream.
Definition: interpreter.h:241
void print_lead(Varcode code)
Print line lead (indentation and formatted code)
int c_string_len_override
Current value of string length override from C08 modifiers (0 for no override)
Definition: interpreter.h:49
int c_scale_ref_width_increase
Increase of scale, reference value and data width.
Definition: interpreter.h:43
virtual unsigned define_bitmap_delayed_replication_factor(Varinfo info)
Request processing of a delayed replication factor variable used to encode the size of a bitmap...
void b_variable(Varcode code) override
Notify of a B variable entry.
AssociatedField associated_field
Current associated field state.
Definition: interpreter.h:34
virtual void define_raw_character_data(Varcode code)
Request processing of C05yyy raw character data.
virtual void define_variable(Varinfo info)
Request processing, according to info, of a data variable.
virtual void r_replication(Varcode code, Varcode delayed_code, const Opcodes &ops)
Handle a replicated section.