Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implement create_sample and create_dynamic_sample #4373

Draft
wants to merge 8 commits into
base: master
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
6 changes: 5 additions & 1 deletion MPC/modules/IDLBase.pm
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,11 @@ sub do_cached_parse {
$self->{'default_nested'} = 1;

## Set up the macros and include paths supplied in the command flags
my %macros = ('__OPENDDS_IDL' => 1, '__OPENDDS_MPC' => 1);
my %macros = (
__OPENDDS_IDL => 1,
__OPENDDS_MPC => 1,
OPENDDS_HIDE_DYNMIC_DATA => 1,
iguessthislldo marked this conversation as resolved.
Show resolved Hide resolved
);
my %mparams;
my @include;
if (defined $flags) {
Expand Down
49 changes: 48 additions & 1 deletion dds/DCPS/TypeSupportImpl.h
Original file line number Diff line number Diff line change
Expand Up @@ -167,7 +167,10 @@
};

template <typename NativeType>
class TypeSupportImpl_T : public TypeSupportImpl {
class TypeSupportImpl_T
: public virtual LocalObject<typename DDSTraits<NativeType>::TypeSupportType>
, public TypeSupportImpl
{
public:
typedef DDSTraits<NativeType> TraitsType;
typedef MarshalTraits<NativeType> MarshalTraitsType;
Expand Down Expand Up @@ -218,6 +221,50 @@
get_type_from_type_lookup_service();
return TypeSupportImpl::get_type();
}

/// The IDL is `NativeType create_sample(DDS::DynamicData src)`, but in the
/// C++ mapping this can return NativeType* or just NativeType depending on if
/// the type is "variable length". If it has something like a sequence then
/// it's variable length and returns a pointer else it's fixed and returns on
/// the stack. opendds_idl will wrap this in the correct form.
bool create_sample(NativeType* dest, DDS::DynamicData_ptr src)

Check warning on line 230 in dds/DCPS/TypeSupportImpl.h

View workflow job for this annotation

GitHub Actions / build_m11_j_FM-1f

'OpenDDS::DCPS::TypeSupportImpl_T<Messenger::Message>::create_sample' hides overloaded virtual function [-Woverloaded-virtual]

Check warning on line 230 in dds/DCPS/TypeSupportImpl.h

View workflow job for this annotation

GitHub Actions / build_m11_j_FM-1f

'OpenDDS::DCPS::TypeSupportImpl_T<OpenDDS::DCPS::ServiceParticipantReport>::create_sample' hides overloaded virtual function [-Woverloaded-virtual]

Check warning on line 230 in dds/DCPS/TypeSupportImpl.h

View workflow job for this annotation

GitHub Actions / build_m11_j_FM-1f

'OpenDDS::DCPS::TypeSupportImpl_T<OpenDDS::DCPS::DomainParticipantReport>::create_sample' hides overloaded virtual function [-Woverloaded-virtual]

Check warning on line 230 in dds/DCPS/TypeSupportImpl.h

View workflow job for this annotation

GitHub Actions / build_m11_j_FM-1f

'OpenDDS::DCPS::TypeSupportImpl_T<OpenDDS::DCPS::TopicReport>::create_sample' hides overloaded virtual function [-Woverloaded-virtual]

Check warning on line 230 in dds/DCPS/TypeSupportImpl.h

View workflow job for this annotation

GitHub Actions / build_m11_j_FM-1f

'OpenDDS::DCPS::TypeSupportImpl_T<OpenDDS::DCPS::PublisherReport>::create_sample' hides overloaded virtual function [-Woverloaded-virtual]

Check warning on line 230 in dds/DCPS/TypeSupportImpl.h

View workflow job for this annotation

GitHub Actions / build_m11_j_FM-1f

'OpenDDS::DCPS::TypeSupportImpl_T<OpenDDS::DCPS::SubscriberReport>::create_sample' hides overloaded virtual function [-Woverloaded-virtual]

Check warning on line 230 in dds/DCPS/TypeSupportImpl.h

View workflow job for this annotation

GitHub Actions / build_m11_j_FM-1f

'OpenDDS::DCPS::TypeSupportImpl_T<OpenDDS::DCPS::DataWriterReport>::create_sample' hides overloaded virtual function [-Woverloaded-virtual]

Check warning on line 230 in dds/DCPS/TypeSupportImpl.h

View workflow job for this annotation

GitHub Actions / build_m11_j_FM-1f

'OpenDDS::DCPS::TypeSupportImpl_T<OpenDDS::DCPS::DataWriterPeriodicReport>::create_sample' hides overloaded virtual function [-Woverloaded-virtual]

Check warning on line 230 in dds/DCPS/TypeSupportImpl.h

View workflow job for this annotation

GitHub Actions / build_m11_j_FM-1f

'OpenDDS::DCPS::TypeSupportImpl_T<OpenDDS::DCPS::DataReaderReport>::create_sample' hides overloaded virtual function [-Woverloaded-virtual]

Check warning on line 230 in dds/DCPS/TypeSupportImpl.h

View workflow job for this annotation

GitHub Actions / build_m11_j_FM-1f

'OpenDDS::DCPS::TypeSupportImpl_T<OpenDDS::DCPS::DataReaderPeriodicReport>::create_sample' hides overloaded virtual function [-Woverloaded-virtual]

Check warning on line 230 in dds/DCPS/TypeSupportImpl.h

View workflow job for this annotation

GitHub Actions / build_m11_sec

'OpenDDS::DCPS::TypeSupportImpl_T<DDS::ParticipantBuiltinTopicData>::create_sample' hides overloaded virtual function [-Woverloaded-virtual]

Check warning on line 230 in dds/DCPS/TypeSupportImpl.h

View workflow job for this annotation

GitHub Actions / build_m11_sec

'OpenDDS::DCPS::TypeSupportImpl_T<DDS::PublicationBuiltinTopicData>::create_sample' hides overloaded virtual function [-Woverloaded-virtual]

Check warning on line 230 in dds/DCPS/TypeSupportImpl.h

View workflow job for this annotation

GitHub Actions / build_m11_sec

'OpenDDS::DCPS::TypeSupportImpl_T<DDS::SubscriptionBuiltinTopicData>::create_sample' hides overloaded virtual function [-Woverloaded-virtual]

Check warning on line 230 in dds/DCPS/TypeSupportImpl.h

View workflow job for this annotation

GitHub Actions / build_m11_sec

'OpenDDS::DCPS::TypeSupportImpl_T<DDS::TopicBuiltinTopicData>::create_sample' hides overloaded virtual function [-Woverloaded-virtual]

Check warning on line 230 in dds/DCPS/TypeSupportImpl.h

View workflow job for this annotation

GitHub Actions / build_m11_sec

'OpenDDS::DCPS::TypeSupportImpl_T<DDS::ParticipantBuiltinTopicData>::create_sample' hides overloaded virtual function [-Woverloaded-virtual]

Check warning on line 230 in dds/DCPS/TypeSupportImpl.h

View workflow job for this annotation

GitHub Actions / build_m11_sec

'OpenDDS::DCPS::TypeSupportImpl_T<DDS::PublicationBuiltinTopicData>::create_sample' hides overloaded virtual function [-Woverloaded-virtual]

Check warning on line 230 in dds/DCPS/TypeSupportImpl.h

View workflow job for this annotation

GitHub Actions / build_m11_sec

'OpenDDS::DCPS::TypeSupportImpl_T<DDS::SubscriptionBuiltinTopicData>::create_sample' hides overloaded virtual function [-Woverloaded-virtual]

Check warning on line 230 in dds/DCPS/TypeSupportImpl.h

View workflow job for this annotation

GitHub Actions / build_m11_sec

'OpenDDS::DCPS::TypeSupportImpl_T<DDS::TopicBuiltinTopicData>::create_sample' hides overloaded virtual function [-Woverloaded-virtual]

Check warning on line 230 in dds/DCPS/TypeSupportImpl.h

View workflow job for this annotation

GitHub Actions / build_m11_sec

'OpenDDS::DCPS::TypeSupportImpl_T<OpenDDS::DCPS::ParticipantLocationBuiltinTopicData>::create_sample' hides overloaded virtual function [-Woverloaded-virtual]

Check warning on line 230 in dds/DCPS/TypeSupportImpl.h

View workflow job for this annotation

GitHub Actions / build_m11_sec

'OpenDDS::DCPS::TypeSupportImpl_T<OpenDDS::DCPS::ConnectionRecord>::create_sample' hides overloaded virtual function [-Woverloaded-virtual]
{
OpenDDS::DCPS::set_default(*dest);
# if OPENDDS_HAS_DYNAMIC_DATA_ADAPTOR
DDS::DynamicData_var dest_dd = get_dynamic_data_adapter<NativeType>(get_type(), dest);
const DDS::ReturnCode_t rc = XTypes::copy(dest_dd, src);
if (rc == DDS::RETCODE_OK) {
return true;
}
if (log_level >= LogLevel::Warning) {
ACE_ERROR((LM_WARNING, "(%P|%t) WARNING: TypeSupportImpl_T::create_sample: "
"failed to copy from DynamicData: %C\n", retcode_to_string(rc)));
}
# else
ACE_UNUSED_ARG(dest);
ACE_UNUSED_ARG(src);
# endif
return false;
}

DDS::DynamicData_ptr create_dynamic_sample(const NativeType& src)
{
# if OPENDDS_HAS_DYNAMIC_DATA_ADAPTOR
DDS::DynamicData_var dest_dd = DDS::DynamicDataFactory::get_instance()->create_data(type_);
DDS::DynamicData_var src_dd = get_dynamic_data_adapter<NativeType>(get_type(), &src);
const DDS::ReturnCode_t rc = XTypes::copy(dest_dd, src_dd);
if (rc == DDS::RETCODE_OK) {
return dest_dd._retn();
}
if (log_level >= LogLevel::Notice) {
ACE_ERROR((LM_NOTICE, "(%P|%t) NOTICE: TypeSupportImpl_T::create_dynamic_sample: "
"failed to copy to DynamicData: %C\n", retcode_to_string(rc)));
}
# else
ACE_UNUSED_ARG(src);
# endif
return 0;
}
#endif
};

Expand Down
2 changes: 1 addition & 1 deletion dds/DdsDcpsTopic.idl
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ module DDS {
// valuetype isn't supported in Java. This will exclude this operation
// from the generated Java code and return null in get_type method of
// the TAOPeer generated C++ class so it isn't a pure virtual function.
@OpenDDS::hidden_op_in_java("return 0;")
@OpenDDS::internal::hidden_op_in_java("return 0;")
DynamicType get_type();
#endif
};
Expand Down
15 changes: 9 additions & 6 deletions dds/DdsDynamicData.idl
Original file line number Diff line number Diff line change
@@ -1,6 +1,4 @@
/*
*
*
* Distributed under the OpenDDS License.
* See: http://www.opendds.org/license.html
*/
Expand All @@ -9,13 +7,15 @@
#define OPENDDS_DDS_DYNAMIC_DATA_IDL

#ifndef OPENDDS_SAFETY_PROFILE

#include <dds/DdsDcpsInfrastructure.idl>
#include <dds/DdsDcpsDomain.idl>
#include <dds/DdsDynamicDataSeq.idl>
# ifndef OPENDDS_HIDE_DYNMIC_DATA
# include <dds/DdsDcpsInfrastructure.idl>
# include <dds/DdsDcpsDomain.idl>
# include <dds/DdsDynamicDataSeq.idl>
# endif // OPENDDS_HIDE_DYNMIC_DATA

module DDS {
local interface DynamicType;
# ifndef OPENDDS_HIDE_DYNMIC_DATA
valuetype TypeDescriptor;

typedef sequence<string> IncludePathSeq;
Expand Down Expand Up @@ -158,9 +158,11 @@ module DDS {

void clear();
};
# endif // OPENDDS_HIDE_DYNMIC_DATA

local interface DynamicData;

# ifndef OPENDDS_HIDE_DYNMIC_DATA
local interface DynamicDataFactoryInterf {
// Implemented in C++
// static DynamicDataFactory get_instance();
Expand Down Expand Up @@ -401,6 +403,7 @@ module DDS {
in MemberId id,
in WstringSeq value);
}; // local interface DynamicData
# endif // OPENDDS_HIDE_DYNMIC_DATA
};

#endif // OPENDDS_SAFETY_PROFILE
Expand Down
10 changes: 10 additions & 0 deletions dds/idl/IDLTemplate.txt
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,16 @@ typedef sequence<<%SCOPED%>> <%TYPE%><%SEQ%>;
* this interface.
*/
local interface <%TYPE%>TypeSupport : OpenDDS::DCPS::TypeSupport {
#ifndef OPENDDS_SAFETY_PROFILE
// valuetype isn't supported in Java, so we can't use DynamicData. This
// will exclude this operation from the generated Java code and return null
// in get_type method of the TAOPeer generated C++ class so it isn't a pure
// virtual function.
@OpenDDS::internal::hidden_op_in_java("(void)(src); return 0;")
<%SCOPED%> create_sample(in ::DDS::DynamicData src);
@OpenDDS::internal::hidden_op_in_java("(void)(src); return 0;")
::DDS::DynamicData create_dynamic_sample(in <%SCOPED%> src);
#endif

::DDS::ReturnCode_t encode_to_string(in <%SCOPED%> sample, out string encoded, in OpenDDS::DCPS::RepresentationFormat format);
::DDS::ReturnCode_t encode_to_bytes(in <%SCOPED%> sample, out ::DDS::OctetSeq encoded, in OpenDDS::DCPS::RepresentationFormat format);
Expand Down
3 changes: 2 additions & 1 deletion dds/idl/be_init.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -66,5 +66,6 @@ BE_post_init(char*[], long)
be_global->builtin_annotations_.register_all();
// This annotation isn't used, but must match the one in idl2jni to avoid
// warnings or errors.
idl_global->eval("module OpenDDS {@annotation hidden_op_in_java {string impl;};};\n");
idl_global->eval(
"module OpenDDS {module internal {@annotation hidden_op_in_java {string impl;};};};\n");
}