Qos_Helper.inl

Go to the documentation of this file.
00001 /*
00002  *
00003  *
00004  * Distributed under the OpenDDS License.
00005  * See: http://www.opendds.org/license.html
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   // Marked_Default_Qos for DomainParticipant uses a value that's not 0 or 1
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& /* qos */)
00575 {
00576   return true;
00577 }
00578 
00579 ACE_INLINE
00580 bool Qos_Helper::consistent(const DDS::TopicQos& qos)
00581 {
00582   // Leverage existing validation functions for related QoS
00583   // policies.
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   // Leverage existing validation functions for related QoS
00611   // policies.
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& /* qos */)
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& /* qos */)
00653 {
00654   return true;
00655 }
00656 
00657 ACE_INLINE
00658 bool
00659 Qos_Helper::consistent(const DDS::DomainParticipantFactoryQos& /* qos */)
00660 {
00661   return true;
00662 }
00663 
00664 // Note: Since in the first implmenation of DSS in TAO
00665 //       a limited number of QoS values are allowed to be
00666 //       modified, the validity tests are simplified to mostly
00667 //       being a check that they are the defaults defined in
00668 //       the specification.
00669 //       SO INVALID ALSO INCLUDES UNSUPPORTED QoS.
00670 // TBD - when QoS become support the valid checks should check
00671 //       the ranges of the values of the QoS.
00672 
00673 // The spec does not have specification about the content of
00674 // UserDataQosPolicy,TopicDataQosPolicy and GroupDataQosPolicy
00675 // so they are valid with any value.
00676 ACE_INLINE
00677 bool Qos_Helper::valid(const DDS::UserDataQosPolicy& /* qos */)
00678 {
00679   return true;
00680 }
00681 
00682 ACE_INLINE
00683 bool Qos_Helper::valid(const DDS::TopicDataQosPolicy & /* qos */)
00684 {
00685   return true;
00686 }
00687 
00688 ACE_INLINE
00689 bool Qos_Helper::valid(const DDS::GroupDataQosPolicy& /* qos */)
00690 {
00691   return true;
00692 }
00693 
00694 // All values of TRANSPORT_PRIORITY.value are accepted.
00695 ACE_INLINE
00696 bool Qos_Helper::valid(const DDS::TransportPriorityQosPolicy& /* qos */)
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& /* qos */)
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& /*qos*/)
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& /*qos*/)
00771 {
00772   return true;
00773 }
00774 
00775 ACE_INLINE
00776 bool
00777 Qos_Helper::valid(const DDS::PartitionQosPolicy& /* qos */)
00778 {
00779   // All strings are valid, although we may not accept all
00780   // wildcard patterns.  For now we treat unsupported wildcard
00781   // patterns literally instead of as wildcards.
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   // Leverage existing validation functions for related QoS
00830   // policies.
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   // see Marked_Default_Qos::marked_default_DomainParticipantQos()
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& /* qos */)
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& /* qos1 */,
01039                             const DDS::UserDataQosPolicy& /* qos2 */)
01040 {
01041   return true;
01042 }
01043 
01044 ACE_INLINE
01045 bool Qos_Helper::changeable(const DDS::TopicDataQosPolicy & /* qos1 */,
01046                             const DDS::TopicDataQosPolicy & /* qos2 */)
01047 {
01048   return true;
01049 }
01050 
01051 ACE_INLINE
01052 bool Qos_Helper::changeable(const DDS::GroupDataQosPolicy& /* qos1 */,
01053                             const DDS::GroupDataQosPolicy& /* qos2 */)
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   // formal/07-01-01 specifies that this is changeable.  OpenDDS as
01064   // of Version 1.3 does not support dynamic modification of the
01065   // priority of a single DataWriter TRANSPORT_PRIORITY.value.
01066   //
01067   // return true;
01068   return qos1 == qos2;
01069 }
01070 
01071 ACE_INLINE
01072 bool
01073 Qos_Helper::changeable(const DDS::LifespanQosPolicy& /* qos1 */,
01074                        const DDS::LifespanQosPolicy& /* qos2 */)
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  * TBD: These QoS are not supported currently, they are
01110  *      changeable, but need a compatibility check between the
01111  *      publisher and subscriber ends when changing the QoS.
01112  */
01113 // ---------------------------------------------------------------
01114 ACE_INLINE
01115 bool Qos_Helper::changeable(const DDS::DeadlineQosPolicy& /* qos1 */,
01116                             const DDS::DeadlineQosPolicy& /* qos2 */)
01117 {
01118   return true;
01119 }
01120 
01121 ACE_INLINE
01122 bool Qos_Helper::changeable(
01123   const DDS::LatencyBudgetQosPolicy& /* qos1 */,
01124   const DDS::LatencyBudgetQosPolicy& /* qos2 */)
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& /* qos1 */,
01141   const DDS::OwnershipStrengthQosPolicy& /* qos2 */)
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& /* qos1 */,
01157   const DDS::TimeBasedFilterQosPolicy& /* qos2*/)
01158 {
01159   return true;
01160 }
01161 
01162 ACE_INLINE
01163 bool
01164 Qos_Helper::changeable(const DDS::PartitionQosPolicy& /* qos1 */,
01165                        const DDS::PartitionQosPolicy& /* qos2 */)
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& /* qos1 */,
01201   const DDS::EntityFactoryQosPolicy& /* qos2 */)
01202 {
01203   return true;
01204 }
01205 
01206 ACE_INLINE
01207 bool Qos_Helper::changeable(
01208   const DDS::WriterDataLifecycleQosPolicy& /* qos1 */,
01209   const DDS::WriterDataLifecycleQosPolicy& /* qos2 */)
01210 {
01211   return true;
01212 }
01213 
01214 ACE_INLINE
01215 bool Qos_Helper::changeable(
01216   const DDS::ReaderDataLifecycleQosPolicy& /* qos1 */,
01217   const DDS::ReaderDataLifecycleQosPolicy& /* qos2 */)
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     // the caller can get the default before calling this
01333     // method if it wants to.
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   // Some members in the DataWriterQos are not contained
01354   // in the TopicQos. The caller needs initialize them.
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 } // namespace DCPS
01373 } // namespace OpenDDS
01374 
01375 OPENDDS_END_VERSIONED_NAMESPACE_DECL
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines

Generated on 10 Aug 2018 for OpenDDS by  doxygen 1.6.1