libdballe  9.11
common.h
1 #ifndef DBALLE_MSG_WREXPORTER_BASE_H
2 #define DBALLE_MSG_WREXPORTER_BASE_H
3 
4 #include <dballe/msg/msg.h>
5 
6 namespace wreport {
7 struct Subset;
8 struct Bulletin;
9 struct Var;
10 }
11 
12 namespace dballe {
13 namespace impl {
14 namespace msg {
15 namespace wr {
16 
18 {
19 protected:
20  // Subset being written
21  wreport::Subset* subset;
22  const Message* msg = 0;
23  const msg::Context* c_ana = 0;
24  const msg::Context* c_surface_instant = 0;
25 
26  void add(wreport::Varcode code, const msg::Context* ctx, const Shortcut& shortcut) const;
27  void add(wreport::Varcode code, const msg::Context* ctx, wreport::Varcode srccode) const;
28  void add(wreport::Varcode code, const msg::Context* ctx) const;
29  void add(wreport::Varcode code, const wreport::Var* var) const;
30 
31 public:
32  void init(const Message& msg, wreport::Subset& subset);
33  void scan_context(const msg::Context& c);
34 
35  void add_ecmwf_synop_head();
36 };
37 
39 {
40 protected:
41  const msg::Context* c_geopotential;
42  const msg::Context* c_thermo;
43  const msg::Context* c_tmax;
44  const msg::Context* c_tmin;
45  const msg::Context* c_prec1;
46  const msg::Context* c_prec2;
47  const msg::Context* c_prec24;
48  const msg::Context* c_cloud_cover;
49  const msg::Context* c_cloud_data[4];
50  const msg::Context* c_cloud_group[4];
51  const msg::Context* c_wind;
52  const msg::Context* c_gust1;
53  const msg::Context* c_gust2;
54  const msg::Context* c_visib;
55  const msg::Context* c_past_wtr;
56  const msg::Context* c_depth;
57  const msg::Context* c_swell_waves[2];
58 
59 public:
60  const wreport::Var* v_press;
61  const wreport::Var* v_pressmsl;
62  const wreport::Var* v_pchange3;
63  const wreport::Var* v_pchange24;
64  const wreport::Var* v_ptend;
65  const wreport::Var* v_geopotential;
66 
67  void init(const Message& msg, wreport::Subset& subset);
68  void scan_context(const msg::Context& c);
69 
70  // Pressure data
71  void add_D02001();
72  // synop: pressure data
73  void add_D02031();
74  // synop: temperature and humidity
75  void add_D02032();
76  // ship: temperature and humidity
77  void add_D02052();
78  // synop: extreme temperature data
79  void add_D02041();
80  // ship: extreme temperature data
81  void add_D02058();
82  void add_pressure();
83  void add_geopotential(wreport::Varcode code);
84  // Precipitation past 24 hours
85  void add_D02034();
86  // Precipitation measurement
87  void add_D02040();
88  // synop: wind data
89  void add_D02042();
90  // ship: wind data
91  void add_D02059();
92  // Present and past weather
93  void add_D02038();
94  void add_ecmwf_synop_weather();
95  // Basic synoptic "instantaneous" data
96  void add_D02035();
97  // Icing and ice
98  void add_D02055();
99  void add_ecmwf_ice();
100  // ship: visibility data
101  void add_D02053();
102  // Ship marine data
103  void add_D02056();
104  // Sea waves
105  void add_plain_waves();
106  // Ship waves (wind and swell)
107  void add_D02024();
108 
113  void add_sensor_height(const msg::Context& c, const wreport::Var* sample_var=NULL);
114 
119  void add_marine_sensor_height(const msg::Context& c, const wreport::Var* sample_var=NULL);
120 
125  void add_xtemp_group(wreport::Varcode code, const msg::Context* c);
126 
130  void add_prec_group(const msg::Context* c);
131 
135  void add_cloud_data();
136 
138  void add_wind_gust(const msg::Context* c);
139 
144  void add_time_period(wreport::Varcode code, const msg::Context& c, const wreport::Var* sample_var, const Trange& tr_std);
145 };
146 
147 }
148 }
149 }
150 }
151 
152 #endif
void add_marine_sensor_height(const msg::Context &c, const wreport::Var *sample_var=NULL)
Add B07032 and B07033 sensor heights, taking the value from the var attributes or the context...
Information on how a value has been sampled or computed with regards to time.
Definition: types.h:686
Definition: cmdline.h:18
void add_xtemp_group(wreport::Varcode code, const msg::Context *c)
Add an extreme temperature group, with the measured value added with the given code, from temperature data found on the given context.
Store an array of physical data all on the same level.
Definition: context.h:23
uint16_t Varcode
void add_time_period(wreport::Varcode code, const msg::Context &c, const wreport::Var *sample_var, const Trange &tr_std)
Add a B04025 or B04025 time period variable, with data taken from its parameters as needed...
void add_prec_group(const msg::Context *c)
Add time period and total precipitation from the given context.
void add_wind_gust(const msg::Context *c)
Add a wind gust block with info from the given context.
Definition: shortcuts.h:11
void add_cloud_data()
Add cloud data, as D02004 and a delayed replication of D02005.
void add_sensor_height(const msg::Context &c, const wreport::Var *sample_var=NULL)
Add B07032 sensor height, taking the value from the var attributes or the context, as appropriate.
Storage for related physical data.
Definition: msg.h:130