OpenDDS  Snapshot(2023/04/28-20:55)
Public Member Functions | List of all members
value_reader_generator Class Reference

#include <value_reader_generator.h>

Inheritance diagram for value_reader_generator:
Inheritance graph
[legend]
Collaboration diagram for value_reader_generator:
Collaboration graph
[legend]

Public Member Functions

bool gen_enum (AST_Enum *, UTL_ScopedName *name, const std::vector< AST_EnumVal *> &contents, const char *repoid)
 
bool gen_typedef (AST_Typedef *, UTL_ScopedName *, AST_Type *, const char *)
 
bool gen_struct (AST_Structure *node, UTL_ScopedName *name, const std::vector< AST_Field *> &fields, AST_Type::SIZE_TYPE size, const char *repoid)
 
bool gen_union (AST_Union *, UTL_ScopedName *, const std::vector< AST_UnionBranch *> &, AST_Type *, const char *)
 
- Public Member Functions inherited from dds_generator
virtual ~dds_generator ()=0
 
virtual bool do_included_files () const
 
virtual void gen_prologue ()
 
virtual void gen_epilogue ()
 
virtual bool gen_const (UTL_ScopedName *, bool, AST_Constant *)
 
virtual bool gen_struct_fwd (UTL_ScopedName *, AST_Type::SIZE_TYPE)
 
virtual bool gen_interf (AST_Interface *, UTL_ScopedName *, bool, const std::vector< AST_Interface *> &, const std::vector< AST_Interface *> &, const std::vector< AST_Attribute *> &, const std::vector< AST_Operation *> &, const char *)
 
virtual bool gen_interf_fwd (UTL_ScopedName *)
 
virtual bool gen_native (AST_Native *, UTL_ScopedName *, const char *)
 
virtual bool gen_union_fwd (AST_UnionFwd *, UTL_ScopedName *, AST_Type::SIZE_TYPE)
 

Additional Inherited Members

- Static Public Member Functions inherited from dds_generator
static std::string get_tag_name (const std::string &base_name, const std::string &qualifier="")
 
static std::string get_xtag_name (UTL_ScopedName *name)
 
static bool cxx_escaped (const std::string &s)
 
static std::string valid_var_name (const std::string &str)
 
static std::string to_string (Identifier *id, EscapeContext ec=EscapeContext_Normal)
 
static std::string scoped_helper (UTL_ScopedName *sn, const char *sep, EscapeContext cxt=EscapeContext_Normal)
 
static std::string module_scope_helper (UTL_ScopedName *sn, const char *sep, EscapeContext cxt=EscapeContext_Normal)
 

Detailed Description

Definition at line 14 of file value_reader_generator.h.

Member Function Documentation

◆ gen_enum()

bool value_reader_generator::gen_enum ( AST_Enum *  ,
UTL_ScopedName *  name,
const std::vector< AST_EnumVal *> &  contents,
const char *  repoid 
)
virtual

Reimplemented from dds_generator.

Definition at line 212 of file value_reader_generator.cpp.

References Function::addArg(), be_global, canonical_name(), Function::endArgs(), read(), and scoped().

216 {
217  be_global->add_include("dds/DCPS/Util.h", BE_GlobalData::STREAM_H);
218  be_global->add_include("dds/DCPS/ValueReader.h", BE_GlobalData::STREAM_H);
219 
220  const std::string type_name = scoped(name);
221 
222  {
223  NamespaceGuard guard;
224 
225  Function read("vread", "bool");
226  read.addArg("value_reader", "OpenDDS::DCPS::ValueReader&");
227  read.addArg("value", type_name + "&");
228  read.endArgs();
229 
230  be_global->impl_ <<
231  " static const ListEnumHelper::Pair pairs[] = {";
232 
233  for (size_t i = 0; i != contents.size(); ++i) {
234  if (i) {
235  be_global->impl_ << ',';
236  }
237  const std::string idl_name = canonical_name(contents[i]);
238  be_global->impl_ <<
239  '{' << '"' << idl_name << '"' << ',' << contents[i]->constant_value()->ev()->u.eval << '}';
240  }
241 
242  be_global->impl_ <<
243  ",{0,0}};\n"
244  " ListEnumHelper helper(pairs);\n"
245  " return value_reader.read_enum(value, helper);\n";
246  }
247 
248  return true;
249 }
std::string canonical_name(UTL_ScopedName *sn)
ssize_t read(ACE_HANDLE handle, void *buf, size_t len)
const char *const name
Definition: debug.cpp:60
std::string scoped(UTL_ScopedName *sn, EscapeContext ec=EscapeContext_Normal)
BE_GlobalData * be_global
Definition: be_global.cpp:44

◆ gen_struct()

bool value_reader_generator::gen_struct ( AST_Structure *  node,
UTL_ScopedName *  name,
const std::vector< AST_Field *> &  fields,
AST_Type::SIZE_TYPE  size,
const char *  repoid 
)
virtual

Implements dds_generator.

Definition at line 259 of file value_reader_generator.cpp.

References Function::addArg(), be_global, canonical_name(), Function::endArgs(), read(), and scoped().

264 {
265  be_global->add_include("dds/DCPS/Util.h", BE_GlobalData::STREAM_H);
266  be_global->add_include("dds/DCPS/ValueReader.h", BE_GlobalData::STREAM_H);
267 
268  const std::string type_name = scoped(name);
269  const bool use_cxx11 = be_global->language_mapping() == BE_GlobalData::LANGMAP_CXX11;
270  const std::string accessor = use_cxx11 ? "()" : "";
271 
272  {
273  NamespaceGuard guard;
274 
275  Function read("vread", "bool");
276  read.addArg("value_reader", "OpenDDS::DCPS::ValueReader&");
277  read.addArg("value", type_name + "&");
278  read.endArgs();
279 
280  be_global->impl_ <<
281  " static const ListMemberHelper::Pair pairs[] = {";
282 
283  for (size_t i = 0; i != fields.size(); ++i) {
284  if (i) {
285  be_global->impl_ << ',';
286  }
287  const std::string idl_name = canonical_name(fields[i]);
288  be_global->impl_ <<
289  '{' << '"' << idl_name << '"' << ',' << be_global->get_id(fields[i]) << '}';
290  }
291 
292  be_global->impl_ <<
293  ",{0,0}};\n"
294  " ListMemberHelper helper(pairs);\n";
295 
296  be_global->impl_ <<
297  " if (!value_reader.begin_struct()) return false;\n"
298  " XTypes::MemberId member_id;\n"
299  " while (value_reader.begin_struct_member(member_id, helper)) {\n"
300  " switch (member_id) {\n";
301 
302  for (std::vector<AST_Field*>::const_iterator pos = fields.begin(), limit = fields.end();
303  pos != limit; ++pos) {
304  AST_Field* const field = *pos;
305  const std::string field_name = field->local_name()->get_string();
306  be_global->impl_ <<
307  " case " << be_global->get_id(field) << ": {\n";
308  generate_read("value." + field_name, accessor, field->field_type(), "i", 3);
309  be_global->impl_ <<
310  " break;\n"
311  " }\n";
312  }
313 
314  be_global->impl_ <<
315  " }\n"
316  " if (!value_reader.end_struct_member()) return false;\n"
317  " }\n"
318  " if (!value_reader.end_struct()) return false;\n"
319  " return true;\n";
320  }
321 
322  return true;
323 }
std::string canonical_name(UTL_ScopedName *sn)
ssize_t read(ACE_HANDLE handle, void *buf, size_t len)
const char *const name
Definition: debug.cpp:60
std::string scoped(UTL_ScopedName *sn, EscapeContext ec=EscapeContext_Normal)
BE_GlobalData * be_global
Definition: be_global.cpp:44

◆ gen_typedef()

bool value_reader_generator::gen_typedef ( AST_Typedef *  ,
UTL_ScopedName *  ,
AST_Type *  ,
const char *   
)
virtual

Implements dds_generator.

Definition at line 251 of file value_reader_generator.cpp.

255 {
256  return true;
257 }

◆ gen_union()

bool value_reader_generator::gen_union ( AST_Union *  u,
UTL_ScopedName *  name,
const std::vector< AST_UnionBranch *> &  branches,
AST_Type *  discriminator,
const char *   
)
virtual

Implements dds_generator.

Definition at line 326 of file value_reader_generator.cpp.

References Function::addArg(), be_global, Function::endArgs(), generateSwitchForUnion(), read(), and scoped().

331 {
332  be_global->add_include("dds/DCPS/Util.h", BE_GlobalData::STREAM_H);
333  be_global->add_include("dds/DCPS/ValueReader.h", BE_GlobalData::STREAM_H);
334 
335  const std::string type_name = scoped(name);
336 
337  {
338  NamespaceGuard guard;
339 
340  Function read("vread", "bool");
341  read.addArg("value_reader", "OpenDDS::DCPS::ValueReader&");
342  read.addArg("value", type_name + "&");
343  read.endArgs();
344 
345  be_global->impl_ <<
346  " if (!value_reader.begin_union()) return false;\n"
347  " if (!value_reader.begin_discriminator()) return false;\n"
348  " {\n"
349  " " << scoped(discriminator->name()) << " d;\n";
350  generate_read("d", "", discriminator, "i", 2);
351  be_global->impl_ <<
352  " value._d(d);\n"
353  " }\n"
354  " if (!value_reader.end_discriminator()) return false;\n";
355 
356  generateSwitchForUnion(u, "value._d()", branch_helper, branches,
357  discriminator, "", "", type_name.c_str(),
358  false, false);
359  be_global->impl_ <<
360  " if (!value_reader.end_union()) return false;\n"
361  " return true;\n";
362  }
363 
364  return true;
365 }
bool generateSwitchForUnion(AST_Union *u, const char *switchExpr, CommonFn commonFn, const std::vector< AST_UnionBranch *> &branches, AST_Type *discriminator, const char *statementPrefix, const char *namePrefix="", const char *uni="", bool forceDisableDefault=false, bool parens=true, bool breaks=true, CommonFn commonFn2=0)
returns true if a default: branch was generated (no default: label in IDL)
ssize_t read(ACE_HANDLE handle, void *buf, size_t len)
const char *const name
Definition: debug.cpp:60
std::string scoped(UTL_ScopedName *sn, EscapeContext ec=EscapeContext_Normal)
BE_GlobalData * be_global
Definition: be_global.cpp:44

The documentation for this class was generated from the following files: