int main(int argc, char *argv[]) { char **p = argv; signal(SIGCHLD, SIG_DFL); while (*++p) { /* filename or option ? */ if (**p != '-') { add_file(*p); continue; } switch ((*p)[1]) { /* Don't link */ case 'c': uniopt(*p); last_phase = 3; break; /* Don't assemble */ case 'S': uniopt(*p); last_phase = 2; break; /* Only pre-process */ case 'E': uniopt(*p); last_phase = 1; only_one_input = 1; break; case 'l': p = add_library(p); break; case 'I': p = add_includes(p); break; case 'L': p = add_library_path(p); break; case 'D': p = add_macro(p); break; case 'i': /* split_id();*/ uniopt(*p); break; case 'o': if (target != NULL) { fprintf(stderr, "-o can only be used once.\n"); fatal(); } if ((*p)[2]) target = *p + 2; else target = *++p; break; case 'X': uniopt(*p); keep_temp = 1; break; default: usage(); } } if (target == NULL) target = "a.out"; if (only_one_input && c_files > 1) one_input(); processing_loop(); unused_files(); return 0; }
bool ts_generator::gen_struct(AST_Structure*, UTL_ScopedName* name, const std::vector<AST_Field*>&, AST_Type::SIZE_TYPE, const char*) { if (idl_global->is_dcps_type(name) == 0) { // no #pragma DCPS_DATA_TYPE, so nothing to generate return true; } const std::string cxxName = scoped(name); const std::string short_name = name->last_component()->get_string(); static const char* idl_includes[] = { "dds/DdsDcpsInfrastructure.idl", "dds/DdsDcpsTopic.idl", "dds/DdsDcpsPublication.idl", "dds/DdsDcpsSubscriptionExt.idl", "dds/DdsDcpsTypeSupportExt.idl" }; add_includes(idl_includes, BE_GlobalData::STREAM_IDL); std::string dc = be_global->header_name_.c_str(); dc.replace(dc.end() - 6, dc.end() - 2, "C"); // s/Impl.h$/C.h/ be_global->add_include(dc.c_str()); static const char* h_includes[] = { "dds/DCPS/DataWriterImpl_T.h", "dds/DCPS/DataReaderImpl_T.h", "dds/DCPS/TypeSupportImpl_T.h" }; add_includes(h_includes, BE_GlobalData::STREAM_H); static const char* cpp_includes[] = { "dds/DCPS/debug.h", "dds/DCPS/Registered_Data_Types.h", "dds/DdsDcpsDomainC.h", "dds/DCPS/Service_Participant.h", "dds/DCPS/Qos_Helper.h", "dds/DCPS/PublicationInstance.h", "dds/DCPS/PublisherImpl.h", "dds/DCPS/SubscriberImpl.h", "dds/DCPS/ReceivedDataElementList.h", "dds/DCPS/RakeResults_T.h", "dds/DCPS/BuiltInTopicUtils.h", "dds/DCPS/Util.h", "dds/DCPS/ContentFilteredTopicImpl.h", "dds/DCPS/RakeData.h", "dds/DCPS/MultiTopicDataReader_T.h" }; add_includes(cpp_includes, BE_GlobalData::STREAM_CPP); std::map<std::string, std::string> replacements; replacements["SCOPED"] = cxxName; replacements["TYPE"] = short_name; replacements["EXPORT"] = be_global->export_macro().c_str(); replacements["SEQ"] = be_global->sequence_suffix().c_str(); ScopedNamespaceGuard idlGuard(name, be_global->idl_, "module"); std::string idl = idl_template_; replaceAll(idl, replacements); be_global->idl_ << idl; be_global->header_ << "namespace OpenDDS { namespace DCPS {\n" "template <>\n" "struct DDSTraits<" << cxxName << "> {\n" " typedef " << cxxName << " MessageType;\n" " typedef " << cxxName << "Seq MessageSequenceType;\n" " typedef " << cxxName << "TypeSupport TypeSupportType;\n" " typedef " << cxxName << "DataWriter DataWriterType;\n" " typedef " << cxxName << "DataReader DataReaderType;\n" " typedef " << module_scope(name) << "OpenDDSGenerated::" << short_name << "_KeyLessThan LessThanType;\n" "\n" " inline static const char* type_name () { return \"" << cxxName << "\"; }\n" " inline static bool gen_has_key (const MessageType& x) { return ::OpenDDS::DCPS::gen_has_key(x); }\n" "\n" " inline static bool gen_is_bounded_size (const MessageType& x) { return ::OpenDDS::DCPS::gen_is_bounded_size(x); }\n" " inline static size_t gen_max_marshaled_size(const MessageType& x, bool align) { return ::OpenDDS::DCPS::gen_max_marshaled_size(x, align); }\n" " inline static void gen_find_size(const MessageType& arr, size_t& size, size_t& padding) { ::OpenDDS::DCPS::gen_find_size(arr, size, padding); }\n" "\n" " inline static bool gen_is_bounded_size (const OpenDDS::DCPS::KeyOnly<const MessageType>& x) { return ::OpenDDS::DCPS::gen_is_bounded_size(x); }\n" " inline static size_t gen_max_marshaled_size(const OpenDDS::DCPS::KeyOnly<const MessageType>& x, bool align) { return ::OpenDDS::DCPS::gen_max_marshaled_size(x, align); }\n" " inline static void gen_find_size(const OpenDDS::DCPS::KeyOnly<const MessageType>& arr, size_t& size, size_t& padding) { ::OpenDDS::DCPS::gen_find_size(arr, size, padding); }\n" "};\n} }\n\n"; { ScopedNamespaceGuard hGuard(name, be_global->header_); be_global->header_ << " typedef OpenDDS::DCPS::DataWriterImpl_T<" << cxxName << "> " << short_name << "DataWriterImpl;\n" " typedef OpenDDS::DCPS::DataReaderImpl_T<" << cxxName << "> " << short_name << "DataReaderImpl;\n" " typedef OpenDDS::DCPS::TypeSupportImpl_T<" << cxxName << "> " << short_name << "TypeSupportImpl;\n"; } ScopedNamespaceGuard cppGuard(name, be_global->impl_); if (be_global->face_ts()) { face_ts_generator::generate(name); } return true; }