00001
00002
00003
00004
00005
00006
00007
00008 #include "ace/OS_NS_string.h"
00009 #include "ace/Truncate.h"
00010
00011 #include <cstring>
00012
00013 OPENDDS_BEGIN_VERSIONED_NAMESPACE_DECL
00014
00015 namespace OpenDDS {
00016 namespace DCPS {
00017
00018 #ifndef OPENDDS_SAFETY_PROFILE
00019 ACE_INLINE
00020 bool operator==(const DDS::UserDataQosPolicy& qos1,
00021 const DDS::UserDataQosPolicy& qos2)
00022 {
00023 return qos1.value == qos2.value;
00024 }
00025
00026 ACE_INLINE
00027 bool operator==(const DDS::TopicDataQosPolicy & qos1,
00028 const DDS::TopicDataQosPolicy & qos2)
00029 {
00030 return qos1.value == qos2.value;
00031 }
00032
00033 ACE_INLINE
00034 bool operator==(const DDS::GroupDataQosPolicy& qos1,
00035 const DDS::GroupDataQosPolicy& qos2)
00036 {
00037 return qos1.value == qos2.value;
00038 }
00039
00040 ACE_INLINE
00041 bool operator==(const DDS::TransportPriorityQosPolicy& qos1,
00042 const DDS::TransportPriorityQosPolicy& qos2)
00043 {
00044 return qos1.value == qos2.value;
00045 }
00046
00047 ACE_INLINE
00048 bool operator==(const DDS::LifespanQosPolicy& qos1,
00049 const DDS::LifespanQosPolicy& qos2)
00050 {
00051 return qos1.duration == qos2.duration;
00052 }
00053
00054 ACE_INLINE
00055 bool
00056 operator==(const DDS::DurabilityQosPolicy& qos1,
00057 const DDS::DurabilityQosPolicy& qos2)
00058 {
00059 return qos1.kind == qos2.kind;
00060 }
00061
00062 ACE_INLINE
00063 bool
00064 operator==(DDS::DurabilityServiceQosPolicy const & qos1,
00065 DDS::DurabilityServiceQosPolicy const & qos2)
00066 {
00067 return
00068 qos1.service_cleanup_delay == qos2.service_cleanup_delay
00069 && qos1.history_kind == qos2.history_kind
00070 && qos1.history_depth == qos2.history_depth
00071 && qos1.max_samples == qos2.max_samples
00072 && qos1.max_instances == qos2.max_instances
00073 && qos1.max_samples_per_instance == qos2.max_samples_per_instance;
00074 }
00075
00076 ACE_INLINE
00077 bool operator==(const DDS::PresentationQosPolicy& qos1,
00078 const DDS::PresentationQosPolicy& qos2)
00079 {
00080 return
00081 qos1.access_scope == qos2.access_scope
00082 && qos1.coherent_access == qos2.coherent_access
00083 && qos1.ordered_access == qos2.ordered_access;
00084 }
00085
00086 ACE_INLINE
00087 bool operator==(const DDS::DeadlineQosPolicy& qos1,
00088 const DDS::DeadlineQosPolicy& qos2)
00089 {
00090 return qos1.period == qos2.period;
00091 }
00092
00093 ACE_INLINE
00094 bool operator==(const DDS::LatencyBudgetQosPolicy& qos1,
00095 const DDS::LatencyBudgetQosPolicy& qos2)
00096 {
00097 return qos1.duration == qos2.duration;
00098 }
00099
00100 ACE_INLINE
00101 bool operator==(const DDS::OwnershipQosPolicy& qos1,
00102 const DDS::OwnershipQosPolicy& qos2)
00103 {
00104 return qos1.kind == qos2.kind;
00105 }
00106
00107 ACE_INLINE
00108 bool operator==(const DDS::OwnershipStrengthQosPolicy& qos1,
00109 const DDS::OwnershipStrengthQosPolicy& qos2)
00110 {
00111 return qos1.value == qos2.value;
00112 }
00113
00114 ACE_INLINE
00115 bool operator==(const DDS::LivelinessQosPolicy& qos1,
00116 const DDS::LivelinessQosPolicy& qos2)
00117 {
00118 return
00119 qos1.kind == qos2.kind
00120 && qos1.lease_duration == qos2.lease_duration;
00121 }
00122
00123 ACE_INLINE
00124 bool operator==(const DDS::TimeBasedFilterQosPolicy& qos1,
00125 const DDS::TimeBasedFilterQosPolicy& qos2)
00126 {
00127 return qos1.minimum_separation == qos2.minimum_separation;
00128 }
00129
00130 ACE_INLINE
00131 bool operator==(const DDS::PartitionQosPolicy& qos1,
00132 const DDS::PartitionQosPolicy& qos2)
00133 {
00134 const CORBA::ULong len = qos1.name.length();
00135
00136 if (len == qos2.name.length()) {
00137 for (CORBA::ULong i = 0; i < len; ++i) {
00138 if (0 != ACE_OS::strcmp(qos1.name[i], qos2.name[i])) {
00139 return false;
00140 }
00141 }
00142
00143 return true;
00144 }
00145
00146 return false;
00147 }
00148
00149 ACE_INLINE
00150 bool operator==(const DDS::ReliabilityQosPolicy& qos1,
00151 const DDS::ReliabilityQosPolicy& qos2)
00152 {
00153 return
00154 qos1.kind == qos2.kind
00155 && qos1.max_blocking_time == qos2.max_blocking_time;
00156 }
00157
00158 ACE_INLINE
00159 bool operator==(const DDS::DestinationOrderQosPolicy& qos1,
00160 const DDS::DestinationOrderQosPolicy& qos2)
00161 {
00162 return qos1.kind == qos2.kind;
00163 }
00164
00165 ACE_INLINE
00166 bool operator==(const DDS::HistoryQosPolicy& qos1,
00167 const DDS::HistoryQosPolicy& qos2)
00168 {
00169 return
00170 qos1.kind == qos2.kind
00171 && qos1.depth == qos2.depth;
00172 }
00173
00174 ACE_INLINE
00175 bool operator==(const DDS::ResourceLimitsQosPolicy& qos1,
00176 const DDS::ResourceLimitsQosPolicy& qos2)
00177 {
00178 return
00179 qos1.max_samples == qos2.max_samples
00180 && qos1.max_instances == qos2.max_instances
00181 && qos1.max_samples_per_instance == qos2.max_samples_per_instance;
00182 }
00183
00184 ACE_INLINE
00185 bool operator==(const DDS::EntityFactoryQosPolicy& qos1,
00186 const DDS::EntityFactoryQosPolicy& qos2)
00187 {
00188
00189 return std::memcmp(&qos1.autoenable_created_entities,
00190 &qos2.autoenable_created_entities,
00191 sizeof qos2.autoenable_created_entities) == 0;
00192 }
00193
00194 ACE_INLINE
00195 bool operator==(const DDS::WriterDataLifecycleQosPolicy& qos1,
00196 const DDS::WriterDataLifecycleQosPolicy& qos2)
00197 {
00198 return
00199 qos1.autodispose_unregistered_instances == qos2.autodispose_unregistered_instances;
00200 }
00201
00202 ACE_INLINE
00203 bool operator==(const DDS::ReaderDataLifecycleQosPolicy& qos1,
00204 const DDS::ReaderDataLifecycleQosPolicy& qos2)
00205 {
00206 return
00207 (qos1.autopurge_nowriter_samples_delay == qos2.autopurge_nowriter_samples_delay)
00208 && (qos1.autopurge_disposed_samples_delay == qos2.autopurge_disposed_samples_delay);
00209
00210 }
00211
00212 template <typename T>
00213 ACE_INLINE
00214 bool operator==(const TAO::unbounded_value_sequence<T>& seq1, const TAO::unbounded_value_sequence<T>& seq2)
00215 {
00216 if (seq1.length() != seq2.length())
00217 return false;
00218
00219 for (size_t i = 0; i < seq1.length(); ++i)
00220 {
00221 if (seq1[i].name != seq2[i].name || seq1[i].value != seq2[i].value || seq1[i].propagate != seq2[i].propagate)
00222 return false;
00223 }
00224 return true;
00225 }
00226
00227 ACE_INLINE
00228 bool operator==(const DDS::PropertyQosPolicy& qos1,
00229 const DDS::PropertyQosPolicy& qos2)
00230 {
00231 return qos1.value == qos2.value && qos1.binary_value == qos2.binary_value;
00232 }
00233
00234 ACE_INLINE
00235 bool operator==(const DDS::DomainParticipantQos& qos1,
00236 const DDS::DomainParticipantQos& qos2)
00237 {
00238 return
00239 qos1.user_data == qos2.user_data
00240 && qos1.entity_factory == qos2.entity_factory
00241 && qos1.property == qos2.property;
00242 }
00243
00244 ACE_INLINE
00245 bool operator==(const DDS::TopicQos& qos1,
00246 const DDS::TopicQos& qos2)
00247 {
00248 return
00249 qos1.topic_data == qos2.topic_data
00250 && qos1.durability == qos2.durability
00251 && qos1.durability_service == qos2.durability_service
00252 && qos1.deadline == qos2.deadline
00253 && qos1.latency_budget == qos2.latency_budget
00254 && qos1.liveliness == qos2.liveliness
00255 && qos1.reliability == qos2.reliability
00256 && qos1.destination_order == qos2.destination_order
00257 && qos1.history == qos2.history
00258 && qos1.resource_limits == qos2.resource_limits
00259 && qos1.transport_priority == qos2.transport_priority
00260 && qos1.lifespan == qos2.lifespan
00261 && qos1.ownership == qos2.ownership;
00262 }
00263
00264 ACE_INLINE
00265 bool operator==(const DDS::DataWriterQos& qos1,
00266 const DDS::DataWriterQos& qos2)
00267 {
00268 return
00269 qos1.durability == qos2.durability
00270 && qos1.durability_service == qos2.durability_service
00271 && qos1.deadline == qos2.deadline
00272 && qos1.latency_budget == qos2.latency_budget
00273 && qos1.liveliness == qos2.liveliness
00274 && qos1.reliability == qos2.reliability
00275 && qos1.destination_order == qos2.destination_order
00276 && qos1.history == qos2.history
00277 && qos1.resource_limits == qos2.resource_limits
00278 && qos1.transport_priority == qos2.transport_priority
00279 && qos1.lifespan == qos2.lifespan
00280 && qos1.user_data == qos2.user_data
00281 && qos1.ownership == qos2.ownership
00282 #ifndef OPENDDS_NO_OWNERSHIP_KIND_EXCLUSIVE
00283 && qos1.ownership_strength == qos2.ownership_strength
00284 #endif
00285 && qos1.writer_data_lifecycle == qos2.writer_data_lifecycle;
00286 }
00287
00288 ACE_INLINE
00289 bool operator==(const DDS::PublisherQos& qos1,
00290 const DDS::PublisherQos& qos2)
00291 {
00292 return
00293 qos1.presentation == qos2.presentation
00294 && qos1.partition == qos2.partition
00295 && qos1.group_data == qos2.group_data
00296 && qos1.entity_factory == qos2.entity_factory;
00297 }
00298
00299 ACE_INLINE
00300 bool operator==(const DDS::DataReaderQos& qos1,
00301 const DDS::DataReaderQos& qos2)
00302 {
00303 return
00304 qos1.durability == qos2.durability
00305 && qos1.deadline == qos2.deadline
00306 && qos1.latency_budget == qos2.latency_budget
00307 && qos1.liveliness == qos2.liveliness
00308 && qos1.reliability == qos2.reliability
00309 && qos1.destination_order == qos2.destination_order
00310 && qos1.history == qos2.history
00311 && qos1.resource_limits == qos2.resource_limits
00312 && qos1.user_data == qos2.user_data
00313 && qos1.time_based_filter == qos2.time_based_filter
00314 && qos1.reader_data_lifecycle == qos2.reader_data_lifecycle;
00315 }
00316
00317 ACE_INLINE
00318 bool operator==(const DDS::SubscriberQos& qos1,
00319 const DDS::SubscriberQos& qos2)
00320 {
00321 return
00322 qos1.presentation == qos2.presentation
00323 && qos1.partition == qos2.partition
00324 && qos1.group_data == qos2.group_data
00325 && qos1.entity_factory == qos2.entity_factory;
00326 }
00327
00328 ACE_INLINE
00329 bool operator==(const DDS::DomainParticipantFactoryQos& qos1,
00330 const DDS::DomainParticipantFactoryQos& qos2)
00331 {
00332 return qos1.entity_factory == qos2.entity_factory;
00333 }
00334
00335 ACE_INLINE
00336 bool operator!=(const DDS::UserDataQosPolicy& qos1,
00337 const DDS::UserDataQosPolicy& qos2)
00338 {
00339 return !(qos1 == qos2);
00340 }
00341
00342 ACE_INLINE
00343 bool operator!=(const DDS::TopicDataQosPolicy & qos1,
00344 const DDS::TopicDataQosPolicy & qos2)
00345 {
00346 return !(qos1 == qos2);
00347 }
00348
00349 ACE_INLINE
00350 bool operator!=(const DDS::GroupDataQosPolicy& qos1,
00351 const DDS::GroupDataQosPolicy& qos2)
00352 {
00353 return !(qos1 == qos2);
00354 }
00355
00356 ACE_INLINE
00357 bool operator!=(const DDS::TransportPriorityQosPolicy& qos1,
00358 const DDS::TransportPriorityQosPolicy& qos2)
00359 {
00360 return !(qos1 == qos2);
00361 }
00362
00363 ACE_INLINE
00364 bool operator!=(const DDS::LifespanQosPolicy& qos1,
00365 const DDS::LifespanQosPolicy& qos2)
00366 {
00367 return !(qos1 == qos2);
00368 }
00369
00370 ACE_INLINE
00371 bool
00372 operator!=(const DDS::DurabilityQosPolicy& qos1,
00373 const DDS::DurabilityQosPolicy& qos2)
00374 {
00375 return !(qos1 == qos2);
00376 }
00377
00378 ACE_INLINE
00379 bool
00380 operator!=(const DDS::DurabilityServiceQosPolicy& qos1,
00381 const DDS::DurabilityServiceQosPolicy& qos2)
00382 {
00383 return !(qos1 == qos2);
00384 }
00385
00386 ACE_INLINE
00387 bool operator!=(const DDS::PresentationQosPolicy& qos1,
00388 const DDS::PresentationQosPolicy& qos2)
00389 {
00390 return !(qos1 == qos2);
00391 }
00392
00393 ACE_INLINE
00394 bool operator!=(const DDS::DeadlineQosPolicy& qos1,
00395 const DDS::DeadlineQosPolicy& qos2)
00396 {
00397 return !(qos1 == qos2);
00398 }
00399
00400 ACE_INLINE
00401 bool operator!=(const DDS::LatencyBudgetQosPolicy& qos1,
00402 const DDS::LatencyBudgetQosPolicy& qos2)
00403 {
00404 return !(qos1 == qos2);
00405 }
00406
00407 ACE_INLINE
00408 bool operator!=(const DDS::OwnershipQosPolicy& qos1,
00409 const DDS::OwnershipQosPolicy& qos2)
00410 {
00411 return !(qos1 == qos2);
00412 }
00413
00414 ACE_INLINE
00415 bool operator!=(const DDS::OwnershipStrengthQosPolicy& qos1,
00416 const DDS::OwnershipStrengthQosPolicy& qos2)
00417 {
00418 return !(qos1 == qos2);
00419 }
00420
00421 ACE_INLINE
00422 bool operator!=(const DDS::LivelinessQosPolicy& qos1,
00423 const DDS::LivelinessQosPolicy& qos2)
00424 {
00425 return !(qos1 == qos2);
00426 }
00427
00428 ACE_INLINE
00429 bool operator!=(const DDS::TimeBasedFilterQosPolicy& qos1,
00430 const DDS::TimeBasedFilterQosPolicy& qos2)
00431 {
00432 return !(qos1 == qos2);
00433 }
00434
00435 ACE_INLINE
00436 bool operator!=(const DDS::PartitionQosPolicy& qos1,
00437 const DDS::PartitionQosPolicy& qos2)
00438 {
00439 return !(qos1 == qos2);
00440 }
00441
00442 ACE_INLINE
00443 bool operator!=(const DDS::ReliabilityQosPolicy& qos1,
00444 const DDS::ReliabilityQosPolicy& qos2)
00445 {
00446 return !(qos1 == qos2);
00447 }
00448
00449 ACE_INLINE
00450 bool operator!=(const DDS::DestinationOrderQosPolicy& qos1,
00451 const DDS::DestinationOrderQosPolicy& qos2)
00452 {
00453 return !(qos1 == qos2);
00454 }
00455
00456 ACE_INLINE
00457 bool operator!=(const DDS::HistoryQosPolicy& qos1,
00458 const DDS::HistoryQosPolicy& qos2)
00459 {
00460 return !(qos1 == qos2);
00461 }
00462
00463 ACE_INLINE
00464 bool operator!=(const DDS::ResourceLimitsQosPolicy& qos1,
00465 const DDS::ResourceLimitsQosPolicy& qos2)
00466 {
00467 return !(qos1 == qos2);
00468 }
00469
00470 ACE_INLINE
00471 bool operator!=(const DDS::EntityFactoryQosPolicy& qos1,
00472 const DDS::EntityFactoryQosPolicy& qos2)
00473 {
00474 return !(qos1 == qos2);
00475 }
00476
00477 ACE_INLINE
00478 bool operator!=(const DDS::WriterDataLifecycleQosPolicy& qos1,
00479 const DDS::WriterDataLifecycleQosPolicy& qos2)
00480 {
00481 return !(qos1 == qos2);
00482 }
00483
00484 ACE_INLINE
00485 bool operator!=(const DDS::ReaderDataLifecycleQosPolicy& qos1,
00486 const DDS::ReaderDataLifecycleQosPolicy& qos2)
00487 {
00488 return !(qos1 == qos2);
00489 }
00490
00491 ACE_INLINE
00492 bool operator!=(const DDS::PropertyQosPolicy& qos1,
00493 const DDS::PropertyQosPolicy& qos2)
00494 {
00495 return !(qos1 == qos2);
00496 }
00497
00498 ACE_INLINE
00499 bool operator!=(const DDS::DomainParticipantQos& qos1,
00500 const DDS::DomainParticipantQos& qos2)
00501 {
00502 return !(qos1 == qos2);
00503 }
00504
00505 ACE_INLINE
00506 bool operator!=(const DDS::TopicQos& qos1,
00507 const DDS::TopicQos& qos2)
00508 {
00509 return !(qos1 == qos2);
00510 }
00511
00512 ACE_INLINE
00513 bool operator!=(const DDS::DataWriterQos& qos1,
00514 const DDS::DataWriterQos& qos2)
00515 {
00516 return !(qos1 == qos2);
00517 }
00518
00519 ACE_INLINE
00520 bool operator!=(const DDS::PublisherQos& qos1,
00521 const DDS::PublisherQos& qos2)
00522 {
00523 return !(qos1 == qos2);
00524 }
00525
00526 ACE_INLINE
00527 bool operator!=(const DDS::DataReaderQos& qos1,
00528 const DDS::DataReaderQos& qos2)
00529 {
00530 return !(qos1 == qos2);
00531 }
00532
00533 ACE_INLINE
00534 bool operator!=(const DDS::SubscriberQos& qos1,
00535 const DDS::SubscriberQos& qos2)
00536 {
00537 return !(qos1 == qos2);
00538 }
00539
00540 ACE_INLINE
00541 bool operator!=(const DDS::DomainParticipantFactoryQos& qos1,
00542 const DDS::DomainParticipantFactoryQos& qos2)
00543 {
00544 return !(qos1 == qos2);
00545 }
00546 #endif
00547
00548 ACE_INLINE
00549 bool
00550 Qos_Helper::consistent(
00551 const DDS::ResourceLimitsQosPolicy& resource_limits,
00552 const DDS::HistoryQosPolicy& history)
00553 {
00554 CORBA::Long const max_samples_per_instance =
00555 resource_limits.max_samples_per_instance;
00556 CORBA::Long const max_samples = resource_limits.max_samples;
00557
00558 return
00559 (max_samples_per_instance == DDS::LENGTH_UNLIMITED
00560 || (max_samples_per_instance >= history.depth
00561 && (max_samples == DDS::LENGTH_UNLIMITED
00562 || max_samples >= max_samples_per_instance)));
00563 }
00564
00565 ACE_INLINE
00566 bool
00567 Qos_Helper::consistent(const DDS::DeadlineQosPolicy& deadline,
00568 const DDS::TimeBasedFilterQosPolicy& time_based_filter)
00569 {
00570 return time_based_filter.minimum_separation <= deadline.period;
00571 }
00572
00573 ACE_INLINE
00574 bool Qos_Helper::consistent(const DDS::DomainParticipantQos& )
00575 {
00576 return true;
00577 }
00578
00579 ACE_INLINE
00580 bool Qos_Helper::consistent(const DDS::TopicQos& qos)
00581 {
00582
00583
00584
00585 #ifndef OPENDDS_NO_PERSISTENCE_PROFILE
00586 DDS::HistoryQosPolicy const ds_history = {
00587 qos.durability_service.history_kind,
00588 qos.durability_service.history_depth
00589 };
00590
00591 DDS::ResourceLimitsQosPolicy const ds_resource_limits = {
00592 qos.durability_service.max_samples,
00593 qos.durability_service.max_instances,
00594 qos.durability_service.max_samples_per_instance
00595 };
00596
00597 return
00598 consistent(qos.resource_limits, qos.history)
00599 && consistent(ds_resource_limits, ds_history);
00600 #else
00601 ACE_UNUSED_ARG(qos);
00602 return true;
00603 #endif
00604 }
00605
00606 ACE_INLINE
00607 bool
00608 Qos_Helper::consistent(const DDS::DataWriterQos& qos)
00609 {
00610
00611
00612
00613 #ifndef OPENDDS_NO_PERSISTENCE_PROFILE
00614 DDS::HistoryQosPolicy const ds_history = {
00615 qos.durability_service.history_kind,
00616 qos.durability_service.history_depth
00617 };
00618
00619 DDS::ResourceLimitsQosPolicy const ds_resource_limits = {
00620 qos.durability_service.max_samples,
00621 qos.durability_service.max_instances,
00622 qos.durability_service.max_samples_per_instance
00623 };
00624
00625 return
00626 consistent(qos.resource_limits, qos.history)
00627 && consistent(ds_resource_limits, ds_history);
00628 #else
00629 ACE_UNUSED_ARG(qos);
00630 return true;
00631 #endif
00632 }
00633
00634 ACE_INLINE
00635 bool
00636 Qos_Helper::consistent(const DDS::PublisherQos& )
00637 {
00638 return true;
00639 }
00640
00641 ACE_INLINE
00642 bool
00643 Qos_Helper::consistent(const DDS::DataReaderQos& qos)
00644 {
00645 return
00646 consistent(qos.deadline, qos.time_based_filter) &&
00647 consistent(qos.resource_limits, qos.history);
00648 }
00649
00650 ACE_INLINE
00651 bool
00652 Qos_Helper::consistent(const DDS::SubscriberQos& )
00653 {
00654 return true;
00655 }
00656
00657 ACE_INLINE
00658 bool
00659 Qos_Helper::consistent(const DDS::DomainParticipantFactoryQos& )
00660 {
00661 return true;
00662 }
00663
00664
00665
00666
00667
00668
00669
00670
00671
00672
00673
00674
00675
00676 ACE_INLINE
00677 bool Qos_Helper::valid(const DDS::UserDataQosPolicy& )
00678 {
00679 return true;
00680 }
00681
00682 ACE_INLINE
00683 bool Qos_Helper::valid(const DDS::TopicDataQosPolicy & )
00684 {
00685 return true;
00686 }
00687
00688 ACE_INLINE
00689 bool Qos_Helper::valid(const DDS::GroupDataQosPolicy& )
00690 {
00691 return true;
00692 }
00693
00694
00695 ACE_INLINE
00696 bool Qos_Helper::valid(const DDS::TransportPriorityQosPolicy& )
00697 {
00698 return true;
00699 }
00700
00701 ACE_INLINE
00702 bool Qos_Helper::valid(const DDS::LifespanQosPolicy& qos)
00703 {
00704 return valid_duration(qos.duration);
00705 }
00706
00707 ACE_INLINE
00708 bool
00709 Qos_Helper::valid(const DDS::DurabilityQosPolicy& qos)
00710 {
00711 return
00712 (qos.kind == DDS::VOLATILE_DURABILITY_QOS
00713 || qos.kind == DDS::TRANSIENT_LOCAL_DURABILITY_QOS
00714 || qos.kind == DDS::TRANSIENT_DURABILITY_QOS
00715 || qos.kind == DDS::PERSISTENT_DURABILITY_QOS);
00716 }
00717
00718 ACE_INLINE
00719 bool Qos_Helper::valid(const DDS::PresentationQosPolicy& qos)
00720 {
00721 return
00722 (qos.access_scope == DDS::INSTANCE_PRESENTATION_QOS
00723 || qos.access_scope == DDS::TOPIC_PRESENTATION_QOS
00724 || qos.access_scope == DDS::GROUP_PRESENTATION_QOS);
00725 }
00726
00727 ACE_INLINE
00728 bool Qos_Helper::valid(const DDS::DeadlineQosPolicy& qos)
00729 {
00730 return valid_duration(qos.period);
00731 }
00732
00733 ACE_INLINE
00734 bool Qos_Helper::valid(const DDS::LatencyBudgetQosPolicy& )
00735 {
00736 return true;
00737 }
00738
00739 ACE_INLINE
00740 bool Qos_Helper::valid(const DDS::OwnershipQosPolicy& qos)
00741 {
00742 return
00743 qos.kind == DDS::SHARED_OWNERSHIP_QOS
00744 #ifndef OPENDDS_NO_OWNERSHIP_KIND_EXCLUSIVE
00745 || qos.kind == DDS::EXCLUSIVE_OWNERSHIP_QOS
00746 #endif
00747 ;
00748 }
00749
00750 #ifndef OPENDDS_NO_OWNERSHIP_KIND_EXCLUSIVE
00751 ACE_INLINE
00752 bool Qos_Helper::valid(const DDS::OwnershipStrengthQosPolicy& )
00753 {
00754 return true;
00755 }
00756 #endif
00757
00758 ACE_INLINE
00759 bool Qos_Helper::valid(const DDS::LivelinessQosPolicy& qos)
00760 {
00761 return
00762 (qos.kind == DDS::AUTOMATIC_LIVELINESS_QOS
00763 || qos.kind == DDS::MANUAL_BY_PARTICIPANT_LIVELINESS_QOS
00764 || qos.kind == DDS::MANUAL_BY_TOPIC_LIVELINESS_QOS)
00765
00766 && valid_duration(qos.lease_duration);
00767 }
00768
00769 ACE_INLINE
00770 bool Qos_Helper::valid(const DDS::TimeBasedFilterQosPolicy& )
00771 {
00772 return true;
00773 }
00774
00775 ACE_INLINE
00776 bool
00777 Qos_Helper::valid(const DDS::PartitionQosPolicy& )
00778 {
00779
00780
00781
00782 return true;
00783 }
00784
00785 ACE_INLINE
00786 bool Qos_Helper::valid(const DDS::ReliabilityQosPolicy& qos)
00787 {
00788 return
00789 qos.kind == DDS::BEST_EFFORT_RELIABILITY_QOS
00790 || qos.kind == DDS::RELIABLE_RELIABILITY_QOS;
00791 }
00792
00793 ACE_INLINE
00794 bool Qos_Helper::valid(const DDS::DestinationOrderQosPolicy& qos)
00795 {
00796 return qos.kind == DDS::BY_RECEPTION_TIMESTAMP_DESTINATIONORDER_QOS
00797 || qos.kind == DDS::BY_SOURCE_TIMESTAMP_DESTINATIONORDER_QOS;
00798 }
00799
00800 ACE_INLINE
00801 bool
00802 Qos_Helper::valid(const DDS::HistoryQosPolicy& qos)
00803 {
00804 return
00805 (qos.kind == DDS::KEEP_LAST_HISTORY_QOS
00806 || qos.kind == DDS::KEEP_ALL_HISTORY_QOS)
00807 && (qos.depth == DDS::LENGTH_UNLIMITED
00808 || qos.depth > 0);
00809 }
00810
00811 ACE_INLINE
00812 bool
00813 Qos_Helper::valid(const DDS::ResourceLimitsQosPolicy& qos)
00814 {
00815 return
00816 (qos.max_samples == DDS::LENGTH_UNLIMITED
00817 || qos.max_samples > 0)
00818 && (qos.max_instances == DDS::LENGTH_UNLIMITED
00819 || qos.max_instances > 0)
00820 && (qos.max_samples_per_instance == DDS::LENGTH_UNLIMITED
00821 || qos.max_samples_per_instance > 0);
00822 }
00823
00824 #ifndef OPENDDS_NO_PERSISTENCE_PROFILE
00825 ACE_INLINE
00826 bool
00827 Qos_Helper::valid(const DDS::DurabilityServiceQosPolicy& qos)
00828 {
00829
00830
00831 DDS::HistoryQosPolicy const history = {
00832 qos.history_kind,
00833 qos.history_depth
00834 };
00835
00836 DDS::ResourceLimitsQosPolicy const resource_limits = {
00837 qos.max_samples,
00838 qos.max_instances,
00839 qos.max_samples_per_instance
00840 };
00841
00842 return
00843 non_negative_duration(qos.service_cleanup_delay)
00844 && valid(history)
00845 && valid(resource_limits);
00846 }
00847 #endif
00848
00849 ACE_INLINE
00850 bool Qos_Helper::valid(const DDS::EntityFactoryQosPolicy& qos)
00851 {
00852
00853 const void* const mem = &qos.autoenable_created_entities;
00854 return *static_cast<const char*>(mem) != 3;
00855 }
00856
00857 ACE_INLINE
00858 bool Qos_Helper::valid(const DDS::PropertyQosPolicy& )
00859 {
00860 return true;
00861 }
00862
00863 ACE_INLINE
00864 bool Qos_Helper::valid(const DDS::WriterDataLifecycleQosPolicy&)
00865 {
00866 return true;
00867 }
00868
00869 ACE_INLINE
00870 bool Qos_Helper::valid(const DDS::ReaderDataLifecycleQosPolicy&)
00871 {
00872 return true;
00873 }
00874
00875 ACE_INLINE
00876 bool Qos_Helper::valid(const DDS::DomainParticipantQos& qos)
00877 {
00878 return valid(qos.user_data) && valid(qos.entity_factory) && valid(qos.property);
00879 }
00880
00881 ACE_INLINE
00882 bool Qos_Helper::valid(const DDS::TopicQos& qos)
00883 {
00884 return
00885 valid(qos.topic_data)
00886 && valid(qos.durability)
00887 #ifndef OPENDDS_NO_PERSISTENCE_PROFILE
00888 && valid(qos.durability_service)
00889 #endif
00890 && valid(qos.deadline)
00891 && valid(qos.latency_budget)
00892 && valid(qos.liveliness)
00893 && valid(qos.destination_order)
00894 && valid(qos.history)
00895 && valid(qos.resource_limits)
00896 && valid(qos.transport_priority)
00897 && valid(qos.lifespan)
00898 && valid(qos.ownership);
00899 }
00900
00901 ACE_INLINE
00902 bool Qos_Helper::valid(const DDS::DataWriterQos& qos)
00903 {
00904 if (!valid(qos.durability))
00905 ACE_ERROR_RETURN ((LM_ERROR,
00906 ACE_TEXT("(%P|%t) ERROR: ")
00907 ACE_TEXT("Qos_Helper::valid::DataWriterQos, ")
00908 ACE_TEXT("invalid durability qos.\n")), false);
00909
00910 #ifndef OPENDDS_NO_PERSISTENCE_PROFILE
00911 if (!valid(qos.durability_service))
00912 ACE_ERROR_RETURN ((LM_ERROR,
00913 ACE_TEXT("(%P|%t) ERROR: ")
00914 ACE_TEXT("Qos_Helper::valid::DataWriterQos, ")
00915 ACE_TEXT("invalid durability_service qos.\n")), false);
00916 #endif
00917 if (!valid(qos.deadline))
00918 ACE_ERROR_RETURN ((LM_ERROR,
00919 ACE_TEXT("(%P|%t) ERROR: ")
00920 ACE_TEXT("Qos_Helper::valid::DataWriterQos, ")
00921 ACE_TEXT("invalid deadline qos.\n")), false);
00922
00923 if (!valid(qos.latency_budget))
00924 ACE_ERROR_RETURN ((LM_ERROR,
00925 ACE_TEXT("(%P|%t) ERROR: ")
00926 ACE_TEXT("Qos_Helper::valid::DataWriterQos, ")
00927 ACE_TEXT("invalid latency_budget qos.\n")), false);
00928
00929 if (!valid(qos.liveliness))
00930 ACE_ERROR_RETURN ((LM_ERROR,
00931 ACE_TEXT("(%P|%t) ERROR: ")
00932 ACE_TEXT("Qos_Helper::valid::DataWriterQos, ")
00933 ACE_TEXT("invalid liveliness qos.\n")), false);
00934
00935 if (!valid(qos.destination_order))
00936 ACE_ERROR_RETURN ((LM_ERROR,
00937 ACE_TEXT("(%P|%t) ERROR: ")
00938 ACE_TEXT("Qos_Helper::valid::DataWriterQos, ")
00939 ACE_TEXT("invalid destination_order qos.\n")), false);
00940
00941 if (!valid(qos.history))
00942 ACE_ERROR_RETURN ((LM_ERROR,
00943 ACE_TEXT("(%P|%t) ERROR: ")
00944 ACE_TEXT("Qos_Helper::valid::DataWriterQos, ")
00945 ACE_TEXT("invalid history qos.\n")), false);
00946
00947 if (!valid(qos.resource_limits))
00948 ACE_ERROR_RETURN ((LM_ERROR,
00949 ACE_TEXT("(%P|%t) ERROR: ")
00950 ACE_TEXT("Qos_Helper::valid::DataWriterQos, ")
00951 ACE_TEXT("invalid resource_limits qos.\n")), false);
00952
00953 if (!valid(qos.transport_priority))
00954 ACE_ERROR_RETURN ((LM_ERROR,
00955 ACE_TEXT("(%P|%t) ERROR: ")
00956 ACE_TEXT("Qos_Helper::valid::DataWriterQos, ")
00957 ACE_TEXT("invalid transport_priority qos.\n")), false);
00958
00959 if (!valid(qos.lifespan))
00960 ACE_ERROR_RETURN ((LM_ERROR,
00961 ACE_TEXT("(%P|%t) ERROR: ")
00962 ACE_TEXT("Qos_Helper::valid::DataWriterQos, ")
00963 ACE_TEXT("invalid lifespan qos.\n")), false);
00964
00965 if (!valid(qos.user_data))
00966 ACE_ERROR_RETURN ((LM_ERROR,
00967 ACE_TEXT("(%P|%t) ERROR: ")
00968 ACE_TEXT("Qos_Helper::valid::DataWriterQos, ")
00969 ACE_TEXT("invalid user_data qos.\n")), false);
00970
00971 if (!valid(qos.ownership))
00972 ACE_ERROR_RETURN ((LM_ERROR,
00973 ACE_TEXT("(%P|%t) ERROR: ")
00974 ACE_TEXT("Qos_Helper::valid::DataWriterQos, ")
00975 ACE_TEXT("invalid ownership qos.\n")), false);
00976
00977 #ifndef OPENDDS_NO_OWNERSHIP_KIND_EXCLUSIVE
00978 if (!valid(qos.ownership_strength))
00979 ACE_ERROR_RETURN ((LM_ERROR,
00980 ACE_TEXT("(%P|%t) ERROR: ")
00981 ACE_TEXT("Qos_Helper::valid::DataWriterQos, ")
00982 ACE_TEXT("invalid ownership_strength qos.\n")), false);
00983 #endif
00984 if (!valid(qos.writer_data_lifecycle))
00985 ACE_ERROR_RETURN ((LM_ERROR,
00986 ACE_TEXT("(%P|%t) ERROR: ")
00987 ACE_TEXT("Qos_Helper::valid::DataWriterQos, ")
00988 ACE_TEXT("invalid writer_data_lifecycle qos.\n")), false);
00989
00990 return true;
00991 }
00992
00993 ACE_INLINE
00994 bool Qos_Helper::valid(const DDS::PublisherQos& qos)
00995 {
00996 return
00997 valid(qos.presentation)
00998 && valid(qos.partition)
00999 && valid(qos.group_data)
01000 && valid(qos.entity_factory);
01001 }
01002
01003 ACE_INLINE
01004 bool Qos_Helper::valid(const DDS::DataReaderQos& qos)
01005 {
01006 return
01007 valid(qos.durability)
01008 && valid(qos.deadline)
01009 && valid(qos.latency_budget)
01010 && valid(qos.liveliness)
01011 && valid(qos.reliability)
01012 && valid(qos.destination_order)
01013 && valid(qos.history)
01014 && valid(qos.resource_limits)
01015 && valid(qos.user_data)
01016 && valid(qos.time_based_filter)
01017 && valid(qos.reader_data_lifecycle)
01018 && valid(qos.ownership);
01019 }
01020
01021 ACE_INLINE
01022 bool Qos_Helper::valid(const DDS::SubscriberQos& qos)
01023 {
01024 return
01025 valid(qos.presentation)
01026 && valid(qos.partition)
01027 && valid(qos.group_data)
01028 && valid(qos.entity_factory);
01029 }
01030
01031 ACE_INLINE
01032 bool Qos_Helper::valid(const DDS::DomainParticipantFactoryQos& qos)
01033 {
01034 return valid(qos.entity_factory);
01035 }
01036
01037 ACE_INLINE
01038 bool Qos_Helper::changeable(const DDS::UserDataQosPolicy& ,
01039 const DDS::UserDataQosPolicy& )
01040 {
01041 return true;
01042 }
01043
01044 ACE_INLINE
01045 bool Qos_Helper::changeable(const DDS::TopicDataQosPolicy & ,
01046 const DDS::TopicDataQosPolicy & )
01047 {
01048 return true;
01049 }
01050
01051 ACE_INLINE
01052 bool Qos_Helper::changeable(const DDS::GroupDataQosPolicy& ,
01053 const DDS::GroupDataQosPolicy& )
01054 {
01055 return true;
01056 }
01057
01058 ACE_INLINE
01059 bool Qos_Helper::changeable(
01060 const DDS::TransportPriorityQosPolicy& qos1,
01061 const DDS::TransportPriorityQosPolicy& qos2)
01062 {
01063
01064
01065
01066
01067
01068 return qos1 == qos2;
01069 }
01070
01071 ACE_INLINE
01072 bool
01073 Qos_Helper::changeable(const DDS::LifespanQosPolicy& ,
01074 const DDS::LifespanQosPolicy& )
01075 {
01076 return true;
01077 }
01078
01079 ACE_INLINE
01080 bool Qos_Helper::changeable(const DDS::DurabilityQosPolicy& qos1,
01081 const DDS::DurabilityQosPolicy& qos2)
01082 {
01083 return qos1 == qos2;
01084 }
01085
01086 #ifndef OPENDDS_NO_PERSISTENCE_PROFILE
01087 ACE_INLINE
01088 bool
01089 Qos_Helper::changeable(const DDS::DurabilityServiceQosPolicy& qos1,
01090 const DDS::DurabilityServiceQosPolicy& qos2)
01091 {
01092 return qos1 == qos2;
01093 }
01094 #endif
01095
01096 ACE_INLINE
01097 bool Qos_Helper::changeable(const DDS::PresentationQosPolicy& qos1,
01098 const DDS::PresentationQosPolicy& qos2)
01099 {
01100 if (qos1 == qos2)
01101 return true;
01102
01103 else
01104 return false;
01105 }
01106
01107
01108
01109
01110
01111
01112
01113
01114 ACE_INLINE
01115 bool Qos_Helper::changeable(const DDS::DeadlineQosPolicy& ,
01116 const DDS::DeadlineQosPolicy& )
01117 {
01118 return true;
01119 }
01120
01121 ACE_INLINE
01122 bool Qos_Helper::changeable(
01123 const DDS::LatencyBudgetQosPolicy& ,
01124 const DDS::LatencyBudgetQosPolicy& )
01125 {
01126 return true;
01127 }
01128
01129 ACE_INLINE
01130 bool Qos_Helper::changeable(const DDS::OwnershipQosPolicy& qos1,
01131 const DDS::OwnershipQosPolicy& qos2)
01132 {
01133 return qos1 == qos2;
01134 }
01135
01136
01137 #ifndef OPENDDS_NO_OWNERSHIP_KIND_EXCLUSIVE
01138 ACE_INLINE
01139 bool Qos_Helper::changeable(
01140 const DDS::OwnershipStrengthQosPolicy& ,
01141 const DDS::OwnershipStrengthQosPolicy& )
01142 {
01143 return true;
01144 }
01145 #endif
01146
01147 ACE_INLINE
01148 bool Qos_Helper::changeable(const DDS::LivelinessQosPolicy& qos1,
01149 const DDS::LivelinessQosPolicy& qos2)
01150 {
01151 return qos1 == qos2;
01152 }
01153
01154 ACE_INLINE
01155 bool Qos_Helper::changeable(
01156 const DDS::TimeBasedFilterQosPolicy& ,
01157 const DDS::TimeBasedFilterQosPolicy& )
01158 {
01159 return true;
01160 }
01161
01162 ACE_INLINE
01163 bool
01164 Qos_Helper::changeable(const DDS::PartitionQosPolicy& ,
01165 const DDS::PartitionQosPolicy& )
01166 {
01167 return true;
01168 }
01169
01170 ACE_INLINE
01171 bool Qos_Helper::changeable(const DDS::ReliabilityQosPolicy& qos1,
01172 const DDS::ReliabilityQosPolicy& qos2)
01173 {
01174 return qos1 == qos2;
01175 }
01176
01177 ACE_INLINE
01178 bool Qos_Helper::changeable(const DDS::DestinationOrderQosPolicy& qos1,
01179 const DDS::DestinationOrderQosPolicy& qos2)
01180 {
01181 return qos1 == qos2;
01182 }
01183
01184 ACE_INLINE
01185 bool Qos_Helper::changeable(const DDS::HistoryQosPolicy& qos1,
01186 const DDS::HistoryQosPolicy& qos2)
01187 {
01188 return qos1 == qos2;
01189 }
01190
01191 ACE_INLINE
01192 bool Qos_Helper::changeable(const DDS::ResourceLimitsQosPolicy& qos1,
01193 const DDS::ResourceLimitsQosPolicy& qos2)
01194 {
01195 return qos1 == qos2;
01196 }
01197
01198 ACE_INLINE
01199 bool Qos_Helper::changeable(
01200 const DDS::EntityFactoryQosPolicy& ,
01201 const DDS::EntityFactoryQosPolicy& )
01202 {
01203 return true;
01204 }
01205
01206 ACE_INLINE
01207 bool Qos_Helper::changeable(
01208 const DDS::WriterDataLifecycleQosPolicy& ,
01209 const DDS::WriterDataLifecycleQosPolicy& )
01210 {
01211 return true;
01212 }
01213
01214 ACE_INLINE
01215 bool Qos_Helper::changeable(
01216 const DDS::ReaderDataLifecycleQosPolicy& ,
01217 const DDS::ReaderDataLifecycleQosPolicy& )
01218 {
01219 return true;
01220 }
01221
01222 ACE_INLINE
01223 bool Qos_Helper::changeable(const DDS::DomainParticipantQos& qos1,
01224 const DDS::DomainParticipantQos& qos2)
01225 {
01226 return
01227 changeable(qos1.user_data, qos2.user_data)
01228 && changeable(qos1.entity_factory, qos2.entity_factory);
01229 }
01230
01231 ACE_INLINE
01232 bool Qos_Helper::changeable(const DDS::TopicQos& qos1,
01233 const DDS::TopicQos& qos2)
01234 {
01235 return
01236 changeable(qos1.topic_data, qos2.topic_data)
01237 && changeable(qos1.durability, qos2.durability)
01238 #ifndef OPENDDS_NO_PERSISTENCE_PROFILE
01239 && changeable(qos1.durability_service, qos2.durability_service)
01240 #endif
01241 && changeable(qos1.deadline, qos2.deadline)
01242 && changeable(qos1.latency_budget, qos2.latency_budget)
01243 && changeable(qos1.liveliness, qos2.liveliness)
01244 && changeable(qos1.destination_order, qos2.destination_order)
01245 && changeable(qos1.history, qos2.history)
01246 && changeable(qos1.resource_limits, qos2.resource_limits)
01247 && changeable(qos1.transport_priority, qos2.transport_priority)
01248 && changeable(qos1.lifespan, qos2.lifespan)
01249 && changeable(qos1.ownership, qos2.ownership);
01250 }
01251
01252 ACE_INLINE
01253 bool Qos_Helper::changeable(const DDS::DataWriterQos& qos1,
01254 const DDS::DataWriterQos& qos2)
01255 {
01256 return
01257 changeable(qos1.durability, qos2.durability)
01258 #ifndef OPENDDS_NO_PERSISTENCE_PROFILE
01259 && changeable(qos1.durability_service, qos2.durability_service)
01260 #endif
01261 && changeable(qos1.deadline, qos2.deadline)
01262 && changeable(qos1.latency_budget, qos2.latency_budget)
01263 && changeable(qos1.liveliness, qos2.liveliness)
01264 && changeable(qos1.destination_order, qos2.destination_order)
01265 && changeable(qos1.history, qos2.history)
01266 && changeable(qos1.resource_limits, qos2.resource_limits)
01267 && changeable(qos1.transport_priority, qos2.transport_priority)
01268 && changeable(qos1.lifespan, qos2.lifespan)
01269 && changeable(qos1.user_data, qos2.user_data)
01270 && changeable(qos1.ownership, qos2.ownership)
01271 #ifndef OPENDDS_NO_OWNERSHIP_KIND_EXCLUSIVE
01272 && changeable(qos1.ownership_strength, qos2.ownership_strength)
01273 #endif
01274 && changeable(qos1.writer_data_lifecycle, qos2.writer_data_lifecycle);
01275 }
01276
01277 ACE_INLINE
01278 bool Qos_Helper::changeable(const DDS::PublisherQos& qos1,
01279 const DDS::PublisherQos& qos2)
01280 {
01281 return
01282 changeable(qos1.presentation, qos2.presentation)
01283 && changeable(qos1.partition, qos2.partition)
01284 && changeable(qos1.group_data, qos2.group_data)
01285 && changeable(qos1.entity_factory, qos2.entity_factory);
01286 }
01287
01288 ACE_INLINE
01289 bool Qos_Helper::changeable(const DDS::DataReaderQos& qos1,
01290 const DDS::DataReaderQos& qos2)
01291 {
01292 return
01293 changeable(qos1.durability, qos2.durability)
01294 && changeable(qos1.deadline, qos2.deadline)
01295 && changeable(qos1.latency_budget, qos2.latency_budget)
01296 && changeable(qos1.liveliness, qos2.liveliness)
01297 && changeable(qos1.reliability, qos2.reliability)
01298 && changeable(qos1.destination_order, qos2.destination_order)
01299 && changeable(qos1.history, qos2.history)
01300 && changeable(qos1.resource_limits, qos2.resource_limits)
01301 && changeable(qos1.user_data, qos2.user_data)
01302 && changeable(qos1.time_based_filter, qos2.time_based_filter)
01303 && changeable(qos1.reader_data_lifecycle, qos2.reader_data_lifecycle)
01304 && changeable(qos1.ownership, qos2.ownership);
01305 }
01306
01307 ACE_INLINE
01308 bool Qos_Helper::changeable(const DDS::SubscriberQos& qos1,
01309 const DDS::SubscriberQos& qos2)
01310 {
01311 return
01312 changeable(qos1.presentation, qos2.presentation)
01313 && changeable(qos1.partition, qos2.partition)
01314 && changeable(qos1.group_data, qos2.group_data)
01315 && changeable(qos1.entity_factory, qos2.entity_factory);
01316 }
01317
01318 ACE_INLINE
01319 bool Qos_Helper::changeable(const DDS::DomainParticipantFactoryQos& qos1,
01320 const DDS::DomainParticipantFactoryQos& qos2)
01321 {
01322 return changeable(qos1.entity_factory, qos2.entity_factory);
01323 }
01324
01325 ACE_INLINE
01326 bool Qos_Helper::copy_from_topic_qos(DDS::DataReaderQos& a_datareader_qos,
01327 const DDS::TopicQos& a_topic_qos)
01328 {
01329 if (!Qos_Helper::valid(a_topic_qos) || !Qos_Helper::consistent(a_topic_qos)) {
01330 return false;
01331 }
01332
01333
01334 a_datareader_qos.durability = a_topic_qos.durability;
01335 a_datareader_qos.deadline = a_topic_qos.deadline;
01336 a_datareader_qos.latency_budget = a_topic_qos.latency_budget;
01337 a_datareader_qos.liveliness = a_topic_qos.liveliness;
01338 a_datareader_qos.reliability = a_topic_qos.reliability;
01339 a_datareader_qos.destination_order = a_topic_qos.destination_order;
01340 a_datareader_qos.history = a_topic_qos.history;
01341 a_datareader_qos.resource_limits = a_topic_qos.resource_limits;
01342 a_datareader_qos.ownership = a_topic_qos.ownership;
01343 return true;
01344 }
01345
01346 ACE_INLINE
01347 bool Qos_Helper::copy_from_topic_qos(DDS::DataWriterQos& a_datawriter_qos,
01348 const DDS::TopicQos& a_topic_qos)
01349 {
01350 if (!Qos_Helper::valid(a_topic_qos) || !Qos_Helper::consistent(a_topic_qos)) {
01351 return false;
01352 }
01353
01354
01355 a_datawriter_qos.durability = a_topic_qos.durability;
01356 #ifndef OPENDDS_NO_PERSISTENCE_PROFILE
01357 a_datawriter_qos.durability_service = a_topic_qos.durability_service;
01358 #endif
01359 a_datawriter_qos.deadline = a_topic_qos.deadline;
01360 a_datawriter_qos.latency_budget = a_topic_qos.latency_budget;
01361 a_datawriter_qos.liveliness = a_topic_qos.liveliness;
01362 a_datawriter_qos.reliability = a_topic_qos.reliability;
01363 a_datawriter_qos.destination_order = a_topic_qos.destination_order;
01364 a_datawriter_qos.history = a_topic_qos.history;
01365 a_datawriter_qos.resource_limits = a_topic_qos.resource_limits;
01366 a_datawriter_qos.transport_priority = a_topic_qos.transport_priority;
01367 a_datawriter_qos.lifespan = a_topic_qos.lifespan;
01368 a_datawriter_qos.ownership = a_topic_qos.ownership;
01369 return true;
01370 }
01371
01372 }
01373 }
01374
01375 OPENDDS_END_VERSIONED_NAMESPACE_DECL