be_extern.h File Reference

#include "be_global.h"
Include dependency graph for be_extern.h:

Go to the source code of this file.

Functions

int BE_init (int &, ACE_TCHAR *[])
void BE_post_init (char *[], long)
void BE_version ()
void BE_produce ()
void BE_abort ()
void BE_cleanup ()

Variables

BE_GlobalDatabe_global

Function Documentation

void BE_abort (  ) 

Definition at line 101 of file be_produce.cpp.

References ACE_TEXT(), BE_cleanup(), ACE_OS::exit(), and LM_ERROR.

Referenced by BE_produce().

00102 {
00103   ACE_ERROR((LM_ERROR, ACE_TEXT("Fatal Error - Aborting\n")));
00104   BE_cleanup();
00105   ACE_OS::exit(1);
00106 }

Here is the call graph for this function:

Here is the caller graph for this function:

void BE_cleanup (  ) 

Definition at line 94 of file be_produce.cpp.

Referenced by BE_abort(), and BE_produce().

00095 {
00096   idl_global->destroy();
00097 }

Here is the caller graph for this function:

int BE_init ( int &  ,
ACE_TCHAR [] 
)

Definition at line 28 of file be_init.cpp.

References ACE_NEW_RETURN(), and be_global.

00029 {
00030   ACE_NEW_RETURN(be_global, BE_GlobalData, -1);
00031   return 0;
00032 }

Here is the call graph for this function:

void BE_post_init ( char *  [],
long   
)

Definition at line 35 of file be_init.cpp.

References be_global, ACE_String_Base< ACE_CHAR_T >::c_str(), DDS_MAJOR_VERSION, DDS_MICRO_VERSION, DDS_MINOR_VERSION, and ACE_OS::getenv().

00036 {
00037   std::ostringstream version;
00038   version << "-D__OPENDDS_IDL=0x"
00039           << std::setw(2) << std::setfill('0') << DDS_MAJOR_VERSION
00040           << std::setw(2) << std::setfill('0') << DDS_MINOR_VERSION
00041           << std::setw(2) << std::setfill('0') << DDS_MICRO_VERSION;
00042   DRV_cpp_putarg(version.str().c_str());
00043 
00044 #ifdef ACE_HAS_CDR_FIXED
00045   DRV_cpp_putarg("-D__OPENDDS_IDL_HAS_FIXED");
00046 #endif
00047 
00048   const char* env = ACE_OS::getenv("DDS_ROOT");
00049   if (env && env[0]) {
00050     std::string dds_root = env;
00051     if (dds_root.find(' ') != std::string::npos && dds_root[0] != '"') {
00052       dds_root.insert(dds_root.begin(), '"');
00053       dds_root.insert(dds_root.end(), '"');
00054     }
00055     be_global->add_inc_path(dds_root.c_str());
00056     ACE_CString included;
00057     DRV_add_include_path(included, dds_root.c_str(), 0, true);
00058   }
00059 }

Here is the call graph for this function:

void BE_produce (  ) 

Definition at line 284 of file be_produce.cpp.

References ACE_TEXT(), BE_abort(), BE_cleanup(), be_global, ACE_String_Base< ACE_CHAR_T >::c_str(), ACE_String_Base< ACE_CHAR_T >::length(), LM_ERROR, LM_WARNING, ACE_OS::strcasecmp(), and strncmp().

00285 {
00286   //search for #includes in the IDL, add them as #includes in the stubs/skels
00287   const char* idl_fn = idl_global->main_filename()->get_string();
00288 
00289   const BE_GlobalData::stream_enum_t out_stream =
00290     be_global->language_mapping() == BE_GlobalData::LANGMAP_NONE
00291     ? BE_GlobalData::STREAM_H : BE_GlobalData::STREAM_LANG_H;
00292 
00293   ifstream idl(idl_fn);
00294   const size_t buffer_sz = 512;
00295   char buffer[buffer_sz];
00296 
00297   while (idl) {
00298     idl.getline(buffer, buffer_sz);
00299 
00300     if (0 == strncmp("#include", buffer, 8)) { //FUTURE: account for comments?
00301       string inc(buffer + 8);
00302       size_t delim1 = inc.find_first_of("<\"");
00303       size_t delim2 = inc.find_first_of(">\"", delim1 + 1);
00304       string included(inc, delim1 + 1, delim2 - delim1 - 1);
00305       size_t len = included.size();
00306       string base_name;
00307 
00308       if (len >= 5 &&
00309           0 == ACE_OS::strcasecmp(included.c_str() + len - 4, ".idl")) {
00310         base_name.assign(included.c_str(), len - 4);
00311 
00312       } else if (len >= 6 &&
00313                  0 == ACE_OS::strcasecmp(included.c_str() + len - 5, ".pidl")) {
00314         base_name.assign(included.c_str(), len - 5);
00315 
00316       } else {
00317         ACE_ERROR((LM_ERROR, ACE_TEXT("(%N:%l) BE_produce - included ")
00318                    ACE_TEXT("file must end in .idl or .pidl\n")));
00319         BE_abort();
00320       }
00321 
00322       string stb_inc = base_name + "C.h";
00323       if (stb_inc != "tao/orbC.h") {
00324         be_global->add_include(stb_inc.c_str(), out_stream);
00325         if (stb_inc == "orbC.h" ||
00326             (stb_inc.size() >= 7
00327             && stb_inc.substr(stb_inc.size() - 7) == "/orbC.h") ) {
00328           ACE_DEBUG((LM_WARNING,
00329                      ACE_TEXT("Warning: (%s) Potential inclusion of TAO orbC.H ")
00330                      ACE_TEXT(" Include TAO orb.idl with path of tao/orb.idl")
00331                      ACE_TEXT(" to prevent compilation errors\n"), idl_fn));
00332         }
00333       }
00334 
00335     }
00336   }
00337 
00338   idl.close();
00339 
00340   be_global->open_streams(idl_fn);
00341 
00342   AST_Decl* d = idl_global->root();
00343   AST_Root* root = AST_Root::narrow_from_decl(d);
00344 
00345   if (root == 0) {
00346     ACE_ERROR((LM_ERROR,
00347                ACE_TEXT("(%N:%l) BE_produce - ")
00348                ACE_TEXT("No Root\n")));
00349 
00350     BE_abort();
00351   }
00352 
00353   be_global->set_inc_paths(idl_global->idl_flags());
00354 
00355   const bool java_ts_only = be_global->java_arg().length() > 0;
00356 
00357   dds_visitor visitor(d, java_ts_only);
00358 
00359   if (root->ast_accept(&visitor) == -1) {
00360     ACE_ERROR((LM_ERROR,
00361                ACE_TEXT("(%N:%l) BE_produce -")
00362                ACE_TEXT(" failed to accept adding visitor\n")));
00363     BE_abort();
00364   }
00365 
00366   if (!java_ts_only) {
00367     postprocess(be_global->header_name_.c_str(),
00368                 be_global->header_, BE_GlobalData::STREAM_H);
00369     if (!be_global->suppress_idl()) {
00370       postprocess(be_global->idl_name_.c_str(),
00371                   be_global->idl_, BE_GlobalData::STREAM_IDL);
00372     }
00373   }
00374 
00375   postprocess(be_global->impl_name_.c_str(),
00376               be_global->impl_, BE_GlobalData::STREAM_CPP);
00377 
00378   if (be_global->generate_wireshark()) {
00379     postprocess(be_global->ws_config_name_.c_str(),
00380                 be_global->ws_config_, BE_GlobalData::STREAM_WS);
00381   }
00382 
00383   if (be_global->generate_itl()) {
00384     if (!BE_GlobalData::writeFile(be_global->itl_name_.c_str(), be_global->itl_.str())) {
00385       BE_abort();  //error message already printed
00386     }
00387   }
00388 
00389   if (be_global->face_ts()) {
00390     postprocess(be_global->facets_header_name_.c_str(), be_global->facets_header_,
00391                 BE_GlobalData::STREAM_FACETS_H);
00392     postprocess(be_global->facets_impl_name_.c_str(), be_global->facets_impl_,
00393                 BE_GlobalData::STREAM_FACETS_CPP);
00394   }
00395 
00396   if (be_global->language_mapping() == BE_GlobalData::LANGMAP_FACE_CXX ||
00397       be_global->language_mapping() == BE_GlobalData::LANGMAP_SP_CXX) {
00398     postprocess(be_global->lang_header_name_.c_str(), be_global->lang_header_,
00399                 BE_GlobalData::STREAM_LANG_H);
00400   }
00401 
00402   BE_cleanup();
00403 }

Here is the call graph for this function:

void BE_version (  ) 

Definition at line 21 of file be_init.cpp.

References ACE_TEXT(), DDS_VERSION, and LM_DEBUG.

00022 {
00023   ACE_DEBUG((LM_DEBUG, ACE_TEXT("OpenDDS version ") ACE_TEXT(DDS_VERSION)
00024              ACE_TEXT("\n")));
00025 }

Here is the call graph for this function:


Variable Documentation

Definition at line 30 of file be_global.cpp.

Referenced by Function::addArg(), BE_init(), BE_post_init(), BE_produce(), dds_visitor::dds_visitor(), Function::endArgs(), Function::Function(), wireshark_generator::gen_array(), langmap_generator::gen_const(), wireshark_generator::gen_enum(), metaclass_generator::gen_enum(), marshal_generator::gen_enum(), langmap_generator::gen_enum(), itl_generator::gen_enum(), itl_generator::gen_epilogue(), v8_generator::gen_includes(), langmap_generator::gen_interf_fwd(), itl_generator::gen_prologue(), SafetyProfileGenerator::gen_sequence(), FaceGenerator::gen_sequence(), wireshark_generator::gen_struct(), v8_generator::gen_struct(), ts_generator::gen_struct(), metaclass_generator::gen_struct(), marshal_generator::gen_struct(), SafetyProfileGenerator::gen_struct(), FaceGenerator::gen_struct(), keys_generator::gen_struct(), itl_generator::gen_struct(), langmap_generator::gen_struct_fwd(), wireshark_generator::gen_typedef(), v8_generator::gen_typedef(), metaclass_generator::gen_typedef(), langmap_generator::gen_typedef(), itl_generator::gen_typedef(), wireshark_generator::gen_union(), v8_generator::gen_union(), metaclass_generator::gen_union(), marshal_generator::gen_union(), GeneratorBase::gen_union(), itl_generator::gen_union(), langmap_generator::gen_union_fwd(), GeneratorBase::generate_union_field(), generateBranchLabels(), generateCaseBody(), generateSwitchBody(), generateSwitchForUnion(), langmap_generator::init(), SafetyProfileGenerator::init(), FaceGenerator::init(), NamespaceGuard::NamespaceGuard(), NestedForLoops::NestedForLoops(), itl_generator::new_type(), GeneratorBase::GenerateGettersAndSetters::operator()(), operator<<(), dds_visitor::visit_structure(), wireshark_generator::write_common(), Function::~Function(), NamespaceGuard::~NamespaceGuard(), and NestedForLoops::~NestedForLoops().

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines

Generated on 10 Aug 2018 for OpenDDS by  doxygen 1.6.1