LCOV - code coverage report
Current view: top level - DCPS/XTypes - TypeObject.cpp (source / functions) Hit Total Coverage
Test: coverage.info Lines: 1164 2853 40.8 %
Date: 2023-04-30 01:32:43 Functions: 199 442 45.0 %

          Line data    Source code
       1             : /*
       2             :  * Distributed under the OpenDDS License.
       3             :  * See: http://www.opendds.org/license.html
       4             :  */
       5             : 
       6             : #include "DCPS/DdsDcps_pch.h" //Only the _pch include should start with DCPS/
       7             : #include "TypeObject.h"
       8             : 
       9             : 
      10             : #include "dds/DCPS/debug.h"
      11             : #include "dds/DCPS/Hash.h"
      12             : #include "dds/DCPS/Message_Block_Ptr.h"
      13             : #include "dds/DCPS/SafetyProfileStreams.h"
      14             : 
      15             : #include <ace/OS_NS_string.h>
      16             : 
      17             : #include <cstring>
      18             : 
      19             : OPENDDS_BEGIN_VERSIONED_NAMESPACE_DECL
      20             : 
      21             : namespace OpenDDS {
      22             : namespace XTypes {
      23             : 
      24             : using DCPS::Encoding;
      25             : using DCPS::serialized_size;
      26             : 
      27         862 : const Encoding& get_typeobject_encoding()
      28             : {
      29         862 :   static const Encoding encoding(Encoding::KIND_XCDR2, DCPS::ENDIAN_LITTLE);
      30         862 :   return encoding;
      31             : }
      32             : 
      33           0 : DCPS::String equivalence_hash_to_string(const EquivalenceHash& equivalence_hash)
      34             : {
      35           0 :   return DCPS::to_dds_string(&equivalence_hash[0], sizeof equivalence_hash);
      36             : }
      37             : 
      38         216 : MinimalMemberDetail::MinimalMemberDetail(const OPENDDS_STRING& name)
      39             : {
      40             :   unsigned char result[16];
      41         216 :   DCPS::MD5Hash(result, name.c_str(), name.size());
      42             : 
      43         216 :   std::memcpy(name_hash, result, sizeof name_hash);
      44         216 : }
      45             : 
      46             : #ifdef min
      47             : #undef min
      48             : #endif
      49             : 
      50             : #ifdef max
      51             : #undef max
      52             : #endif
      53             : 
      54           0 : AppliedBuiltinMemberAnnotations::AppliedBuiltinMemberAnnotations(const Optional<DCPS::String>& a_unit,
      55             :                                                                  const Optional<AnnotationParameterValue>& a_min,
      56             :                                                                  const Optional<AnnotationParameterValue>& a_max,
      57           0 :                                                                  const Optional<DCPS::String>& a_hash_id)
      58           0 :   : unit(a_unit)
      59           0 :   , min(a_min)
      60           0 :   , max(a_max)
      61           0 :   , hash_id(a_hash_id)
      62           0 : {}
      63             : 
      64       42930 : TypeIdentifier::TypeIdentifier(ACE_CDR::Octet kind)
      65       42930 :   : kind_(kind)
      66       42930 :   , active_(0)
      67             : {
      68       42930 :   activate();
      69       42930 : }
      70             : 
      71      162710 : void TypeIdentifier::activate(const TypeIdentifier* other)
      72             : {
      73             : #define OPENDDS_BRANCH_ACTIVATE(T, N) \
      74             :   active_ = new(N ## _) T();          \
      75             :   if (other) N() = other->N();        \
      76             :   break
      77             : 
      78      162710 :   switch (kind_) {
      79        1903 :   case TI_STRING8_SMALL:
      80             :   case TI_STRING16_SMALL:
      81        3806 :     OPENDDS_BRANCH_ACTIVATE(StringSTypeDefn, string_sdefn);
      82         459 :   case TI_STRING8_LARGE:
      83             :   case TI_STRING16_LARGE:
      84         918 :     OPENDDS_BRANCH_ACTIVATE(StringLTypeDefn, string_ldefn);
      85        2681 :   case TI_PLAIN_SEQUENCE_SMALL:
      86        5362 :     OPENDDS_BRANCH_ACTIVATE(PlainSequenceSElemDefn, seq_sdefn);
      87          48 :   case TI_PLAIN_SEQUENCE_LARGE:
      88          96 :     OPENDDS_BRANCH_ACTIVATE(PlainSequenceLElemDefn, seq_ldefn);
      89        1350 :   case TI_PLAIN_ARRAY_SMALL:
      90        2700 :     OPENDDS_BRANCH_ACTIVATE(PlainArraySElemDefn, array_sdefn);
      91          30 :   case TI_PLAIN_ARRAY_LARGE:
      92          60 :     OPENDDS_BRANCH_ACTIVATE(PlainArrayLElemDefn, array_ldefn);
      93          26 :   case TI_PLAIN_MAP_SMALL:
      94          52 :     OPENDDS_BRANCH_ACTIVATE(PlainMapSTypeDefn, map_sdefn);
      95          74 :   case TI_PLAIN_MAP_LARGE:
      96         148 :     OPENDDS_BRANCH_ACTIVATE(PlainMapLTypeDefn, map_ldefn);
      97         883 :   case TI_STRONGLY_CONNECTED_COMPONENT:
      98        1766 :     OPENDDS_BRANCH_ACTIVATE(StronglyConnectedComponentId, sc_component_id);
      99       22039 :   case EK_COMPLETE:
     100             :   case EK_MINIMAL:
     101       22039 :     active_ = equivalence_hash_;
     102       22039 :     if (other) {
     103       21022 :       std::memcpy(equivalence_hash(), other->equivalence_hash(), sizeof(EquivalenceHash));
     104             :     }
     105       22039 :     break;
     106      133217 :   case TK_NONE:
     107             :   case TK_BOOLEAN:
     108             :   case TK_BYTE:
     109             :   case TK_INT16:
     110             :   case TK_INT32:
     111             :   case TK_INT64:
     112             :   case TK_UINT16:
     113             :   case TK_UINT32:
     114             :   case TK_UINT64:
     115             :   case TK_FLOAT32:
     116             :   case TK_FLOAT64:
     117             :   case TK_FLOAT128:
     118             :   case TK_INT8:
     119             :   case TK_UINT8:
     120             :   case TK_CHAR8:
     121             :   case TK_CHAR16:
     122      133217 :     break; // no-op, no member selected
     123           0 :   default:
     124           0 :     OPENDDS_BRANCH_ACTIVATE(ExtendedTypeDefn, extended_defn);
     125             :   }
     126      162710 : }
     127             : 
     128      111610 : TypeIdentifier::TypeIdentifier(const TypeIdentifier& other)
     129      111610 :   : kind_(other.kind_)
     130      111610 :   , active_(0)
     131             : {
     132      111610 :   activate(&other);
     133      111610 : }
     134             : 
     135      162710 : void TypeIdentifier::reset()
     136             : {
     137      162710 :   if (!active_) {
     138      133169 :     return;
     139             :   }
     140             : #define OPENDDS_BRANCH_RESET(T) static_cast<T*>(active_)->~T(); break
     141       29541 :   switch (kind_) {
     142        1903 :   case TI_STRING8_SMALL:
     143             :   case TI_STRING16_SMALL:
     144        1903 :     OPENDDS_BRANCH_RESET(StringSTypeDefn);
     145         459 :   case TI_STRING8_LARGE:
     146             :   case TI_STRING16_LARGE:
     147         459 :     OPENDDS_BRANCH_RESET(StringLTypeDefn);
     148        2681 :   case TI_PLAIN_SEQUENCE_SMALL:
     149        2681 :     OPENDDS_BRANCH_RESET(PlainSequenceSElemDefn);
     150          48 :   case TI_PLAIN_SEQUENCE_LARGE:
     151          48 :     OPENDDS_BRANCH_RESET(PlainSequenceLElemDefn);
     152        1350 :   case TI_PLAIN_ARRAY_SMALL:
     153        1350 :     OPENDDS_BRANCH_RESET(PlainArraySElemDefn);
     154          30 :   case TI_PLAIN_ARRAY_LARGE:
     155          30 :     OPENDDS_BRANCH_RESET(PlainArrayLElemDefn);
     156          26 :   case TI_PLAIN_MAP_SMALL:
     157          26 :     OPENDDS_BRANCH_RESET(PlainMapSTypeDefn);
     158          74 :   case TI_PLAIN_MAP_LARGE:
     159          74 :     OPENDDS_BRANCH_RESET(PlainMapLTypeDefn);
     160         883 :   case TI_STRONGLY_CONNECTED_COMPONENT:
     161         883 :     OPENDDS_BRANCH_RESET(StronglyConnectedComponentId);
     162       22039 :   case EK_COMPLETE:
     163             :   case EK_MINIMAL:
     164       22039 :     break; // no-op, data is just an array of octets
     165          48 :   case TK_NONE:
     166             :   case TK_BOOLEAN:
     167             :   case TK_BYTE:
     168             :   case TK_INT16:
     169             :   case TK_INT32:
     170             :   case TK_INT64:
     171             :   case TK_UINT16:
     172             :   case TK_UINT32:
     173             :   case TK_UINT64:
     174             :   case TK_FLOAT32:
     175             :   case TK_FLOAT64:
     176             :   case TK_FLOAT128:
     177             :   case TK_INT8:
     178             :   case TK_UINT8:
     179             :   case TK_CHAR8:
     180             :   case TK_CHAR16:
     181          48 :     break; // no-op, no member selected
     182           0 :   default:
     183           0 :     OPENDDS_BRANCH_RESET(ExtendedTypeDefn);
     184             :   }
     185             : }
     186             : 
     187        7717 : TypeIdentifier& TypeIdentifier::operator=(const TypeIdentifier& other)
     188             : {
     189        7717 :   if (&other == this) {
     190           0 :     return *this;
     191             :   }
     192        7717 :   reset();
     193        7717 :   kind_ = other.kind_;
     194        7717 :   activate(&other);
     195        7717 :   return *this;
     196             : }
     197             : 
     198           0 : TypeIdentifier::TypeIdentifier(ACE_CDR::Octet k, const StringSTypeDefn& sdefn)
     199           0 :   : kind_(k)
     200             : {
     201           0 :   activate();
     202           0 :   string_sdefn() = sdefn;
     203           0 : }
     204             : 
     205           0 : TypeIdentifier::TypeIdentifier(ACE_CDR::Octet k, const StringLTypeDefn& ldefn)
     206           0 :   : kind_(k)
     207             : {
     208           0 :   activate();
     209           0 :   string_ldefn() = ldefn;
     210           0 : }
     211             : 
     212           0 : TypeIdentifier::TypeIdentifier(ACE_CDR::Octet k, const PlainSequenceSElemDefn& sdefn)
     213           0 :   : kind_(k)
     214             : {
     215           0 :   activate();
     216           0 :   seq_sdefn() = sdefn;
     217           0 : }
     218             : 
     219           0 : TypeIdentifier::TypeIdentifier(ACE_CDR::Octet k, const PlainSequenceLElemDefn& ldefn)
     220           0 :   : kind_(k)
     221             : {
     222           0 :   activate();
     223           0 :   seq_ldefn() = ldefn;
     224           0 : }
     225             : 
     226           0 : TypeIdentifier::TypeIdentifier(ACE_CDR::Octet k, const PlainArraySElemDefn& sdefn)
     227           0 :   : kind_(k)
     228             : {
     229           0 :   activate();
     230           0 :   array_sdefn() = sdefn;
     231           0 : }
     232             : 
     233           0 : TypeIdentifier::TypeIdentifier(ACE_CDR::Octet k, const PlainArrayLElemDefn& ldefn)
     234           0 :   : kind_(k)
     235             : {
     236           0 :   activate();
     237           0 :   array_ldefn() = ldefn;
     238           0 : }
     239             : 
     240         422 : TypeIdentifier::TypeIdentifier(ACE_CDR::Octet k, const EquivalenceHashWrapper& eh)
     241         422 :   : kind_(k)
     242             : {
     243         422 :   activate();
     244         422 :   std::memcpy(equivalence_hash(), eh.eh_, sizeof eh.eh_);
     245         422 : }
     246             : 
     247          31 : TypeIdentifier::TypeIdentifier(ACE_CDR::Octet k, const StronglyConnectedComponentId& id)
     248          31 :   : kind_(k)
     249             : {
     250          31 :   activate();
     251          31 :   sc_component_id() = id;
     252          31 : }
     253             : 
     254           2 : TypeIdentifier makeTypeIdentifier(const TypeObject& type_object, const DCPS::Encoding* encoding_option)
     255             : {
     256           2 :   OPENDDS_ASSERT(type_object.kind == EK_MINIMAL || type_object.kind == EK_COMPLETE);
     257             : 
     258           2 :   const Encoding& encoding = encoding_option ? *encoding_option : get_typeobject_encoding();
     259           2 :   size_t size = serialized_size(encoding, type_object);
     260           2 :   ACE_Message_Block buff(size);
     261           2 :   DCPS::Serializer ser(&buff, encoding);
     262           2 :   ser << type_object;
     263             : 
     264             :   unsigned char result[16];
     265           2 :   DCPS::MD5Hash(result, buff.rd_ptr(), buff.length());
     266             : 
     267             :   // First 14 bytes of MD5 of the serialized TypeObject using XCDR
     268             :   // version 2 with Little Endian encoding
     269           2 :   TypeIdentifier ti(type_object.kind);
     270           2 :   std::memcpy(ti.equivalence_hash(), result, sizeof(EquivalenceHash));
     271             : 
     272           4 :   return ti;
     273           2 : }
     274             : 
     275          93 : AnnotationParameterValue::AnnotationParameterValue(ACE_CDR::Octet kind)
     276          93 :   : kind_(kind)
     277          93 :   , active_(0)
     278             : {
     279          93 :   activate();
     280          93 : }
     281             : 
     282           0 : AnnotationParameterValue::AnnotationParameterValue(const AnnotationParameterValue& other)
     283           0 :   : kind_(other.kind_)
     284           0 :   , active_(0)
     285             : {
     286           0 :   activate(&other);
     287           0 : }
     288             : 
     289           6 : AnnotationParameterValue& AnnotationParameterValue::operator=(const AnnotationParameterValue& other)
     290             : {
     291           6 :   if (&other == this) {
     292           0 :     return *this;
     293             :   }
     294           6 :   reset();
     295           6 :   kind_ = other.kind_;
     296           6 :   activate(&other);
     297           6 :   return *this;
     298             : }
     299             : 
     300          99 : void AnnotationParameterValue::activate(const AnnotationParameterValue* other)
     301             : {
     302             : #define OPENDDS_BRANCH_ACTIVATE(T, N) \
     303             :   active_ = new(N ## _) T();          \
     304             :   if (other) N() = other->N();        \
     305             :   break
     306             : 
     307          99 :   switch (kind_) {
     308          12 :   case TK_NONE:
     309          12 :     break; // no-op, no member selected
     310          17 :   case TK_BOOLEAN:
     311          17 :     OPENDDS_BRANCH_ACTIVATE(ACE_CDR::Boolean, boolean_value);
     312           4 :   case TK_BYTE:
     313           4 :     OPENDDS_BRANCH_ACTIVATE(ACE_CDR::Octet, byte_value);
     314           4 :   case TK_INT8:
     315           4 :     OPENDDS_BRANCH_ACTIVATE(ACE_CDR::Char, int8_value);
     316           4 :   case TK_UINT8:
     317           4 :     OPENDDS_BRANCH_ACTIVATE(ACE_CDR::Octet, uint8_value);
     318           4 :   case TK_INT16:
     319           4 :     OPENDDS_BRANCH_ACTIVATE(ACE_CDR::Short, int16_value);
     320           4 :   case TK_UINT16:
     321           4 :     OPENDDS_BRANCH_ACTIVATE(ACE_CDR::UShort, uint16_value);
     322           4 :   case TK_INT32:
     323           4 :     OPENDDS_BRANCH_ACTIVATE(ACE_CDR::Long, int32_value);
     324           4 :   case TK_UINT32:
     325           4 :     OPENDDS_BRANCH_ACTIVATE(ACE_CDR::ULong, uint32_value);
     326           4 :   case TK_INT64:
     327           4 :     OPENDDS_BRANCH_ACTIVATE(ACE_CDR::LongLong, int64_value);
     328           4 :   case TK_UINT64:
     329           4 :     OPENDDS_BRANCH_ACTIVATE(ACE_CDR::ULongLong, uint64_value);
     330           4 :   case TK_FLOAT32:
     331           4 :     OPENDDS_BRANCH_ACTIVATE(ACE_CDR::Float, float32_value);
     332           4 :   case TK_FLOAT64:
     333           4 :     OPENDDS_BRANCH_ACTIVATE(ACE_CDR::Double, float64_value);
     334           4 :   case TK_FLOAT128:
     335           4 :     OPENDDS_BRANCH_ACTIVATE(ACE_CDR::LongDouble, float128_value);
     336           4 :   case TK_CHAR8:
     337           4 :     OPENDDS_BRANCH_ACTIVATE(ACE_CDR::Char, char_value);
     338           4 :   case TK_CHAR16:
     339           4 :     OPENDDS_BRANCH_ACTIVATE(ACE_CDR::WChar, wchar_value);
     340           4 :   case TK_ENUM:
     341           4 :     OPENDDS_BRANCH_ACTIVATE(ACE_CDR::Long, enumerated_value);
     342           4 :   case TK_STRING8:
     343           8 :     OPENDDS_BRANCH_ACTIVATE(OPENDDS_STRING, string8_value);
     344           6 :   case TK_STRING16:
     345          12 :     OPENDDS_BRANCH_ACTIVATE(OPENDDS_WSTRING, string16_value);
     346           0 :   default:
     347           0 :     OPENDDS_BRANCH_ACTIVATE(ExtendedAnnotationParameterValue, extended_value);
     348             :   }
     349          99 : }
     350             : 
     351          99 : void AnnotationParameterValue::reset()
     352             : {
     353             :   using DCPS::String;
     354             :   using DCPS::WString;
     355             : 
     356          99 :   if (!active_) {
     357          12 :     return;
     358             :   }
     359             :   #define OPENDDS_BRANCH_RESET(T) static_cast<T*>(active_)->~T(); break
     360          87 :   switch (kind_) {
     361           0 :   case TK_NONE:
     362           0 :     break; // no-op, no member selected
     363          77 :   case TK_BOOLEAN:
     364             :   case TK_BYTE:
     365             :   case TK_INT8:
     366             :   case TK_UINT8:
     367             :   case TK_INT16:
     368             :   case TK_UINT16:
     369             :   case TK_INT32:
     370             :   case TK_UINT32:
     371             :   case TK_INT64:
     372             :   case TK_UINT64:
     373             :   case TK_FLOAT32:
     374             :   case TK_FLOAT64:
     375             :   case TK_FLOAT128:
     376             :   case TK_CHAR8:
     377             :   case TK_CHAR16:
     378             :   case TK_ENUM:
     379          77 :     break; // primitive type, no destructor.
     380           4 :   case TK_STRING8:
     381           4 :     OPENDDS_BRANCH_RESET(String);
     382           6 :   case TK_STRING16:
     383           6 :     OPENDDS_BRANCH_RESET(WString);
     384           0 :   default:
     385           0 :     OPENDDS_BRANCH_RESET(ExtendedAnnotationParameterValue);
     386             :   }
     387             : }
     388             : 
     389           0 : ACE_CDR::ULong hash_member_name_to_id(const OPENDDS_STRING& name)
     390             : {
     391             :   ACE_CDR::ULong name_hash;
     392             : 
     393             :   unsigned char result[16];
     394           0 :   DCPS::MD5Hash(result, name.c_str(), name.size());
     395             : 
     396           0 :   std::memcpy(&name_hash, result, sizeof name_hash);
     397           0 :   return name_hash & DCPS::Serializer::MEMBER_ID_MASK;
     398             : }
     399             : 
     400           5 : void hash_member_name(NameHash& name_hash, const OPENDDS_STRING& name)
     401             : {
     402             :   unsigned char result[16];
     403           5 :   DCPS::MD5Hash(result, name.c_str(), name.size());
     404             : 
     405           5 :   std::memcpy(&name_hash, result, sizeof name_hash);
     406           5 : }
     407             : 
     408         618 : bool is_fully_descriptive(const TypeIdentifier& ti)
     409             : {
     410         618 :   switch (ti.kind()) {
     411         349 :   case TK_BOOLEAN:
     412             :   case TK_BYTE:
     413             :   case TK_INT16:
     414             :   case TK_INT32:
     415             :   case TK_INT64:
     416             :   case TK_UINT16:
     417             :   case TK_UINT32:
     418             :   case TK_UINT64:
     419             :   case TK_FLOAT32:
     420             :   case TK_FLOAT64:
     421             :   case TK_FLOAT128:
     422             :   case TK_INT8:
     423             :   case TK_UINT8:
     424             :   case TK_CHAR8:
     425             :   case TK_CHAR16:
     426             :   case TI_STRING8_SMALL:
     427             :   case TI_STRING8_LARGE:
     428             :   case TI_STRING16_SMALL:
     429             :   case TI_STRING16_LARGE:
     430         349 :     return true;
     431          65 :   case TI_PLAIN_SEQUENCE_SMALL:
     432          65 :     return ti.seq_sdefn().header.equiv_kind == EK_BOTH;
     433           0 :   case TI_PLAIN_SEQUENCE_LARGE:
     434           0 :     return ti.seq_ldefn().header.equiv_kind == EK_BOTH;
     435          73 :   case TI_PLAIN_ARRAY_SMALL:
     436          73 :     return ti.array_sdefn().header.equiv_kind == EK_BOTH;
     437           0 :   case TI_PLAIN_ARRAY_LARGE:
     438           0 :     return ti.array_ldefn().header.equiv_kind == EK_BOTH;
     439           0 :   case TI_PLAIN_MAP_SMALL:
     440           0 :     return ti.map_sdefn().header.equiv_kind == EK_BOTH;
     441           0 :   case TI_PLAIN_MAP_LARGE:
     442           0 :     return ti.map_ldefn().header.equiv_kind == EK_BOTH;
     443             :   }
     444         131 :   return false;
     445             : }
     446             : 
     447         145 : bool is_plain_collection(const TypeIdentifier& ti)
     448             : {
     449         145 :   switch (ti.kind()) {
     450          14 :   case TI_PLAIN_SEQUENCE_SMALL:
     451             :   case TI_PLAIN_SEQUENCE_LARGE:
     452             :   case TI_PLAIN_ARRAY_SMALL:
     453             :   case TI_PLAIN_ARRAY_LARGE:
     454             :   case TI_PLAIN_MAP_SMALL:
     455             :   case TI_PLAIN_MAP_LARGE:
     456          14 :     return true;
     457             :   }
     458         131 :   return false;
     459             : }
     460             : 
     461         612 : bool has_type_object(const TypeIdentifier& ti)
     462             : {
     463         742 :   return !is_fully_descriptive(ti) && !is_plain_collection(ti) &&
     464         742 :     ti.kind() != TK_NONE;
     465             : }
     466             : 
     467             : namespace {
     468             : template <typename T>
     469             : void compute_dependencies(const TypeMap& type_map,
     470             :                           const Sequence<T>& type,
     471             :                           OPENDDS_SET(TypeIdentifier)& dependencies);
     472             : 
     473          98 : void compute_dependencies(const TypeMap& type_map,
     474             :                           const CommonAliasBody& type,
     475             :                           OPENDDS_SET(TypeIdentifier)& dependencies)
     476             : {
     477          98 :   compute_dependencies(type_map, type.related_type, dependencies);
     478          98 : }
     479             : 
     480          49 : void compute_dependencies(const TypeMap& type_map,
     481             :                           const MinimalAliasBody& type,
     482             :                           OPENDDS_SET(TypeIdentifier)& dependencies)
     483             : {
     484          49 :   compute_dependencies(type_map, type.common, dependencies);
     485          49 : }
     486             : 
     487          49 : void compute_dependencies(const TypeMap& type_map,
     488             :                           const MinimalAliasType& type,
     489             :                           OPENDDS_SET(TypeIdentifier)& dependencies)
     490             : {
     491          49 :   compute_dependencies(type_map, type.body, dependencies);
     492          49 : }
     493             : 
     494           0 : void compute_dependencies(const TypeMap& type_map,
     495             :                           const AppliedAnnotation& ann,
     496             :                           OPENDDS_SET(TypeIdentifier)& dependencies)
     497             : {
     498           0 :   compute_dependencies(type_map, ann.annotation_typeid, dependencies);
     499           0 : }
     500             : 
     501         737 : void compute_dependencies(const TypeMap& type_map,
     502             :                           const Optional<AppliedAnnotationSeq>& ann_seq,
     503             :                           OPENDDS_SET(TypeIdentifier)& dependencies)
     504             : {
     505         737 :   if (ann_seq) {
     506           0 :     compute_dependencies(type_map, ann_seq.value(), dependencies);
     507             :   }
     508         737 : }
     509             : 
     510         207 : void compute_dependencies(const TypeMap& type_map,
     511             :                           const CompleteTypeDetail& type_detail,
     512             :                           OPENDDS_SET(TypeIdentifier)& dependencies)
     513             : {
     514         207 :   compute_dependencies(type_map, type_detail.ann_custom, dependencies);
     515         207 : }
     516             : 
     517          49 : void compute_dependencies(const TypeMap& type_map,
     518             :                           const CompleteAliasHeader& header,
     519             :                           OPENDDS_SET(TypeIdentifier)& dependencies)
     520             : {
     521          49 :   compute_dependencies(type_map, header.detail, dependencies);
     522          49 : }
     523             : 
     524          49 : void compute_dependencies(const TypeMap& type_map,
     525             :                           const CompleteAliasBody& body,
     526             :                           OPENDDS_SET(TypeIdentifier)& dependencies)
     527             : {
     528          49 :   compute_dependencies(type_map, body.common, dependencies);
     529          49 :   compute_dependencies(type_map, body.ann_custom, dependencies);
     530          49 : }
     531             : 
     532          49 : void compute_dependencies(const TypeMap& type_map,
     533             :                           const CompleteAliasType& type,
     534             :                           OPENDDS_SET(TypeIdentifier)& dependencies)
     535             : {
     536          49 :   compute_dependencies(type_map, type.header, dependencies);
     537          49 :   compute_dependencies(type_map, type.body, dependencies);
     538          49 : }
     539             : 
     540           0 : void compute_dependencies(const TypeMap& type_map,
     541             :                           const CommonAnnotationParameter& type,
     542             :                           OPENDDS_SET(TypeIdentifier)& dependencies)
     543             : {
     544           0 :   compute_dependencies(type_map, type.member_type_id, dependencies);
     545           0 : }
     546             : 
     547           0 : void compute_dependencies(const TypeMap& type_map,
     548             :                           const MinimalAnnotationParameter& type,
     549             :                           OPENDDS_SET(TypeIdentifier)& dependencies)
     550             : {
     551           0 :   compute_dependencies(type_map, type.common, dependencies);
     552           0 : }
     553             : 
     554           0 : void compute_dependencies(const TypeMap& type_map,
     555             :                           const MinimalAnnotationType& type,
     556             :                           OPENDDS_SET(TypeIdentifier)& dependencies)
     557             : {
     558           0 :   compute_dependencies(type_map, type.member_seq, dependencies);
     559           0 : }
     560             : 
     561           0 : void compute_dependencies(const TypeMap& type_map,
     562             :                           const CompleteAnnotationParameter& type,
     563             :                           OPENDDS_SET(TypeIdentifier)& dependencies)
     564             : {
     565           0 :   compute_dependencies(type_map, type.common, dependencies);
     566           0 : }
     567             : 
     568           0 : void compute_dependencies(const TypeMap& type_map,
     569             :                           const CompleteAnnotationType& type,
     570             :                           OPENDDS_SET(TypeIdentifier)& dependencies)
     571             : {
     572           0 :   compute_dependencies(type_map, type.member_seq, dependencies);
     573           0 : }
     574             : 
     575         110 : void compute_dependencies(const TypeMap& type_map,
     576             :                           const MinimalStructHeader& type,
     577             :                           OPENDDS_SET(TypeIdentifier)& dependencies)
     578             : {
     579         110 :   compute_dependencies(type_map, type.base_type, dependencies);
     580         110 : }
     581             : 
     582         566 : void compute_dependencies(const TypeMap& type_map,
     583             :                           const CommonStructMember& type,
     584             :                           OPENDDS_SET(TypeIdentifier)& dependencies)
     585             : {
     586         566 :   compute_dependencies(type_map, type.member_type_id, dependencies);
     587         566 : }
     588             : 
     589         283 : void compute_dependencies(const TypeMap& type_map,
     590             :                           const MinimalStructMember& type,
     591             :                           OPENDDS_SET(TypeIdentifier)& dependencies)
     592             : {
     593         283 :   compute_dependencies(type_map, type.common, dependencies);
     594         283 : }
     595             : 
     596         110 : void compute_dependencies(const TypeMap& type_map,
     597             :                           const MinimalStructType& type,
     598             :                           OPENDDS_SET(TypeIdentifier)& dependencies)
     599             : {
     600         110 :   compute_dependencies(type_map, type.header, dependencies);
     601         110 :   compute_dependencies(type_map, type.member_seq, dependencies);
     602         110 : }
     603             : 
     604         110 : void compute_dependencies(const TypeMap& type_map,
     605             :                           const CompleteStructHeader& header,
     606             :                           OPENDDS_SET(TypeIdentifier)& dependencies)
     607             : {
     608         110 :   compute_dependencies(type_map, header.base_type, dependencies);
     609         110 :   compute_dependencies(type_map, header.detail, dependencies);
     610         110 : }
     611             : 
     612         447 : void compute_dependencies(const TypeMap& type_map,
     613             :                           const CompleteMemberDetail& detail,
     614             :                           OPENDDS_SET(TypeIdentifier)& dependencies)
     615             : {
     616         447 :   compute_dependencies(type_map, detail.ann_custom, dependencies);
     617         447 : }
     618             : 
     619         283 : void compute_dependencies(const TypeMap& type_map,
     620             :                           const CompleteStructMember& member,
     621             :                           OPENDDS_SET(TypeIdentifier)& dependencies)
     622             : {
     623         283 :   compute_dependencies(type_map, member.common, dependencies);
     624         283 :   compute_dependencies(type_map, member.detail, dependencies);
     625         283 : }
     626             : 
     627         110 : void compute_dependencies(const TypeMap& type_map,
     628             :                           const CompleteStructType& type,
     629             :                           OPENDDS_SET(TypeIdentifier)& dependencies)
     630             : {
     631         110 :   compute_dependencies(type_map, type.header, dependencies);
     632         110 :   compute_dependencies(type_map, type.member_seq, dependencies);
     633         110 : }
     634             : 
     635          68 : void compute_dependencies(const TypeMap& type_map,
     636             :                           const CommonDiscriminatorMember& type,
     637             :                           OPENDDS_SET(TypeIdentifier)& dependencies)
     638             : {
     639          68 :   compute_dependencies(type_map, type.type_id, dependencies);
     640          68 : }
     641             : 
     642          34 : void compute_dependencies(const TypeMap& type_map,
     643             :                           const MinimalDiscriminatorMember& type,
     644             :                           OPENDDS_SET(TypeIdentifier)& dependencies)
     645             : {
     646          34 :   compute_dependencies(type_map, type.common, dependencies);
     647          34 : }
     648             : 
     649         198 : void compute_dependencies(const TypeMap& type_map,
     650             :                           const CommonUnionMember& type,
     651             :                           OPENDDS_SET(TypeIdentifier)& dependencies)
     652             : {
     653         198 :   compute_dependencies(type_map, type.type_id, dependencies);
     654         198 : }
     655             : 
     656          99 : void compute_dependencies(const TypeMap& type_map,
     657             :                           const MinimalUnionMember& type,
     658             :                           OPENDDS_SET(TypeIdentifier)& dependencies)
     659             : {
     660          99 :   compute_dependencies(type_map, type.common, dependencies);
     661          99 : }
     662             : 
     663          34 : void compute_dependencies(const TypeMap& type_map,
     664             :                           const MinimalUnionType& type,
     665             :                           OPENDDS_SET(TypeIdentifier)& dependencies)
     666             : {
     667          34 :   compute_dependencies(type_map, type.discriminator, dependencies);
     668          34 :   compute_dependencies(type_map, type.member_seq, dependencies);
     669          34 : }
     670             : 
     671          34 : void compute_dependencies(const TypeMap& type_map,
     672             :                           const CompleteUnionHeader& header,
     673             :                           OPENDDS_SET(TypeIdentifier)& dependencies)
     674             : {
     675          34 :   compute_dependencies(type_map, header.detail, dependencies);
     676          34 : }
     677             : 
     678          34 : void compute_dependencies(const TypeMap& type_map,
     679             :                           const CompleteDiscriminatorMember& type,
     680             :                           OPENDDS_SET(TypeIdentifier)& dependencies)
     681             : {
     682          34 :   compute_dependencies(type_map, type.common, dependencies);
     683          34 :   compute_dependencies(type_map, type.ann_custom, dependencies);
     684          34 : }
     685             : 
     686          99 : void compute_dependencies(const TypeMap& type_map,
     687             :                           const CompleteUnionMember& type,
     688             :                           OPENDDS_SET(TypeIdentifier)& dependencies)
     689             : {
     690          99 :   compute_dependencies(type_map, type.common, dependencies);
     691          99 :   compute_dependencies(type_map, type.detail, dependencies);
     692          99 : }
     693             : 
     694          34 : void compute_dependencies(const TypeMap& type_map,
     695             :                           const CompleteUnionType& type,
     696             :                           OPENDDS_SET(TypeIdentifier)& dependencies)
     697             : {
     698          34 :   compute_dependencies(type_map, type.header, dependencies);
     699          34 :   compute_dependencies(type_map, type.discriminator, dependencies);
     700          34 :   compute_dependencies(type_map, type.member_seq, dependencies);
     701          34 : }
     702             : 
     703           0 : void compute_dependencies(const TypeMap&,
     704             :                           const MinimalBitsetType&,
     705             :                           OPENDDS_SET(TypeIdentifier)&)
     706             : {
     707             :   // Doesn't have any dependencies.
     708           0 : }
     709             : 
     710           0 : void compute_dependencies(const TypeMap& type_map,
     711             :                           const CompleteBitsetHeader& header,
     712             :                           OPENDDS_SET(TypeIdentifier)& dependencies)
     713             : {
     714           0 :   compute_dependencies(type_map, header.detail, dependencies);
     715           0 : }
     716             : 
     717           0 : void compute_dependencies(const TypeMap& type_map,
     718             :                           const CompleteBitfield& field,
     719             :                           OPENDDS_SET(TypeIdentifier)& dependencies)
     720             : {
     721           0 :   compute_dependencies(type_map, field.detail, dependencies);
     722           0 : }
     723             : 
     724           0 : void compute_dependencies(const TypeMap& type_map,
     725             :                           const CompleteBitsetType& type,
     726             :                           OPENDDS_SET(TypeIdentifier)& dependencies)
     727             : {
     728           0 :   compute_dependencies(type_map, type.header, dependencies);
     729           0 :   compute_dependencies(type_map, type.field_seq, dependencies);
     730           0 : }
     731             : 
     732           0 : void compute_dependencies(const TypeMap& type_map,
     733             :                           const CommonCollectionElement& type,
     734             :                           OPENDDS_SET(TypeIdentifier)& dependencies)
     735             : {
     736           0 :   compute_dependencies(type_map, type.type, dependencies);
     737           0 : }
     738             : 
     739           0 : void compute_dependencies(const TypeMap& type_map,
     740             :                           const MinimalCollectionElement& type,
     741             :                           OPENDDS_SET(TypeIdentifier)& dependencies)
     742             : {
     743           0 :   compute_dependencies(type_map, type.common, dependencies);
     744           0 : }
     745             : 
     746           0 : void compute_dependencies(const TypeMap& type_map,
     747             :                           const MinimalSequenceType& type,
     748             :                           OPENDDS_SET(TypeIdentifier)& dependencies)
     749             : {
     750           0 :   compute_dependencies(type_map, type.element, dependencies);
     751           0 : }
     752             : 
     753           0 : void compute_dependencies(const TypeMap& type_map,
     754             :                           const CompleteCollectionHeader& header,
     755             :                           OPENDDS_SET(TypeIdentifier)& dependencies)
     756             : {
     757           0 :   if (header.detail) {
     758           0 :     compute_dependencies(type_map, header.detail.value(), dependencies);
     759             :   }
     760           0 : }
     761             : 
     762           0 : void compute_dependencies(const TypeMap& type_map,
     763             :                           const CompleteElementDetail& detail,
     764             :                           OPENDDS_SET(TypeIdentifier)& dependencies)
     765             : {
     766           0 :   compute_dependencies(type_map, detail.ann_custom, dependencies);
     767           0 : }
     768             : 
     769           0 : void compute_dependencies(const TypeMap& type_map,
     770             :                           const CompleteCollectionElement& element,
     771             :                           OPENDDS_SET(TypeIdentifier)& dependencies)
     772             : {
     773           0 :   compute_dependencies(type_map, element.common, dependencies);
     774           0 :   compute_dependencies(type_map, element.detail, dependencies);
     775           0 : }
     776             : 
     777           0 : void compute_dependencies(const TypeMap& type_map,
     778             :                           const CompleteSequenceType& type,
     779             :                           OPENDDS_SET(TypeIdentifier)& dependencies)
     780             : {
     781           0 :   compute_dependencies(type_map, type.header, dependencies);
     782           0 :   compute_dependencies(type_map, type.element, dependencies);
     783           0 : }
     784             : 
     785           0 : void compute_dependencies(const TypeMap& type_map,
     786             :                           const MinimalArrayType& type,
     787             :                           OPENDDS_SET(TypeIdentifier)& dependencies)
     788             : {
     789           0 :   compute_dependencies(type_map, type.element, dependencies);
     790           0 : }
     791             : 
     792           0 : void compute_dependencies(const TypeMap& type_map,
     793             :                           const CompleteArrayHeader& header,
     794             :                           OPENDDS_SET(TypeIdentifier)& dependencies)
     795             : {
     796           0 :   compute_dependencies(type_map, header.detail, dependencies);
     797           0 : }
     798             : 
     799           0 : void compute_dependencies(const TypeMap& type_map,
     800             :                           const CompleteArrayType& type,
     801             :                           OPENDDS_SET(TypeIdentifier)& dependencies)
     802             : {
     803           0 :   compute_dependencies(type_map, type.header, dependencies);
     804           0 :   compute_dependencies(type_map, type.element, dependencies);
     805           0 : }
     806             : 
     807           0 : void compute_dependencies(const TypeMap& type_map,
     808             :                           const MinimalMapType& type,
     809             :                           OPENDDS_SET(TypeIdentifier)& dependencies)
     810             : {
     811           0 :   compute_dependencies(type_map, type.key, dependencies);
     812           0 :   compute_dependencies(type_map, type.element, dependencies);
     813           0 : }
     814             : 
     815           0 : void compute_dependencies(const TypeMap& type_map,
     816             :                           const CompleteMapType& type,
     817             :                           OPENDDS_SET(TypeIdentifier)& dependencies)
     818             : {
     819           0 :   compute_dependencies(type_map, type.header, dependencies);
     820           0 :   compute_dependencies(type_map, type.key, dependencies);
     821           0 :   compute_dependencies(type_map, type.element, dependencies);
     822           0 : }
     823             : 
     824          14 : void compute_dependencies(const TypeMap&,
     825             :                           const MinimalEnumeratedType&,
     826             :                           OPENDDS_SET(TypeIdentifier)&)
     827             : {
     828             :   // Doesn't have any dependencies.
     829          14 : }
     830             : 
     831          14 : void compute_dependencies(const TypeMap& type_map,
     832             :                           const CompleteEnumeratedHeader& header,
     833             :                           OPENDDS_SET(TypeIdentifier)& dependencies)
     834             : {
     835          14 :   compute_dependencies(type_map, header.detail, dependencies);
     836          14 : }
     837             : 
     838          65 : void compute_dependencies(const TypeMap& type_map,
     839             :                           const CompleteEnumeratedLiteral& literal,
     840             :                           OPENDDS_SET(TypeIdentifier)& dependencies)
     841             : {
     842          65 :   compute_dependencies(type_map, literal.detail, dependencies);
     843          65 : }
     844             : 
     845          14 : void compute_dependencies(const TypeMap& type_map,
     846             :                           const CompleteEnumeratedType& type,
     847             :                           OPENDDS_SET(TypeIdentifier)& dependencies)
     848             : {
     849          14 :   compute_dependencies(type_map, type.header, dependencies);
     850          14 :   compute_dependencies(type_map, type.literal_seq, dependencies);
     851          14 : }
     852             : 
     853           0 : void compute_dependencies(const TypeMap&,
     854             :                           const MinimalBitmaskType&,
     855             :                           OPENDDS_SET(TypeIdentifier)&)
     856             : {
     857             :   // Doesn't have any dependencies.
     858           0 : }
     859             : 
     860           0 : void compute_dependencies(const TypeMap& type_map,
     861             :                           const CompleteBitflag& bitflag,
     862             :                           OPENDDS_SET(TypeIdentifier)& dependencies)
     863             : {
     864           0 :   compute_dependencies(type_map, bitflag.detail, dependencies);
     865           0 : }
     866             : 
     867           0 : void compute_dependencies(const TypeMap& type_map,
     868             :                           const CompleteBitmaskType& type,
     869             :                           OPENDDS_SET(TypeIdentifier)& dependencies)
     870             : {
     871           0 :   compute_dependencies(type_map, type.header, dependencies);
     872           0 :   compute_dependencies(type_map, type.flag_seq, dependencies);
     873           0 : }
     874             : 
     875         207 : void compute_dependencies(const TypeMap& type_map,
     876             :                           const MinimalTypeObject& type_object,
     877             :                           OPENDDS_SET(TypeIdentifier)& dependencies)
     878             : {
     879         207 :   switch (type_object.kind) {
     880          49 :   case TK_ALIAS:
     881          49 :     compute_dependencies(type_map, type_object.alias_type, dependencies);
     882          49 :     break;
     883           0 :   case TK_ANNOTATION:
     884           0 :     compute_dependencies(type_map, type_object.annotation_type, dependencies);
     885           0 :     break;
     886         110 :   case TK_STRUCTURE:
     887         110 :     compute_dependencies(type_map, type_object.struct_type, dependencies);
     888         110 :     break;
     889          34 :   case TK_UNION:
     890          34 :     compute_dependencies(type_map, type_object.union_type, dependencies);
     891          34 :     break;
     892           0 :   case TK_BITSET:
     893           0 :     compute_dependencies(type_map, type_object.bitset_type, dependencies);
     894           0 :     break;
     895           0 :   case TK_SEQUENCE:
     896           0 :     compute_dependencies(type_map, type_object.sequence_type, dependencies);
     897           0 :     break;
     898           0 :   case TK_ARRAY:
     899           0 :     compute_dependencies(type_map, type_object.array_type, dependencies);
     900           0 :     break;
     901           0 :   case TK_MAP:
     902           0 :     compute_dependencies(type_map, type_object.map_type, dependencies);
     903           0 :     break;
     904          14 :   case TK_ENUM:
     905          14 :     compute_dependencies(type_map, type_object.enumerated_type, dependencies);
     906          14 :     break;
     907           0 :   case TK_BITMASK:
     908           0 :     compute_dependencies(type_map, type_object.bitmask_type, dependencies);
     909           0 :     break;
     910             :   }
     911         207 : }
     912             : 
     913         207 : void compute_dependencies(const TypeMap& type_map,
     914             :                           const CompleteTypeObject& type_object,
     915             :                           OPENDDS_SET(TypeIdentifier)& dependencies)
     916             : {
     917         207 :   switch (type_object.kind) {
     918          49 :   case TK_ALIAS:
     919          49 :     compute_dependencies(type_map, type_object.alias_type, dependencies);
     920          49 :     break;
     921           0 :   case TK_ANNOTATION:
     922           0 :     compute_dependencies(type_map, type_object.annotation_type, dependencies);
     923           0 :     break;
     924         110 :   case TK_STRUCTURE:
     925         110 :     compute_dependencies(type_map, type_object.struct_type, dependencies);
     926         110 :     break;
     927          34 :   case TK_UNION:
     928          34 :     compute_dependencies(type_map, type_object.union_type, dependencies);
     929          34 :     break;
     930           0 :   case TK_BITSET:
     931           0 :     compute_dependencies(type_map, type_object.bitset_type, dependencies);
     932           0 :     break;
     933           0 :   case TK_SEQUENCE:
     934           0 :     compute_dependencies(type_map, type_object.sequence_type, dependencies);
     935           0 :     break;
     936           0 :   case TK_ARRAY:
     937           0 :     compute_dependencies(type_map, type_object.array_type, dependencies);
     938           0 :     break;
     939           0 :   case TK_MAP:
     940           0 :     compute_dependencies(type_map, type_object.map_type, dependencies);
     941           0 :     break;
     942          14 :   case TK_ENUM:
     943          14 :     compute_dependencies(type_map, type_object.enumerated_type, dependencies);
     944          14 :     break;
     945           0 :   case TK_BITMASK:
     946           0 :     compute_dependencies(type_map, type_object.bitmask_type, dependencies);
     947           0 :     break;
     948             :   }
     949         207 : }
     950             : 
     951         414 : void compute_dependencies(const TypeMap& type_map,
     952             :                           const TypeObject& type_object,
     953             :                           OPENDDS_SET(TypeIdentifier)& dependencies)
     954             : {
     955         414 :   switch (type_object.kind) {
     956         207 :   case EK_COMPLETE:
     957         207 :     compute_dependencies(type_map, type_object.complete, dependencies);
     958         207 :     break;
     959         207 :   case EK_MINIMAL:
     960         207 :     compute_dependencies(type_map, type_object.minimal, dependencies);
     961         207 :     break;
     962             :   }
     963         414 : }
     964             : 
     965          12 : void compute_dependencies(const TypeMap&,
     966             :                           const StringSTypeDefn&,
     967             :                           OPENDDS_SET(TypeIdentifier)&)
     968             : {
     969             :   // Do nothing.
     970          12 : }
     971             : 
     972           0 : void compute_dependencies(const TypeMap&,
     973             :                           const StringLTypeDefn&,
     974             :                           OPENDDS_SET(TypeIdentifier)&)
     975             : {
     976             :   // Do nothing.
     977           0 : }
     978             : 
     979         136 : void compute_dependencies(const TypeMap&,
     980             :                           const PlainCollectionHeader&,
     981             :                           OPENDDS_SET(TypeIdentifier)&)
     982             : {
     983             :   // Do nothing.
     984         136 : }
     985             : 
     986          64 : void compute_dependencies(const TypeMap& type_map,
     987             :                           const PlainSequenceSElemDefn& type,
     988             :                           OPENDDS_SET(TypeIdentifier)& dependencies)
     989             : {
     990          64 :   compute_dependencies(type_map, type.header, dependencies);
     991          64 :   compute_dependencies(type_map, *type.element_identifier, dependencies);
     992          64 : }
     993             : 
     994           0 : void compute_dependencies(const TypeMap& type_map,
     995             :                           const PlainSequenceLElemDefn& type,
     996             :                           OPENDDS_SET(TypeIdentifier)& dependencies)
     997             : {
     998           0 :   compute_dependencies(type_map, type.header, dependencies);
     999           0 :   compute_dependencies(type_map, *type.element_identifier, dependencies);
    1000           0 : }
    1001             : 
    1002          72 : void compute_dependencies(const TypeMap& type_map,
    1003             :                           const PlainArraySElemDefn& type,
    1004             :                           OPENDDS_SET(TypeIdentifier)& dependencies)
    1005             : {
    1006          72 :   compute_dependencies(type_map, type.header, dependencies);
    1007          72 :   compute_dependencies(type_map, *type.element_identifier, dependencies);
    1008          72 : }
    1009             : 
    1010           0 : void compute_dependencies(const TypeMap& type_map,
    1011             :                           const PlainArrayLElemDefn& type,
    1012             :                           OPENDDS_SET(TypeIdentifier)& dependencies)
    1013             : {
    1014           0 :   compute_dependencies(type_map, type.header, dependencies);
    1015           0 :   compute_dependencies(type_map, *type.element_identifier, dependencies);
    1016           0 : }
    1017             : 
    1018           0 : void compute_dependencies(const TypeMap& type_map,
    1019             :                           const PlainMapSTypeDefn& type,
    1020             :                           OPENDDS_SET(TypeIdentifier)& dependencies)
    1021             : {
    1022           0 :   compute_dependencies(type_map, type.header, dependencies);
    1023           0 :   compute_dependencies(type_map, *type.element_identifier, dependencies);
    1024           0 :   compute_dependencies(type_map, *type.key_identifier, dependencies);
    1025           0 : }
    1026             : 
    1027           0 : void compute_dependencies(const TypeMap& type_map,
    1028             :                           const PlainMapLTypeDefn& type,
    1029             :                           OPENDDS_SET(TypeIdentifier)& dependencies)
    1030             : {
    1031           0 :   compute_dependencies(type_map, type.header, dependencies);
    1032           0 :   compute_dependencies(type_map, *type.element_identifier, dependencies);
    1033           0 :   compute_dependencies(type_map, *type.key_identifier, dependencies);
    1034           0 : }
    1035             : 
    1036           0 : void compute_dependencies(const TypeMap&,
    1037             :                           const StronglyConnectedComponentId&,
    1038             :                           OPENDDS_SET(TypeIdentifier)&)
    1039             : {
    1040             :   // Do nothing.
    1041           0 : }
    1042             : 
    1043             : template <typename T>
    1044         302 : void compute_dependencies(const TypeMap& type_map,
    1045             :                           const Sequence<T>& type,
    1046             :                           OPENDDS_SET(TypeIdentifier)& dependencies)
    1047             : {
    1048        1131 :   for (typename Sequence<T>::const_iterator pos = type.begin(), limit = type.end(); pos != limit; ++pos) {
    1049         829 :     compute_dependencies(type_map, *pos, dependencies);
    1050             :   }
    1051         302 : }
    1052             : 
    1053             : }
    1054             : 
    1055        1446 : void compute_dependencies(const TypeMap& type_map,
    1056             :                           const TypeIdentifier& type_identifier,
    1057             :                           OPENDDS_SET(TypeIdentifier)& dependencies)
    1058             : {
    1059        1446 :   if (dependencies.count(type_identifier) != 0) {
    1060         420 :     return;
    1061             :   }
    1062             : 
    1063        1026 :   dependencies.insert(type_identifier);
    1064             : 
    1065        1026 :   switch (type_identifier.kind()) {
    1066          12 :   case TI_STRING8_SMALL:
    1067             :   case TI_STRING16_SMALL:
    1068          12 :     compute_dependencies(type_map, type_identifier.string_sdefn(), dependencies);
    1069          12 :     break;
    1070           0 :   case TI_STRING8_LARGE:
    1071             :   case TI_STRING16_LARGE:
    1072           0 :     compute_dependencies(type_map, type_identifier.string_ldefn(), dependencies);
    1073           0 :     break;
    1074          64 :   case TI_PLAIN_SEQUENCE_SMALL:
    1075          64 :     compute_dependencies(type_map, type_identifier.seq_sdefn(), dependencies);
    1076          64 :     break;
    1077           0 :   case TI_PLAIN_SEQUENCE_LARGE:
    1078           0 :     compute_dependencies(type_map, type_identifier.seq_ldefn(), dependencies);
    1079           0 :     break;
    1080          72 :   case TI_PLAIN_ARRAY_SMALL:
    1081          72 :     compute_dependencies(type_map, type_identifier.array_sdefn(), dependencies);
    1082          72 :     break;
    1083           0 :   case TI_PLAIN_ARRAY_LARGE:
    1084           0 :     compute_dependencies(type_map, type_identifier.array_ldefn(), dependencies);
    1085           0 :     break;
    1086           0 :   case TI_PLAIN_MAP_SMALL:
    1087           0 :     compute_dependencies(type_map, type_identifier.map_sdefn(), dependencies);
    1088           0 :     break;
    1089           0 :   case TI_PLAIN_MAP_LARGE:
    1090           0 :     compute_dependencies(type_map, type_identifier.map_ldefn(), dependencies);
    1091           0 :     break;
    1092           0 :   case TI_STRONGLY_CONNECTED_COMPONENT:
    1093           0 :     compute_dependencies(type_map, type_identifier.sc_component_id(), dependencies);
    1094           0 :     break;
    1095         414 :   case EK_COMPLETE:
    1096             :   case EK_MINIMAL:
    1097             :     {
    1098         414 :       TypeMap::const_iterator pos = type_map.find(type_identifier);
    1099         414 :       if (pos != type_map.end()) {
    1100         414 :         compute_dependencies(type_map, pos->second, dependencies);
    1101             :       }
    1102         414 :       break;
    1103             :     }
    1104             :   }
    1105             : }
    1106             : 
    1107           0 : bool write_empty_xcdr2_nonfinal(DCPS::Serializer& strm)
    1108             : {
    1109           0 :   size_t size = 0;
    1110           0 :   serialized_size_delimiter(strm.encoding(), size);
    1111           0 :   return strm.write_delimiter(size);
    1112             : }
    1113             : 
    1114          54 : bool read_empty_xcdr2_nonfinal(DCPS::Serializer& strm)
    1115             : {
    1116          54 :   size_t total_size = 0;
    1117          54 :   if (!strm.read_delimiter(total_size)) {
    1118           0 :     return false;
    1119             :   }
    1120          54 :   return strm.skip(total_size);
    1121             : }
    1122             : 
    1123          84 : const char* typekind_to_string(TypeKind tk)
    1124             : {
    1125          84 :   switch (tk) {
    1126           0 :   case TK_NONE:
    1127           0 :     return "none";
    1128           0 :   case TK_BOOLEAN:
    1129           0 :     return "boolean";
    1130           0 :   case TK_BYTE:
    1131           0 :     return "byte";
    1132           0 :   case TK_INT16:
    1133           0 :     return "int16";
    1134           0 :   case TK_INT32:
    1135           0 :     return "int32";
    1136           0 :   case TK_INT64:
    1137           0 :     return "int64";
    1138           0 :   case TK_UINT16:
    1139           0 :     return "uint16";
    1140           0 :   case TK_UINT32:
    1141           0 :     return "uint32";
    1142           0 :   case TK_UINT64:
    1143           0 :     return "uint64";
    1144           0 :   case TK_FLOAT32:
    1145           0 :     return "float32";
    1146           0 :   case TK_FLOAT64:
    1147           0 :     return "float64";
    1148           0 :   case TK_FLOAT128:
    1149           0 :     return "float128";
    1150           0 :   case TK_INT8:
    1151           0 :     return "int8";
    1152           0 :   case TK_UINT8:
    1153           0 :     return "uint8";
    1154           0 :   case TK_CHAR8:
    1155           0 :     return "char8";
    1156           0 :   case TK_CHAR16:
    1157           0 :     return "char16";
    1158           0 :   case TK_STRING8:
    1159           0 :     return "string";
    1160           0 :   case TK_STRING16:
    1161           0 :     return "wstring";
    1162           0 :   case TK_ALIAS:
    1163           0 :     return "alias";
    1164           0 :   case TK_ENUM:
    1165           0 :     return "enum";
    1166           0 :   case TK_BITMASK:
    1167           0 :     return "bitmask";
    1168           0 :   case TK_ANNOTATION:
    1169           0 :     return "annotation";
    1170           0 :   case TK_STRUCTURE:
    1171           0 :     return "structure";
    1172           0 :   case TK_UNION:
    1173           0 :     return "union";
    1174           0 :   case TK_BITSET:
    1175           0 :     return "bitset";
    1176          84 :   case TK_SEQUENCE:
    1177          84 :     return "sequence";
    1178           0 :   case TK_ARRAY:
    1179           0 :     return "array";
    1180           0 :   case TK_MAP:
    1181           0 :     return "map";
    1182           0 :   default:
    1183           0 :     if (DCPS::log_level >= DCPS::LogLevel::Warning) {
    1184           0 :       ACE_ERROR((LM_WARNING, "(%P|%t) WARNING: typekind_to_string: "
    1185             :         "passed unknown TypeKind %u\n", tk));
    1186             :     }
    1187           0 :     return "unknown";
    1188             :   }
    1189             : }
    1190             : 
    1191       10218 : bool is_primitive(TypeKind tk)
    1192             : {
    1193       10218 :   switch (tk) {
    1194        6360 :   case TK_BOOLEAN:
    1195             :   case TK_BYTE:
    1196             :   case TK_INT8:
    1197             :   case TK_UINT8:
    1198             :   case TK_INT16:
    1199             :   case TK_UINT16:
    1200             :   case TK_INT32:
    1201             :   case TK_UINT32:
    1202             :   case TK_INT64:
    1203             :   case TK_UINT64:
    1204             :   case TK_FLOAT32:
    1205             :   case TK_FLOAT64:
    1206             :   case TK_FLOAT128:
    1207             :   case TK_CHAR8:
    1208             :   case TK_CHAR16:
    1209        6360 :     return true;
    1210        3858 :   default:
    1211        3858 :     return false;
    1212             :   }
    1213             : }
    1214             : 
    1215        2466 : bool is_scalar(TypeKind tk)
    1216             : {
    1217        2466 :   return is_primitive(tk) || tk == TK_ENUM;
    1218             : }
    1219             : 
    1220        7108 : bool is_basic(TypeKind tk)
    1221             : {
    1222        7108 :   return is_primitive(tk) || tk == TK_STRING8 || tk == TK_STRING16;
    1223             : }
    1224             : 
    1225         210 : bool is_complex(TypeKind tk)
    1226             : {
    1227         210 :   switch (tk) {
    1228         210 :   case TK_ARRAY:
    1229             :   case TK_SEQUENCE:
    1230             :   case TK_MAP:
    1231             :   case TK_STRUCTURE:
    1232             :   case TK_UNION:
    1233             :   case TK_BITSET:
    1234         210 :     return true;
    1235           0 :   default:
    1236           0 :     return false;
    1237             :   }
    1238             : }
    1239             : 
    1240        3369 : bool is_sequence_like(TypeKind tk)
    1241             : {
    1242        3369 :   switch (tk) {
    1243         903 :   case TK_SEQUENCE:
    1244             :   case TK_ARRAY:
    1245             :   case TK_STRING8:
    1246             :   case TK_STRING16:
    1247         903 :     return true;
    1248        2466 :   default:
    1249        2466 :     return false;
    1250             :   }
    1251             : }
    1252             : 
    1253             : } // namespace XTypes
    1254             : 
    1255             : namespace DCPS {
    1256             : 
    1257             : // Serialization support for TypeObject and its components
    1258             : 
    1259             : using XTypes::TYPE_NAME_MAX_LENGTH;
    1260             : using XTypes::MEMBER_NAME_MAX_LENGTH;
    1261             : 
    1262        2189 : void serialized_size(const Encoding& encoding, size_t& size,
    1263             :   const XTypes::TypeIdentifier& uni)
    1264             : {
    1265        2189 :   primitive_serialized_size_octet(encoding, size);
    1266             : 
    1267        2189 :   switch (uni.kind()) {
    1268          28 :   case XTypes::TI_STRING8_SMALL:
    1269             :   case XTypes::TI_STRING16_SMALL:
    1270          28 :     serialized_size(encoding, size, uni.string_sdefn());
    1271          28 :     break;
    1272           0 :   case XTypes::TI_STRING8_LARGE:
    1273             :   case XTypes::TI_STRING16_LARGE:
    1274           0 :     serialized_size(encoding, size, uni.string_ldefn());
    1275           0 :     break;
    1276         104 :   case XTypes::TI_PLAIN_SEQUENCE_SMALL:
    1277         104 :     serialized_size(encoding, size, uni.seq_sdefn());
    1278         104 :     break;
    1279           0 :   case XTypes::TI_PLAIN_SEQUENCE_LARGE:
    1280           0 :     serialized_size(encoding, size, uni.seq_ldefn());
    1281           0 :     break;
    1282         112 :   case XTypes::TI_PLAIN_ARRAY_SMALL:
    1283         112 :     serialized_size(encoding, size, uni.array_sdefn());
    1284         112 :     break;
    1285           0 :   case XTypes::TI_PLAIN_ARRAY_LARGE:
    1286           0 :     serialized_size(encoding, size, uni.array_ldefn());
    1287           0 :     break;
    1288           0 :   case XTypes::TI_PLAIN_MAP_SMALL:
    1289           0 :     serialized_size(encoding, size, uni.map_sdefn());
    1290           0 :     break;
    1291           0 :   case XTypes::TI_PLAIN_MAP_LARGE:
    1292           0 :     serialized_size(encoding, size, uni.map_ldefn());
    1293           0 :     break;
    1294           0 :   case XTypes::TI_STRONGLY_CONNECTED_COMPONENT:
    1295           0 :     serialized_size(encoding, size, uni.sc_component_id());
    1296           0 :     break;
    1297         290 :   case XTypes::EK_COMPLETE:
    1298             :   case XTypes::EK_MINIMAL:
    1299             :     {
    1300         290 :       XTypes::EquivalenceHash_forany uni_equivalence_hash(const_cast<XTypes::EquivalenceHash_slice*>(uni.equivalence_hash()));
    1301         290 :       serialized_size(encoding, size, uni_equivalence_hash);
    1302         290 :       break;
    1303             :     }
    1304        1655 :   case XTypes::TK_NONE:
    1305             :   case XTypes::TK_BOOLEAN:
    1306             :   case XTypes::TK_BYTE:
    1307             :   case XTypes::TK_INT16:
    1308             :   case XTypes::TK_INT32:
    1309             :   case XTypes::TK_INT64:
    1310             :   case XTypes::TK_UINT16:
    1311             :   case XTypes::TK_UINT32:
    1312             :   case XTypes::TK_UINT64:
    1313             :   case XTypes::TK_FLOAT32:
    1314             :   case XTypes::TK_FLOAT64:
    1315             :   case XTypes::TK_FLOAT128:
    1316             :   case XTypes::TK_INT8:
    1317             :   case XTypes::TK_UINT8:
    1318             :   case XTypes::TK_CHAR8:
    1319             :   case XTypes::TK_CHAR16:
    1320        1655 :     break; // no-op, no member selected
    1321           0 :   default:
    1322           0 :     serialized_size(encoding, size, uni.extended_defn());
    1323             :   }
    1324        2189 : }
    1325             : 
    1326           0 : void serialized_size(const Encoding& encoding, size_t& size,
    1327             :   const NestedKeyOnly<const XTypes::TypeIdentifier>& uni)
    1328             : {
    1329           0 :   serialized_size(encoding, size, uni.value);
    1330           0 : }
    1331             : 
    1332         166 : bool operator<<(Serializer& strm, const XTypes::TypeIdentifier& uni)
    1333             : {
    1334         166 :   if (!(strm << ACE_OutputCDR::from_octet(uni.kind()))) {
    1335           0 :     return false;
    1336             :   }
    1337             : 
    1338         166 :   switch (uni.kind()) {
    1339           0 :   case XTypes::TI_STRING8_SMALL:
    1340             :   case XTypes::TI_STRING16_SMALL:
    1341           0 :     return (strm << uni.string_sdefn());
    1342           0 :   case XTypes::TI_STRING8_LARGE:
    1343             :   case XTypes::TI_STRING16_LARGE:
    1344           0 :     return (strm << uni.string_ldefn());
    1345           0 :   case XTypes::TI_PLAIN_SEQUENCE_SMALL:
    1346           0 :     return (strm << uni.seq_sdefn());
    1347           0 :   case XTypes::TI_PLAIN_SEQUENCE_LARGE:
    1348           0 :     return (strm << uni.seq_ldefn());
    1349           0 :   case XTypes::TI_PLAIN_ARRAY_SMALL:
    1350           0 :     return (strm << uni.array_sdefn());
    1351           0 :   case XTypes::TI_PLAIN_ARRAY_LARGE:
    1352           0 :     return (strm << uni.array_ldefn());
    1353           0 :   case XTypes::TI_PLAIN_MAP_SMALL:
    1354           0 :     return (strm << uni.map_sdefn());
    1355           0 :   case XTypes::TI_PLAIN_MAP_LARGE:
    1356           0 :     return (strm << uni.map_ldefn());
    1357           0 :   case XTypes::TI_STRONGLY_CONNECTED_COMPONENT:
    1358           0 :     return (strm << uni.sc_component_id());
    1359           0 :   case XTypes::EK_COMPLETE:
    1360             :   case XTypes::EK_MINIMAL:
    1361             :     {
    1362           0 :       XTypes::EquivalenceHash_forany uni_equivalence_hash(const_cast<XTypes::EquivalenceHash_slice*>(uni.equivalence_hash()));
    1363           0 :       return (strm << uni_equivalence_hash);
    1364             :     }
    1365         166 :   case XTypes::TK_NONE:
    1366             :   case XTypes::TK_BOOLEAN:
    1367             :   case XTypes::TK_BYTE:
    1368             :   case XTypes::TK_INT16:
    1369             :   case XTypes::TK_INT32:
    1370             :   case XTypes::TK_INT64:
    1371             :   case XTypes::TK_UINT16:
    1372             :   case XTypes::TK_UINT32:
    1373             :   case XTypes::TK_UINT64:
    1374             :   case XTypes::TK_FLOAT32:
    1375             :   case XTypes::TK_FLOAT64:
    1376             :   case XTypes::TK_FLOAT128:
    1377             :   case XTypes::TK_INT8:
    1378             :   case XTypes::TK_UINT8:
    1379             :   case XTypes::TK_CHAR8:
    1380             :   case XTypes::TK_CHAR16:
    1381         166 :     return true; // no-op, no member selected
    1382           0 :   default:
    1383           0 :     return (strm << uni.extended_defn());
    1384             :   }
    1385             : }
    1386             : 
    1387           0 : bool operator<<(Serializer& strm, const NestedKeyOnly<const XTypes::TypeIdentifier>& uni)
    1388             : {
    1389           0 :   return (strm << uni.value);
    1390             : }
    1391             : 
    1392        1616 : bool operator>>(Serializer& strm, XTypes::TypeIdentifier& uni)
    1393             : {
    1394             :   ACE_CDR::Octet k;
    1395        1616 :   if (!(strm >> ACE_InputCDR::to_octet(k))) {
    1396           0 :     return false;
    1397             :   }
    1398        1616 :   uni = XTypes::TypeIdentifier(k);
    1399             : 
    1400        1616 :   switch (k) {
    1401          56 :   case XTypes::TI_STRING8_SMALL:
    1402             :   case XTypes::TI_STRING16_SMALL:
    1403          56 :     return (strm >> uni.string_sdefn());
    1404           0 :   case XTypes::TI_STRING8_LARGE:
    1405             :   case XTypes::TI_STRING16_LARGE:
    1406           0 :     return (strm >> uni.string_ldefn());
    1407         127 :   case XTypes::TI_PLAIN_SEQUENCE_SMALL:
    1408         127 :     return (strm >> uni.seq_sdefn());
    1409           0 :   case XTypes::TI_PLAIN_SEQUENCE_LARGE:
    1410           0 :     return (strm >> uni.seq_ldefn());
    1411         113 :   case XTypes::TI_PLAIN_ARRAY_SMALL:
    1412         113 :     return (strm >> uni.array_sdefn());
    1413           0 :   case XTypes::TI_PLAIN_ARRAY_LARGE:
    1414           0 :     return (strm >> uni.array_ldefn());
    1415           0 :   case XTypes::TI_PLAIN_MAP_SMALL:
    1416           0 :     return (strm >> uni.map_sdefn());
    1417           0 :   case XTypes::TI_PLAIN_MAP_LARGE:
    1418           0 :     return (strm >> uni.map_ldefn());
    1419          26 :   case XTypes::TI_STRONGLY_CONNECTED_COMPONENT:
    1420          26 :     return (strm >> uni.sc_component_id());
    1421         486 :   case XTypes::EK_COMPLETE:
    1422             :   case XTypes::EK_MINIMAL:
    1423             :     {
    1424         486 :       XTypes::EquivalenceHash_forany uni_equivalence_hash(uni.equivalence_hash());
    1425         486 :       return (strm >> uni_equivalence_hash);
    1426             :     }
    1427         808 :   case XTypes::TK_NONE:
    1428             :   case XTypes::TK_BOOLEAN:
    1429             :   case XTypes::TK_BYTE:
    1430             :   case XTypes::TK_INT16:
    1431             :   case XTypes::TK_INT32:
    1432             :   case XTypes::TK_INT64:
    1433             :   case XTypes::TK_UINT16:
    1434             :   case XTypes::TK_UINT32:
    1435             :   case XTypes::TK_UINT64:
    1436             :   case XTypes::TK_FLOAT32:
    1437             :   case XTypes::TK_FLOAT64:
    1438             :   case XTypes::TK_FLOAT128:
    1439             :   case XTypes::TK_INT8:
    1440             :   case XTypes::TK_UINT8:
    1441             :   case XTypes::TK_CHAR8:
    1442             :   case XTypes::TK_CHAR16:
    1443         808 :     return true; // no-op, no member selected
    1444           0 :   default:
    1445           0 :     return (strm >> uni.extended_defn());
    1446             :   }
    1447             : }
    1448             : 
    1449           0 : bool operator>>(Serializer& strm, NestedKeyOnly<XTypes::TypeIdentifier>& uni)
    1450             : {
    1451           0 :   return (strm >> uni.value);
    1452             : }
    1453             : 
    1454           2 : void serialized_size(const Encoding& encoding, size_t& size,
    1455             :   const XTypes::LBoundSeq& seq)
    1456             : {
    1457           2 :   DCPS::primitive_serialized_size_ulong(encoding, size);
    1458           2 :   if (seq.length() == 0) {
    1459           2 :     return;
    1460             :   }
    1461           0 :   primitive_serialized_size(encoding, size, ACE_CDR::ULong(), seq.length());
    1462             : }
    1463             : 
    1464           2 : bool operator<<(Serializer& strm, const XTypes::LBoundSeq& seq)
    1465             : {
    1466           2 :   const ACE_CDR::ULong length = seq.length();
    1467           2 :   if (!(strm << length)) {
    1468           0 :     return false;
    1469             :   }
    1470           2 :   if (length == 0) {
    1471           2 :     return true;
    1472             :   }
    1473           0 :   return strm.write_ulong_array(seq.get_buffer(), length);
    1474             : }
    1475             : 
    1476           4 : bool operator>>(Serializer& strm, XTypes::LBoundSeq& seq)
    1477             : {
    1478             :   ACE_CDR::ULong length;
    1479           4 :   if (!(strm >> length)) {
    1480           0 :     return false;
    1481             :   }
    1482           4 :   seq.length(length);
    1483           4 :   if (length == 0) {
    1484           2 :     return true;
    1485             :   }
    1486           2 :   return strm.read_ulong_array(seq.get_buffer(), length);
    1487             : }
    1488             : 
    1489             : 
    1490         112 : void serialized_size(const Encoding& encoding, size_t& size,
    1491             :   const XTypes::SBoundSeq& seq)
    1492             : {
    1493         112 :   DCPS::primitive_serialized_size_ulong(encoding, size);
    1494         112 :   if (seq.length() == 0) {
    1495           0 :     return;
    1496             :   }
    1497         112 :   primitive_serialized_size_octet(encoding, size, seq.length());
    1498             : }
    1499             : 
    1500           0 : bool operator<<(Serializer& strm, const XTypes::SBoundSeq& seq)
    1501             : {
    1502           0 :   const ACE_CDR::ULong length = seq.length();
    1503           0 :   if (!(strm << length)) {
    1504           0 :     return false;
    1505             :   }
    1506           0 :   if (length == 0) {
    1507           0 :     return true;
    1508             :   }
    1509           0 :   return strm.write_octet_array(seq.get_buffer(), length);
    1510             : }
    1511             : 
    1512         113 : bool operator>>(Serializer& strm, XTypes::SBoundSeq& seq)
    1513             : {
    1514             :   ACE_CDR::ULong length;
    1515         113 :   if (!(strm >> length)) {
    1516           0 :     return false;
    1517             :   }
    1518         113 :   seq.length(length);
    1519         113 :   if (length == 0) {
    1520           0 :     return true;
    1521             :   }
    1522         113 :   return strm.read_octet_array(seq.get_buffer(), length);
    1523             : }
    1524             : 
    1525             : 
    1526         198 : void serialized_size(const Encoding& encoding, size_t& size,
    1527             :   const XTypes::UnionCaseLabelSeq& seq)
    1528             : {
    1529         198 :   DCPS::primitive_serialized_size_ulong(encoding, size);
    1530         198 :   if (seq.length() == 0) {
    1531          34 :     return;
    1532             :   }
    1533         164 :   primitive_serialized_size(encoding, size, ACE_CDR::Long(), seq.length());
    1534             : }
    1535             : 
    1536           0 : bool operator<<(Serializer& strm, const XTypes::UnionCaseLabelSeq& seq)
    1537             : {
    1538           0 :   const ACE_CDR::ULong length = seq.length();
    1539           0 :   if (!(strm << length)) {
    1540           0 :     return false;
    1541             :   }
    1542           0 :   if (length == 0) {
    1543           0 :     return true;
    1544             :   }
    1545           0 :   return strm.write_long_array(seq.get_buffer(), length);
    1546             : }
    1547             : 
    1548         303 : bool operator>>(Serializer& strm, XTypes::UnionCaseLabelSeq& seq)
    1549             : {
    1550             :   ACE_CDR::ULong length;
    1551         303 :   if (!(strm >> length)) {
    1552           0 :     return false;
    1553             :   }
    1554         303 :   seq.length(length);
    1555         303 :   if (length == 0) {
    1556          12 :     return true;
    1557             :   }
    1558         291 :   return strm.read_long_array(seq.get_buffer(), length);
    1559             : }
    1560             : 
    1561             : 
    1562           0 : void serialized_size(const Encoding& encoding, size_t& size,
    1563             :   const XTypes::ExtendedAnnotationParameterValue&)
    1564             : {
    1565           0 :   serialized_size_delimiter(encoding, size);
    1566           0 : }
    1567             : 
    1568           0 : bool operator<<(Serializer& strm, const XTypes::ExtendedAnnotationParameterValue&)
    1569             : {
    1570           0 :   return XTypes::write_empty_xcdr2_nonfinal(strm);
    1571             : }
    1572             : 
    1573           0 : bool operator>>(Serializer& strm, XTypes::ExtendedAnnotationParameterValue&)
    1574             : {
    1575           0 :   return XTypes::read_empty_xcdr2_nonfinal(strm);
    1576             : }
    1577             : 
    1578             : 
    1579         454 : void serialized_size(const Encoding& encoding, size_t& size,
    1580             :   const XTypes::NameHash_forany&)
    1581             : {
    1582         454 :   primitive_serialized_size_octet(encoding, size, 4);
    1583         454 : }
    1584             : 
    1585           2 : bool operator<<(Serializer& strm, const XTypes::NameHash_forany& arr)
    1586             : {
    1587           2 :   return strm.write_octet_array(arr.in(), 4);
    1588             : }
    1589             : 
    1590         255 : bool operator>>(Serializer& strm, XTypes::NameHash_forany& arr)
    1591             : {
    1592         255 :   return strm.read_octet_array(arr.out(), 4);
    1593             : }
    1594             : 
    1595             : 
    1596         290 : void serialized_size(const Encoding& encoding, size_t& size,
    1597             :   const XTypes::EquivalenceHash_forany&)
    1598             : {
    1599         290 :   primitive_serialized_size_octet(encoding, size, 14);
    1600         290 : }
    1601             : 
    1602           0 : bool operator<<(Serializer& strm, const XTypes::EquivalenceHash_forany& arr)
    1603             : {
    1604           0 :   return strm.write_octet_array(arr.in(), 14);
    1605             : }
    1606             : 
    1607         512 : bool operator>>(Serializer& strm, XTypes::EquivalenceHash_forany& arr)
    1608             : {
    1609         512 :   return strm.read_octet_array(arr.out(), 14);
    1610             : }
    1611             : 
    1612             : 
    1613         207 : void serialized_size(const Encoding& encoding, size_t& size,
    1614             :   const XTypes::CompleteTypeDetail& stru)
    1615             : {
    1616         207 :   serialized_size(encoding, size, stru.ann_builtin);
    1617         207 :   serialized_size(encoding, size, stru.ann_custom);
    1618         207 :   DCPS::primitive_serialized_size_ulong(encoding, size);
    1619         207 :   size += stru.type_name.size() + 1;
    1620         207 : }
    1621             : 
    1622           0 : bool operator<<(Serializer& strm, const XTypes::CompleteTypeDetail& stru)
    1623             : {
    1624           0 :   return (strm << stru.ann_builtin)
    1625           0 :     && (strm << stru.ann_custom)
    1626           0 :     && (strm << Serializer::FromBoundedString<char>(stru.type_name, TYPE_NAME_MAX_LENGTH));
    1627             : }
    1628             : 
    1629         209 : bool operator>>(Serializer& strm, XTypes::CompleteTypeDetail& stru)
    1630             : {
    1631         209 :   return (strm >> stru.ann_builtin)
    1632         209 :     && (strm >> stru.ann_custom)
    1633         418 :     && (strm >> Serializer::ToBoundedString<char>(stru.type_name, TYPE_NAME_MAX_LENGTH));
    1634             : }
    1635             : 
    1636             : 
    1637         110 : void serialized_size(const Encoding& encoding, size_t& size,
    1638             :   const XTypes::CompleteStructHeader& stru)
    1639             : {
    1640         110 :   serialized_size_delimiter(encoding, size);
    1641         110 :   serialized_size(encoding, size, stru.base_type);
    1642         110 :   serialized_size(encoding, size, stru.detail);
    1643         110 : }
    1644             : 
    1645           0 : bool operator<<(Serializer& strm, const XTypes::CompleteStructHeader& stru)
    1646             : {
    1647           0 :   size_t total_size = 0;
    1648           0 :   serialized_size(strm.encoding(), total_size, stru);
    1649           0 :   if (!strm.write_delimiter(total_size)) {
    1650           0 :     return false;
    1651             :   }
    1652             : 
    1653           0 :   return (strm << stru.base_type)
    1654           0 :     && (strm << stru.detail);
    1655             : }
    1656             : 
    1657          79 : bool operator>>(Serializer& strm, XTypes::CompleteStructHeader& stru)
    1658             : {
    1659          79 :   size_t total_size = 0;
    1660          79 :   if (!strm.read_delimiter(total_size)) {
    1661           0 :     return false;
    1662             :   }
    1663             : 
    1664          79 :   const size_t start_pos = strm.rpos();
    1665             : 
    1666          79 :   const bool ret = (strm >> stru.base_type)
    1667          79 :     && (strm >> stru.detail);
    1668             : 
    1669          79 :   if (ret && strm.rpos() - start_pos < total_size) {
    1670           0 :     strm.skip(total_size - strm.rpos() + start_pos);
    1671             :   }
    1672          79 :   return ret;
    1673             : }
    1674             : 
    1675             : 
    1676         116 : void serialized_size(const Encoding& encoding, size_t& size,
    1677             :   const XTypes::MinimalStructHeader& stru)
    1678             : {
    1679         116 :   serialized_size_delimiter(encoding, size);
    1680         116 :   serialized_size(encoding, size, stru.base_type);
    1681         116 :   serialized_size(encoding, size, stru.detail);
    1682         116 : }
    1683             : 
    1684           2 : bool operator<<(Serializer& strm, const XTypes::MinimalStructHeader& stru)
    1685             : {
    1686           2 :   size_t total_size = 0;
    1687           2 :   serialized_size(strm.encoding(), total_size, stru);
    1688           2 :   if (!strm.write_delimiter(total_size)) {
    1689           0 :     return false;
    1690             :   }
    1691             : 
    1692           2 :   return (strm << stru.base_type)
    1693           2 :     && (strm << stru.detail);
    1694             : }
    1695             : 
    1696          39 : bool operator>>(Serializer& strm, XTypes::MinimalStructHeader& stru)
    1697             : {
    1698          39 :   size_t total_size = 0;
    1699          39 :   if (!strm.read_delimiter(total_size)) {
    1700           0 :     return false;
    1701             :   }
    1702             : 
    1703          39 :   const size_t start_pos = strm.rpos();
    1704             : 
    1705          39 :   const bool ret = (strm >> stru.base_type)
    1706          39 :     && (strm >> stru.detail);
    1707             : 
    1708          39 :   if (ret && strm.rpos() - start_pos < total_size) {
    1709           0 :     strm.skip(total_size - strm.rpos() + start_pos);
    1710             :   }
    1711          39 :   return ret;
    1712             : }
    1713             : 
    1714         110 : void serialized_size(const Encoding& encoding, size_t& size,
    1715             :   const XTypes::CompleteStructType& stru)
    1716             : {
    1717         110 :   primitive_serialized_size(encoding, size, stru.struct_flags);
    1718         110 :   serialized_size(encoding, size, stru.header);
    1719         110 :   serialized_size(encoding, size, stru.member_seq);
    1720         110 : }
    1721             : 
    1722           0 : bool operator<<(Serializer& strm, const XTypes::CompleteStructType& stru)
    1723             : {
    1724           0 :   return (strm << stru.struct_flags)
    1725           0 :     && (strm << stru.header)
    1726           0 :     && (strm << stru.member_seq);
    1727             : }
    1728             : 
    1729          79 : bool operator>>(Serializer& strm, XTypes::CompleteStructType& stru)
    1730             : {
    1731          79 :   return (strm >> stru.struct_flags)
    1732          79 :     && (strm >> stru.header)
    1733         158 :     && (strm >> stru.member_seq);
    1734             : }
    1735             : 
    1736             : 
    1737         114 : void serialized_size(const Encoding& encoding, size_t& size,
    1738             :   const XTypes::MinimalStructType& stru)
    1739             : {
    1740         114 :   primitive_serialized_size(encoding, size, stru.struct_flags);
    1741         114 :   serialized_size(encoding, size, stru.header);
    1742         114 :   serialized_size(encoding, size, stru.member_seq);
    1743         114 : }
    1744             : 
    1745           2 : bool operator<<(Serializer& strm, const XTypes::MinimalStructType& stru)
    1746             : {
    1747           2 :   return (strm << stru.struct_flags)
    1748           2 :     && (strm << stru.header)
    1749           4 :     && (strm << stru.member_seq);
    1750             : }
    1751             : 
    1752          39 : bool operator>>(Serializer& strm, XTypes::MinimalStructType& stru)
    1753             : {
    1754          39 :   return (strm >> stru.struct_flags)
    1755          39 :     && (strm >> stru.header)
    1756          78 :     && (strm >> stru.member_seq);
    1757             : }
    1758             : 
    1759             : 
    1760          34 : void serialized_size(const Encoding& encoding, size_t& size,
    1761             :   const XTypes::CompleteUnionType& stru)
    1762             : {
    1763          34 :   primitive_serialized_size(encoding, size, stru.union_flags);
    1764          34 :   serialized_size(encoding, size, stru.header);
    1765          34 :   serialized_size(encoding, size, stru.discriminator);
    1766          34 :   serialized_size(encoding, size, stru.member_seq);
    1767          34 : }
    1768             : 
    1769           0 : bool operator<<(Serializer& strm, const XTypes::CompleteUnionType& stru)
    1770             : {
    1771           0 :   return (strm << stru.union_flags)
    1772           0 :     && (strm << stru.header)
    1773           0 :     && (strm << stru.discriminator)
    1774           0 :     && (strm << stru.member_seq);
    1775             : }
    1776             : 
    1777          29 : bool operator>>(Serializer& strm, XTypes::CompleteUnionType& stru)
    1778             : {
    1779          29 :   return (strm >> stru.union_flags)
    1780          29 :     && (strm >> stru.header)
    1781          29 :     && (strm >> stru.discriminator)
    1782          58 :     && (strm >> stru.member_seq);
    1783             : }
    1784             : 
    1785             : 
    1786          34 : void serialized_size(const Encoding& encoding, size_t& size,
    1787             :   const XTypes::MinimalUnionType& stru)
    1788             : {
    1789          34 :   primitive_serialized_size(encoding, size, stru.union_flags);
    1790          34 :   serialized_size(encoding, size, stru.header);
    1791          34 :   serialized_size(encoding, size, stru.discriminator);
    1792          34 :   serialized_size(encoding, size, stru.member_seq);
    1793          34 : }
    1794             : 
    1795           0 : bool operator<<(Serializer& strm, const XTypes::MinimalUnionType& stru)
    1796             : {
    1797           0 :   return (strm << stru.union_flags)
    1798           0 :     && (strm << stru.header)
    1799           0 :     && (strm << stru.discriminator)
    1800           0 :     && (strm << stru.member_seq);
    1801             : }
    1802             : 
    1803          10 : bool operator>>(Serializer& strm, XTypes::MinimalUnionType& stru)
    1804             : {
    1805          10 :   return (strm >> stru.union_flags)
    1806          10 :     && (strm >> stru.header)
    1807          10 :     && (strm >> stru.discriminator)
    1808          20 :     && (strm >> stru.member_seq);
    1809             : }
    1810             : 
    1811             : 
    1812           0 : void serialized_size(const Encoding& encoding, size_t& size,
    1813             :   const XTypes::CompleteAnnotationType& stru)
    1814             : {
    1815           0 :   primitive_serialized_size(encoding, size, stru.annotation_flag);
    1816           0 :   serialized_size(encoding, size, stru.header);
    1817           0 :   serialized_size(encoding, size, stru.member_seq);
    1818           0 : }
    1819             : 
    1820           0 : bool operator<<(Serializer& strm, const XTypes::CompleteAnnotationType& stru)
    1821             : {
    1822           0 :   return (strm << stru.annotation_flag)
    1823           0 :     && (strm << stru.header)
    1824           0 :     && (strm << stru.member_seq);
    1825             : }
    1826             : 
    1827           0 : bool operator>>(Serializer& strm, XTypes::CompleteAnnotationType& stru)
    1828             : {
    1829           0 :   return (strm >> stru.annotation_flag)
    1830           0 :     && (strm >> stru.header)
    1831           0 :     && (strm >> stru.member_seq);
    1832             : }
    1833             : 
    1834             : 
    1835           0 : void serialized_size(const Encoding& encoding, size_t& size,
    1836             :   const XTypes::MinimalAnnotationType& stru)
    1837             : {
    1838           0 :   primitive_serialized_size(encoding, size, stru.annotation_flag);
    1839           0 :   serialized_size(encoding, size, stru.header);
    1840           0 :   serialized_size(encoding, size, stru.member_seq);
    1841           0 : }
    1842             : 
    1843           0 : bool operator<<(Serializer& strm, const XTypes::MinimalAnnotationType& stru)
    1844             : {
    1845           0 :   return (strm << stru.annotation_flag)
    1846           0 :     && (strm << stru.header)
    1847           0 :     && (strm << stru.member_seq);
    1848             : }
    1849             : 
    1850           0 : bool operator>>(Serializer& strm, XTypes::MinimalAnnotationType& stru)
    1851             : {
    1852           0 :   return (strm >> stru.annotation_flag)
    1853           0 :     && (strm >> stru.header)
    1854           0 :     && (strm >> stru.member_seq);
    1855             : }
    1856             : 
    1857             : 
    1858          49 : void serialized_size(const Encoding& encoding, size_t& size,
    1859             :   const XTypes::CompleteAliasType& stru)
    1860             : {
    1861          49 :   primitive_serialized_size(encoding, size, stru.alias_flags);
    1862          49 :   serialized_size(encoding, size, stru.header);
    1863          49 :   serialized_size(encoding, size, stru.body);
    1864          49 : }
    1865             : 
    1866           0 : bool operator<<(Serializer& strm, const XTypes::CompleteAliasType& stru)
    1867             : {
    1868           0 :   return (strm << stru.alias_flags)
    1869           0 :     && (strm << stru.header)
    1870           0 :     && (strm << stru.body);
    1871             : }
    1872             : 
    1873          94 : bool operator>>(Serializer& strm, XTypes::CompleteAliasType& stru)
    1874             : {
    1875          94 :   return (strm >> stru.alias_flags)
    1876          94 :     && (strm >> stru.header)
    1877         188 :     && (strm >> stru.body);
    1878             : }
    1879             : 
    1880             : 
    1881          49 : void serialized_size(const Encoding& encoding, size_t& size,
    1882             :   const XTypes::MinimalAliasType& stru)
    1883             : {
    1884          49 :   primitive_serialized_size(encoding, size, stru.alias_flags);
    1885          49 :   serialized_size(encoding, size, stru.header);
    1886          49 :   serialized_size(encoding, size, stru.body);
    1887          49 : }
    1888             : 
    1889           0 : bool operator<<(Serializer& strm, const XTypes::MinimalAliasType& stru)
    1890             : {
    1891           0 :   return (strm << stru.alias_flags)
    1892           0 :     && (strm << stru.header)
    1893           0 :     && (strm << stru.body);
    1894             : }
    1895             : 
    1896          54 : bool operator>>(Serializer& strm, XTypes::MinimalAliasType& stru)
    1897             : {
    1898          54 :   return (strm >> stru.alias_flags)
    1899          54 :     && (strm >> stru.header)
    1900         108 :     && (strm >> stru.body);
    1901             : }
    1902             : 
    1903             : 
    1904           0 : void serialized_size(const Encoding& encoding, size_t& size,
    1905             :   const XTypes::CompleteSequenceType& stru)
    1906             : {
    1907           0 :   primitive_serialized_size(encoding, size, stru.collection_flag);
    1908           0 :   serialized_size(encoding, size, stru.header);
    1909           0 :   serialized_size(encoding, size, stru.element);
    1910           0 : }
    1911             : 
    1912           0 : bool operator<<(Serializer& strm, const XTypes::CompleteSequenceType& stru)
    1913             : {
    1914           0 :   return (strm << stru.collection_flag)
    1915           0 :     && (strm << stru.header)
    1916           0 :     && (strm << stru.element);
    1917             : }
    1918             : 
    1919           6 : bool operator>>(Serializer& strm, XTypes::CompleteSequenceType& stru)
    1920             : {
    1921           6 :   return (strm >> stru.collection_flag)
    1922           6 :     && (strm >> stru.header)
    1923          12 :     && (strm >> stru.element);
    1924             : }
    1925             : 
    1926             : 
    1927           0 : void serialized_size(const Encoding& encoding, size_t& size,
    1928             :   const XTypes::MinimalSequenceType& stru)
    1929             : {
    1930           0 :   primitive_serialized_size(encoding, size, stru.collection_flag);
    1931           0 :   serialized_size(encoding, size, stru.header);
    1932           0 :   serialized_size(encoding, size, stru.element);
    1933           0 : }
    1934             : 
    1935           0 : bool operator<<(Serializer& strm, const XTypes::MinimalSequenceType& stru)
    1936             : {
    1937           0 :   return (strm << stru.collection_flag)
    1938           0 :     && (strm << stru.header)
    1939           0 :     && (strm << stru.element);
    1940             : }
    1941             : 
    1942           4 : bool operator>>(Serializer& strm, XTypes::MinimalSequenceType& stru)
    1943             : {
    1944           4 :   return (strm >> stru.collection_flag)
    1945           4 :     && (strm >> stru.header)
    1946           8 :     && (strm >> stru.element);
    1947             : }
    1948             : 
    1949             : 
    1950           0 : void serialized_size(const Encoding& encoding, size_t& size,
    1951             :   const XTypes::CompleteArrayType& stru)
    1952             : {
    1953           0 :   serialized_size_delimiter(encoding, size);
    1954           0 :   primitive_serialized_size(encoding, size, stru.collection_flag);
    1955           0 :   serialized_size(encoding, size, stru.header);
    1956           0 :   serialized_size(encoding, size, stru.element);
    1957           0 : }
    1958             : 
    1959           0 : bool operator<<(Serializer& strm, const XTypes::CompleteArrayType& stru)
    1960             : {
    1961           0 :   size_t total_size = 0;
    1962           0 :   serialized_size(strm.encoding(), total_size, stru);
    1963           0 :   if (!strm.write_delimiter(total_size)) {
    1964           0 :     return false;
    1965             :   }
    1966             : 
    1967           0 :   return (strm << stru.collection_flag)
    1968           0 :     && (strm << stru.header)
    1969           0 :     && (strm << stru.element);
    1970             : }
    1971             : 
    1972           1 : bool operator>>(Serializer& strm, XTypes::CompleteArrayType& stru)
    1973             : {
    1974           1 :   size_t total_size = 0;
    1975           1 :   if (!strm.read_delimiter(total_size)) {
    1976           0 :     return false;
    1977             :   }
    1978             : 
    1979           1 :   const size_t start_pos = strm.rpos();
    1980             : 
    1981           1 :   const bool ret = (strm >> stru.collection_flag)
    1982           1 :     && (strm >> stru.header)
    1983           2 :     && (strm >> stru.element);
    1984             : 
    1985           1 :   if (ret && strm.rpos() - start_pos < total_size) {
    1986           0 :     strm.skip(total_size - strm.rpos() + start_pos);
    1987             :   }
    1988           1 :   return ret;
    1989             : }
    1990             : 
    1991             : 
    1992           0 : void serialized_size(const Encoding& encoding, size_t& size,
    1993             :   const XTypes::MinimalArrayType& stru)
    1994             : {
    1995           0 :   primitive_serialized_size(encoding, size, stru.collection_flag);
    1996           0 :   serialized_size(encoding, size, stru.header);
    1997           0 :   serialized_size(encoding, size, stru.element);
    1998           0 : }
    1999             : 
    2000           0 : bool operator<<(Serializer& strm, const XTypes::MinimalArrayType& stru)
    2001             : {
    2002           0 :   return (strm << stru.collection_flag)
    2003           0 :     && (strm << stru.header)
    2004           0 :     && (strm << stru.element);
    2005             : }
    2006             : 
    2007           1 : bool operator>>(Serializer& strm, XTypes::MinimalArrayType& stru)
    2008             : {
    2009           1 :   return (strm >> stru.collection_flag)
    2010           1 :     && (strm >> stru.header)
    2011           2 :     && (strm >> stru.element);
    2012             : }
    2013             : 
    2014             : 
    2015           0 : void serialized_size(const Encoding& encoding, size_t& size,
    2016             :   const XTypes::CompleteMapType& stru)
    2017             : {
    2018           0 :   primitive_serialized_size(encoding, size, stru.collection_flag);
    2019           0 :   serialized_size(encoding, size, stru.header);
    2020           0 :   serialized_size(encoding, size, stru.key);
    2021           0 :   serialized_size(encoding, size, stru.element);
    2022           0 : }
    2023             : 
    2024           0 : bool operator<<(Serializer& strm, const XTypes::CompleteMapType& stru)
    2025             : {
    2026           0 :   return (strm << stru.collection_flag)
    2027           0 :     && (strm << stru.header)
    2028           0 :     && (strm << stru.key)
    2029           0 :     && (strm << stru.element);
    2030             : }
    2031             : 
    2032           0 : bool operator>>(Serializer& strm, XTypes::CompleteMapType& stru)
    2033             : {
    2034           0 :   return (strm >> stru.collection_flag)
    2035           0 :     && (strm >> stru.header)
    2036           0 :     && (strm >> stru.key)
    2037           0 :     && (strm >> stru.element);
    2038             : }
    2039             : 
    2040             : 
    2041           0 : void serialized_size(const Encoding& encoding, size_t& size,
    2042             :   const XTypes::MinimalMapType& stru)
    2043             : {
    2044           0 :   primitive_serialized_size(encoding, size, stru.collection_flag);
    2045           0 :   serialized_size(encoding, size, stru.header);
    2046           0 :   serialized_size(encoding, size, stru.key);
    2047           0 :   serialized_size(encoding, size, stru.element);
    2048           0 : }
    2049             : 
    2050           0 : bool operator<<(Serializer& strm, const XTypes::MinimalMapType& stru)
    2051             : {
    2052           0 :   return (strm << stru.collection_flag)
    2053           0 :     && (strm << stru.header)
    2054           0 :     && (strm << stru.key)
    2055           0 :     && (strm << stru.element);
    2056             : }
    2057             : 
    2058           0 : bool operator>>(Serializer& strm, XTypes::MinimalMapType& stru)
    2059             : {
    2060           0 :   return (strm >> stru.collection_flag)
    2061           0 :     && (strm >> stru.header)
    2062           0 :     && (strm >> stru.key)
    2063           0 :     && (strm >> stru.element);
    2064             : }
    2065             : 
    2066             : 
    2067          14 : void serialized_size(const Encoding& encoding, size_t& size,
    2068             :   const XTypes::CompleteEnumeratedHeader& stru)
    2069             : {
    2070          14 :   serialized_size_delimiter(encoding, size);
    2071          14 :   serialized_size(encoding, size, stru.common);
    2072          14 :   serialized_size(encoding, size, stru.detail);
    2073          14 : }
    2074             : 
    2075           0 : bool operator<<(Serializer& strm, const XTypes::CompleteEnumeratedHeader& stru)
    2076             : {
    2077           0 :   size_t total_size = 0;
    2078           0 :   serialized_size(strm.encoding(), total_size, stru);
    2079           0 :   if (!strm.write_delimiter(total_size)) {
    2080           0 :     return false;
    2081             :   }
    2082             : 
    2083           0 :   return (strm << stru.common)
    2084           0 :     && (strm << stru.detail);
    2085             : }
    2086             : 
    2087           6 : bool operator>>(Serializer& strm, XTypes::CompleteEnumeratedHeader& stru)
    2088             : {
    2089           6 :   size_t total_size = 0;
    2090           6 :   if (!strm.read_delimiter(total_size)) {
    2091           0 :     return false;
    2092             :   }
    2093             : 
    2094           6 :   const size_t start_pos = strm.rpos();
    2095             : 
    2096           6 :   const bool ret = (strm >> stru.common)
    2097           6 :     && (strm >> stru.detail);
    2098             : 
    2099           6 :   if (ret && strm.rpos() - start_pos < total_size) {
    2100           0 :     strm.skip(total_size - strm.rpos() + start_pos);
    2101             :   }
    2102           6 :   return ret;
    2103             : }
    2104             : 
    2105          14 : void serialized_size(const Encoding& encoding, size_t& size,
    2106             :   const XTypes::MinimalEnumeratedHeader& stru)
    2107             : {
    2108          14 :   serialized_size_delimiter(encoding, size);
    2109          14 :   serialized_size(encoding, size, stru.common);
    2110          14 : }
    2111             : 
    2112           0 : bool operator<<(Serializer& strm, const XTypes::MinimalEnumeratedHeader& stru)
    2113             : {
    2114           0 :   size_t total_size = 0;
    2115           0 :   serialized_size(strm.encoding(), total_size, stru);
    2116           0 :   if (!strm.write_delimiter(total_size)) {
    2117           0 :     return false;
    2118             :   }
    2119             : 
    2120           0 :   return (strm << stru.common);
    2121             : }
    2122             : 
    2123           4 : bool operator>>(Serializer& strm, XTypes::MinimalEnumeratedHeader& stru)
    2124             : {
    2125           4 :   size_t total_size = 0;
    2126           4 :   if (!strm.read_delimiter(total_size)) {
    2127           0 :     return false;
    2128             :   }
    2129             : 
    2130           4 :   const size_t start_pos = strm.rpos();
    2131             : 
    2132           4 :   const bool ret = (strm >> stru.common);
    2133             : 
    2134           4 :   if (ret && strm.rpos() - start_pos < total_size) {
    2135           0 :     strm.skip(total_size - strm.rpos() + start_pos);
    2136             :   }
    2137           4 :   return ret;
    2138             : }
    2139             : 
    2140             : 
    2141          14 : void serialized_size(const Encoding& encoding, size_t& size,
    2142             :   const XTypes::CompleteEnumeratedType& stru)
    2143             : {
    2144          14 :   primitive_serialized_size(encoding, size, stru.enum_flags);
    2145          14 :   serialized_size(encoding, size, stru.header);
    2146          14 :   serialized_size(encoding, size, stru.literal_seq);
    2147          14 : }
    2148             : 
    2149           0 : bool operator<<(Serializer& strm, const XTypes::CompleteEnumeratedType& stru)
    2150             : {
    2151           0 :   return (strm << stru.enum_flags)
    2152           0 :     && (strm << stru.header)
    2153           0 :     && (strm << stru.literal_seq);
    2154             : }
    2155             : 
    2156           6 : bool operator>>(Serializer& strm, XTypes::CompleteEnumeratedType& stru)
    2157             : {
    2158           6 :   return (strm >> stru.enum_flags)
    2159           6 :     && (strm >> stru.header)
    2160          12 :     && (strm >> stru.literal_seq);
    2161             : }
    2162             : 
    2163             : 
    2164          14 : void serialized_size(const Encoding& encoding, size_t& size,
    2165             :   const XTypes::MinimalEnumeratedType& stru)
    2166             : {
    2167          14 :   primitive_serialized_size(encoding, size, stru.enum_flags);
    2168          14 :   serialized_size(encoding, size, stru.header);
    2169          14 :   serialized_size(encoding, size, stru.literal_seq);
    2170          14 : }
    2171             : 
    2172           0 : bool operator<<(Serializer& strm, const XTypes::MinimalEnumeratedType& stru)
    2173             : {
    2174           0 :   return (strm << stru.enum_flags)
    2175           0 :     && (strm << stru.header)
    2176           0 :     && (strm << stru.literal_seq);
    2177             : }
    2178             : 
    2179           4 : bool operator>>(Serializer& strm, XTypes::MinimalEnumeratedType& stru)
    2180             : {
    2181           4 :   return (strm >> stru.enum_flags)
    2182           4 :     && (strm >> stru.header)
    2183           8 :     && (strm >> stru.literal_seq);
    2184             : }
    2185             : 
    2186             : 
    2187           0 : void serialized_size(const Encoding& encoding, size_t& size,
    2188             :   const XTypes::CompleteBitmaskType& stru)
    2189             : {
    2190           0 :   serialized_size_delimiter(encoding, size);
    2191           0 :   primitive_serialized_size(encoding, size, stru.bitmask_flags);
    2192           0 :   serialized_size(encoding, size, stru.header);
    2193           0 :   serialized_size(encoding, size, stru.flag_seq);
    2194           0 : }
    2195             : 
    2196           0 : bool operator<<(Serializer& strm, const XTypes::CompleteBitmaskType& stru)
    2197             : {
    2198           0 :   size_t total_size = 0;
    2199           0 :   serialized_size(strm.encoding(), total_size, stru);
    2200           0 :   if (!strm.write_delimiter(total_size)) {
    2201           0 :     return false;
    2202             :   }
    2203             : 
    2204           0 :   return (strm << stru.bitmask_flags)
    2205           0 :     && (strm << stru.header)
    2206           0 :     && (strm << stru.flag_seq);
    2207             : }
    2208             : 
    2209           0 : bool operator>>(Serializer& strm, XTypes::CompleteBitmaskType& stru)
    2210             : {
    2211           0 :   size_t total_size = 0;
    2212           0 :   if (!strm.read_delimiter(total_size)) {
    2213           0 :     return false;
    2214             :   }
    2215             : 
    2216           0 :   const size_t start_pos = strm.rpos();
    2217             : 
    2218           0 :   const bool ret = (strm >> stru.bitmask_flags)
    2219           0 :     && (strm >> stru.header)
    2220           0 :     && (strm >> stru.flag_seq);
    2221             : 
    2222           0 :   if (ret && strm.rpos() - start_pos < total_size) {
    2223           0 :     strm.skip(total_size - strm.rpos() + start_pos);
    2224             :   }
    2225           0 :   return ret;
    2226             : }
    2227             : 
    2228             : 
    2229           0 : void serialized_size(const Encoding& encoding, size_t& size,
    2230             :   const XTypes::MinimalBitmaskType& stru)
    2231             : {
    2232           0 :   serialized_size_delimiter(encoding, size);
    2233           0 :   primitive_serialized_size(encoding, size, stru.bitmask_flags);
    2234           0 :   serialized_size(encoding, size, stru.header);
    2235           0 :   serialized_size(encoding, size, stru.flag_seq);
    2236           0 : }
    2237             : 
    2238           0 : bool operator<<(Serializer& strm, const XTypes::MinimalBitmaskType& stru)
    2239             : {
    2240           0 :   size_t total_size = 0;
    2241           0 :   serialized_size(strm.encoding(), total_size, stru);
    2242           0 :   if (!strm.write_delimiter(total_size)) {
    2243           0 :     return false;
    2244             :   }
    2245             : 
    2246           0 :   return (strm << stru.bitmask_flags)
    2247           0 :     && (strm << stru.header)
    2248           0 :     && (strm << stru.flag_seq);
    2249             : }
    2250             : 
    2251           0 : bool operator>>(Serializer& strm, XTypes::MinimalBitmaskType& stru)
    2252             : {
    2253           0 :   size_t total_size = 0;
    2254           0 :   if (!strm.read_delimiter(total_size)) {
    2255           0 :     return false;
    2256             :   }
    2257             : 
    2258           0 :   const size_t start_pos = strm.rpos();
    2259             : 
    2260           0 :   const bool ret = (strm >> stru.bitmask_flags)
    2261           0 :     && (strm >> stru.header)
    2262           0 :     && (strm >> stru.flag_seq);
    2263             : 
    2264           0 :   if (ret && strm.rpos() - start_pos < total_size) {
    2265           0 :     strm.skip(total_size - strm.rpos() + start_pos);
    2266             :   }
    2267           0 :   return ret;
    2268             : }
    2269             : 
    2270             : 
    2271           0 : void serialized_size(const Encoding& encoding, size_t& size,
    2272             :   const XTypes::CompleteBitsetType& stru)
    2273             : {
    2274           0 :   serialized_size_delimiter(encoding, size);
    2275           0 :   primitive_serialized_size(encoding, size, stru.bitset_flags);
    2276           0 :   serialized_size(encoding, size, stru.header);
    2277           0 :   serialized_size(encoding, size, stru.field_seq);
    2278           0 : }
    2279             : 
    2280           0 : bool operator<<(Serializer& strm, const XTypes::CompleteBitsetType& stru)
    2281             : {
    2282           0 :   size_t total_size = 0;
    2283           0 :   serialized_size(strm.encoding(), total_size, stru);
    2284           0 :   if (!strm.write_delimiter(total_size)) {
    2285           0 :     return false;
    2286             :   }
    2287             : 
    2288           0 :   return (strm << stru.bitset_flags)
    2289           0 :     && (strm << stru.header)
    2290           0 :     && (strm << stru.field_seq);
    2291             : }
    2292             : 
    2293           0 : bool operator>>(Serializer& strm, XTypes::CompleteBitsetType& stru)
    2294             : {
    2295           0 :   size_t total_size = 0;
    2296           0 :   if (!strm.read_delimiter(total_size)) {
    2297           0 :     return false;
    2298             :   }
    2299             : 
    2300           0 :   const size_t start_pos = strm.rpos();
    2301             : 
    2302           0 :   const bool ret = (strm >> stru.bitset_flags)
    2303           0 :     && (strm >> stru.header)
    2304           0 :     && (strm >> stru.field_seq);
    2305             : 
    2306           0 :   if (ret && strm.rpos() - start_pos < total_size) {
    2307           0 :     strm.skip(total_size - strm.rpos() + start_pos);
    2308             :   }
    2309           0 :   return ret;
    2310             : }
    2311             : 
    2312             : 
    2313           0 : void serialized_size(const Encoding& encoding, size_t& size,
    2314             :   const XTypes::MinimalBitsetType& stru)
    2315             : {
    2316           0 :   serialized_size_delimiter(encoding, size);
    2317           0 :   primitive_serialized_size(encoding, size, stru.bitset_flags);
    2318           0 :   serialized_size(encoding, size, stru.header);
    2319           0 :   serialized_size(encoding, size, stru.field_seq);
    2320           0 : }
    2321             : 
    2322           0 : bool operator<<(Serializer& strm, const XTypes::MinimalBitsetType& stru)
    2323             : {
    2324           0 :   size_t total_size = 0;
    2325           0 :   serialized_size(strm.encoding(), total_size, stru);
    2326           0 :   if (!strm.write_delimiter(total_size)) {
    2327           0 :     return false;
    2328             :   }
    2329             : 
    2330           0 :   return (strm << stru.bitset_flags)
    2331           0 :     && (strm << stru.header)
    2332           0 :     && (strm << stru.field_seq);
    2333             : }
    2334             : 
    2335           0 : bool operator>>(Serializer& strm, XTypes::MinimalBitsetType& stru)
    2336             : {
    2337           0 :   size_t total_size = 0;
    2338           0 :   if (!strm.read_delimiter(total_size)) {
    2339           0 :     return false;
    2340             :   }
    2341             : 
    2342           0 :   const size_t start_pos = strm.rpos();
    2343             : 
    2344           0 :   const bool ret = (strm >> stru.bitset_flags)
    2345           0 :     && (strm >> stru.header)
    2346           0 :     && (strm >> stru.field_seq);
    2347             : 
    2348           0 :   if (ret && strm.rpos() - start_pos < total_size) {
    2349           0 :     strm.skip(total_size - strm.rpos() + start_pos);
    2350             :   }
    2351           0 :   return ret;
    2352             : }
    2353             : 
    2354             : 
    2355           0 : void serialized_size(const Encoding& encoding, size_t& size,
    2356             :   const XTypes::CompleteExtendedType&)
    2357             : {
    2358           0 :   serialized_size_delimiter(encoding, size);
    2359           0 : }
    2360             : 
    2361           0 : bool operator<<(Serializer& strm, const XTypes::CompleteExtendedType&)
    2362             : {
    2363           0 :   return XTypes::write_empty_xcdr2_nonfinal(strm);
    2364             : }
    2365             : 
    2366           0 : bool operator>>(Serializer& strm, XTypes::CompleteExtendedType&)
    2367             : {
    2368           0 :   return XTypes::read_empty_xcdr2_nonfinal(strm);
    2369             : }
    2370             : 
    2371             : 
    2372         810 : void serialized_size(const Encoding& encoding, size_t& size,
    2373             :   const XTypes::TypeIdentifierWithSize& stru)
    2374             : {
    2375         810 :   serialized_size_delimiter(encoding, size);
    2376         810 :   serialized_size(encoding, size, stru.type_id);
    2377         810 :   primitive_serialized_size(encoding, size, stru.typeobject_serialized_size);
    2378         810 : }
    2379             : 
    2380           0 : void serialized_size(const Encoding& encoding, size_t& size,
    2381             :                      const NestedKeyOnly<const XTypes::TypeIdentifierWithSize>& stru)
    2382             : {
    2383           0 :   serialized_size(encoding, size, stru.value);
    2384           0 : }
    2385             : 
    2386         162 : bool operator<<(Serializer& strm, const XTypes::TypeIdentifierWithSize& stru)
    2387             : {
    2388         162 :   size_t total_size = 0;
    2389         162 :   serialized_size(strm.encoding(), total_size, stru);
    2390         162 :   if (!strm.write_delimiter(total_size)) {
    2391           0 :     return false;
    2392             :   }
    2393             : 
    2394         162 :   return (strm << stru.type_id)
    2395         162 :     && (strm << stru.typeobject_serialized_size);
    2396             : }
    2397             : 
    2398           0 : bool operator<<(Serializer& strm, const NestedKeyOnly<const XTypes::TypeIdentifierWithSize>& stru)
    2399             : {
    2400           0 :   return (strm << stru.value);
    2401             : }
    2402             : 
    2403          78 : bool operator>>(Serializer& strm, XTypes::TypeIdentifierWithSize& stru)
    2404             : {
    2405          78 :   size_t total_size = 0;
    2406          78 :   if (!strm.read_delimiter(total_size)) {
    2407           0 :     return false;
    2408             :   }
    2409             : 
    2410          78 :   const size_t start_pos = strm.rpos();
    2411             : 
    2412          78 :   const bool ret = (strm >> stru.type_id)
    2413          78 :     && (strm >> stru.typeobject_serialized_size);
    2414             : 
    2415          78 :   if (ret && strm.rpos() - start_pos < total_size) {
    2416           0 :     strm.skip(total_size - strm.rpos() + start_pos);
    2417             :   }
    2418          78 :   return ret;
    2419             : }
    2420             : 
    2421           0 : bool operator>>(Serializer& strm, NestedKeyOnly<XTypes::TypeIdentifierWithSize>& stru)
    2422             : {
    2423           0 :   return (strm >> stru.value);
    2424             : }
    2425             : 
    2426         648 : void serialized_size(const Encoding& encoding, size_t& size,
    2427             :   const XTypes::TypeIdentifierWithDependencies& stru)
    2428             : {
    2429         648 :   serialized_size_delimiter(encoding, size);
    2430         648 :   serialized_size(encoding, size, stru.typeid_with_size);
    2431         648 :   primitive_serialized_size(encoding, size, stru.dependent_typeid_count);
    2432         648 :   serialized_size(encoding, size, stru.dependent_typeids);
    2433         648 : }
    2434             : 
    2435         162 : bool operator<<(Serializer& strm, const XTypes::TypeIdentifierWithDependencies& stru)
    2436             : {
    2437         162 :   size_t total_size = 0;
    2438         162 :   serialized_size(strm.encoding(), total_size, stru);
    2439         162 :   if (!strm.write_delimiter(total_size)) {
    2440           0 :     return false;
    2441             :   }
    2442             : 
    2443         162 :   return (strm << stru.typeid_with_size)
    2444         162 :     && (strm << stru.dependent_typeid_count)
    2445         324 :     && (strm << stru.dependent_typeids);
    2446             : }
    2447             : 
    2448          78 : bool operator>>(Serializer& strm, XTypes::TypeIdentifierWithDependencies& stru)
    2449             : {
    2450          78 :   size_t total_size = 0;
    2451          78 :   if (!strm.read_delimiter(total_size)) {
    2452           0 :     return false;
    2453             :   }
    2454             : 
    2455          78 :   const size_t start_pos = strm.rpos();
    2456             : 
    2457          78 :   const bool ret = (strm >> stru.typeid_with_size)
    2458          78 :     && (strm >> stru.dependent_typeid_count)
    2459         156 :     && (strm >> stru.dependent_typeids);
    2460             : 
    2461          78 :   if (ret && strm.rpos() - start_pos < total_size) {
    2462           0 :     strm.skip(total_size - strm.rpos() + start_pos);
    2463             :   }
    2464          78 :   return ret;
    2465             : }
    2466             : 
    2467             : 
    2468           0 : void serialized_size(const Encoding& encoding, size_t& size,
    2469             :   const XTypes::AppliedAnnotation& stru)
    2470             : {
    2471           0 :   serialized_size_delimiter(encoding, size);
    2472           0 :   serialized_size(encoding, size, stru.annotation_typeid);
    2473           0 :   serialized_size(encoding, size, stru.param_seq);
    2474           0 : }
    2475             : 
    2476           0 : bool operator<<(Serializer& strm, const XTypes::AppliedAnnotation& stru)
    2477             : {
    2478           0 :   size_t total_size = 0;
    2479           0 :   serialized_size(strm.encoding(), total_size, stru);
    2480           0 :   if (!strm.write_delimiter(total_size)) {
    2481           0 :     return false;
    2482             :   }
    2483             : 
    2484           0 :   return (strm << stru.annotation_typeid)
    2485           0 :     && (strm << stru.param_seq);
    2486             : }
    2487             : 
    2488           0 : bool operator>>(Serializer& strm, XTypes::AppliedAnnotation& stru)
    2489             : {
    2490           0 :   size_t total_size = 0;
    2491           0 :   if (!strm.read_delimiter(total_size)) {
    2492           0 :     return false;
    2493             :   }
    2494             : 
    2495           0 :   const size_t start_pos = strm.rpos();
    2496           0 :   const bool ret = (strm >> stru.annotation_typeid)
    2497           0 :     && (strm >> stru.param_seq);
    2498             : 
    2499           0 :   if (ret && strm.rpos() - start_pos < total_size) {
    2500           0 :     strm.skip(total_size - strm.rpos() + start_pos);
    2501             :   }
    2502           0 :   return ret;
    2503             : }
    2504             : 
    2505             : 
    2506           0 : void serialized_size(const Encoding& encoding, size_t& size,
    2507             :   const XTypes::AppliedBuiltinTypeAnnotations& stru)
    2508             : {
    2509           0 :   serialized_size_delimiter(encoding, size);
    2510           0 :   serialized_size(encoding, size, stru.verbatim);
    2511           0 : }
    2512             : 
    2513           0 : bool operator<<(Serializer& strm, const XTypes::AppliedBuiltinTypeAnnotations& stru)
    2514             : {
    2515           0 :   size_t total_size = 0;
    2516           0 :   serialized_size(strm.encoding(), total_size, stru);
    2517           0 :   if (!strm.write_delimiter(total_size)) {
    2518           0 :     return false;
    2519             :   }
    2520             : 
    2521           0 :   return (strm << stru.verbatim);
    2522             : }
    2523             : 
    2524           0 : bool operator>>(Serializer& strm, XTypes::AppliedBuiltinTypeAnnotations& stru)
    2525             : {
    2526           0 :   size_t total_size = 0;
    2527           0 :   if (!strm.read_delimiter(total_size)) {
    2528           0 :     return false;
    2529             :   }
    2530             : 
    2531           0 :   const size_t start_pos = strm.rpos();
    2532             : 
    2533           0 :   const bool ret = (strm >> stru.verbatim);
    2534             : 
    2535           0 :   if (ret && strm.rpos() - start_pos < total_size) {
    2536           0 :     strm.skip(total_size - strm.rpos() + start_pos);
    2537             :   }
    2538           0 :   return ret;
    2539             : }
    2540             : 
    2541             : 
    2542          49 : void serialized_size(const Encoding& encoding, size_t& size,
    2543             :   const XTypes::CompleteAliasBody& stru)
    2544             : {
    2545          49 :   serialized_size_delimiter(encoding, size);
    2546          49 :   serialized_size(encoding, size, stru.common);
    2547          49 :   serialized_size(encoding, size, stru.ann_builtin);
    2548          49 :   serialized_size(encoding, size, stru.ann_custom);
    2549          49 : }
    2550             : 
    2551           0 : bool operator<<(Serializer& strm, const XTypes::CompleteAliasBody& stru)
    2552             : {
    2553           0 :   size_t total_size = 0;
    2554           0 :   serialized_size(strm.encoding(), total_size, stru);
    2555           0 :   if (!strm.write_delimiter(total_size)) {
    2556           0 :     return false;
    2557             :   }
    2558             : 
    2559           0 :   return (strm << stru.common)
    2560           0 :     && (strm << stru.ann_builtin)
    2561           0 :     && (strm << stru.ann_custom);
    2562             : }
    2563             : 
    2564          94 : bool operator>>(Serializer& strm, XTypes::CompleteAliasBody& stru)
    2565             : {
    2566          94 :   size_t total_size = 0;
    2567          94 :   if (!strm.read_delimiter(total_size)) {
    2568           0 :     return false;
    2569             :   }
    2570             : 
    2571          94 :   const size_t start_pos = strm.rpos();
    2572             : 
    2573          94 :   const bool ret = (strm >> stru.common)
    2574          94 :     && (strm >> stru.ann_builtin)
    2575         188 :     && (strm >> stru.ann_custom);
    2576             : 
    2577          94 :   if (ret && strm.rpos() - start_pos < total_size) {
    2578           0 :     strm.skip(total_size - strm.rpos() + start_pos);
    2579             :   }
    2580          94 :   return ret;
    2581             : }
    2582             : 
    2583             : 
    2584          49 : void serialized_size(const Encoding& encoding, size_t& size,
    2585             :   const XTypes::CompleteAliasHeader& stru)
    2586             : {
    2587          49 :   serialized_size_delimiter(encoding, size);
    2588          49 :   serialized_size(encoding, size, stru.detail);
    2589          49 : }
    2590             : 
    2591           0 : bool operator<<(Serializer& strm, const XTypes::CompleteAliasHeader& stru)
    2592             : {
    2593           0 :   size_t total_size = 0;
    2594           0 :   serialized_size(strm.encoding(), total_size, stru);
    2595           0 :   if (!strm.write_delimiter(total_size)) {
    2596           0 :     return false;
    2597             :   }
    2598             : 
    2599           0 :   return (strm << stru.detail);
    2600             : }
    2601             : 
    2602          94 : bool operator>>(Serializer& strm, XTypes::CompleteAliasHeader& stru)
    2603             : {
    2604          94 :   size_t total_size = 0;
    2605          94 :   if (!strm.read_delimiter(total_size)) {
    2606           0 :     return false;
    2607             :   }
    2608             : 
    2609          94 :   const size_t start_pos = strm.rpos();
    2610             : 
    2611          94 :   const bool ret = (strm >> stru.detail);
    2612             : 
    2613          94 :   if (ret && strm.rpos() - start_pos < total_size) {
    2614           0 :     strm.skip(total_size - strm.rpos() + start_pos);
    2615             :   }
    2616          94 :   return ret;
    2617             : }
    2618             : 
    2619             : 
    2620           0 : void serialized_size(const Encoding& encoding, size_t& size,
    2621             :   const XTypes::CompleteAnnotationHeader& stru)
    2622             : {
    2623           0 :   serialized_size_delimiter(encoding, size);
    2624           0 :   DCPS::primitive_serialized_size_ulong(encoding, size);
    2625           0 :   size += ACE_OS::strlen(stru.annotation_name.c_str()) + 1;
    2626           0 : }
    2627             : 
    2628           0 : bool operator<<(Serializer& strm, const XTypes::CompleteAnnotationHeader& stru)
    2629             : {
    2630           0 :   size_t total_size = 0;
    2631           0 :   serialized_size(strm.encoding(), total_size, stru);
    2632           0 :   if (!strm.write_delimiter(total_size)) {
    2633           0 :     return false;
    2634             :   }
    2635             : 
    2636           0 :   return (strm << Serializer::FromBoundedString<char>(stru.annotation_name, TYPE_NAME_MAX_LENGTH));
    2637             : }
    2638             : 
    2639           0 : bool operator>>(Serializer& strm, XTypes::CompleteAnnotationHeader& stru)
    2640             : {
    2641           0 :   size_t total_size = 0;
    2642           0 :   if (!strm.read_delimiter(total_size)) {
    2643           0 :     return false;
    2644             :   }
    2645             : 
    2646           0 :   const size_t start_pos = strm.rpos();
    2647             : 
    2648           0 :   const bool ret = (strm >> Serializer::ToBoundedString<char>(stru.annotation_name, TYPE_NAME_MAX_LENGTH));
    2649             : 
    2650           0 :   if (ret && strm.rpos() - start_pos < total_size) {
    2651           0 :     strm.skip(total_size - strm.rpos() + start_pos);
    2652             :   }
    2653           0 :   return ret;
    2654             : }
    2655             : 
    2656             : 
    2657           0 : void serialized_size(const Encoding& encoding, size_t& size,
    2658             :   const XTypes::CompleteAnnotationParameter& stru)
    2659             : {
    2660           0 :   serialized_size_delimiter(encoding, size);
    2661           0 :   serialized_size(encoding, size, stru.common);
    2662           0 :   primitive_serialized_size_ulong(encoding, size);
    2663           0 :   size += ACE_OS::strlen(stru.name.c_str()) + 1;
    2664           0 :   serialized_size(encoding, size, stru.default_value);
    2665           0 : }
    2666             : 
    2667           0 : bool operator<<(Serializer& strm, const XTypes::CompleteAnnotationParameter& stru)
    2668             : {
    2669           0 :   size_t total_size = 0;
    2670           0 :   serialized_size(strm.encoding(), total_size, stru);
    2671           0 :   if (!strm.write_delimiter(total_size)) {
    2672           0 :     return false;
    2673             :   }
    2674             : 
    2675           0 :   return (strm << stru.common)
    2676           0 :     && (strm << Serializer::FromBoundedString<char>(stru.name, MEMBER_NAME_MAX_LENGTH))
    2677           0 :     && (strm << stru.default_value);
    2678             : }
    2679             : 
    2680           0 : bool operator>>(Serializer& strm, XTypes::CompleteAnnotationParameter& stru)
    2681             : {
    2682           0 :   size_t total_size = 0;
    2683           0 :   if (!strm.read_delimiter(total_size)) {
    2684           0 :     return false;
    2685             :   }
    2686             : 
    2687           0 :   const size_t start_pos = strm.rpos();
    2688             : 
    2689           0 :   const bool ret = (strm >> stru.common)
    2690           0 :     && (strm >> Serializer::ToBoundedString<char>(stru.name, MEMBER_NAME_MAX_LENGTH))
    2691           0 :     && (strm >> stru.default_value);
    2692             : 
    2693           0 :   if (ret && strm.rpos() - start_pos < total_size) {
    2694           0 :     strm.skip(total_size - strm.rpos() + start_pos);
    2695             :   }
    2696           0 :   return ret;
    2697             : }
    2698             : 
    2699             : 
    2700           0 : void serialized_size(const Encoding& encoding, size_t& size,
    2701             :   const XTypes::CompleteArrayHeader& stru)
    2702             : {
    2703           0 :   serialized_size_delimiter(encoding, size);
    2704           0 :   serialized_size(encoding, size, stru.common);
    2705           0 :   serialized_size(encoding, size, stru.detail);
    2706           0 : }
    2707             : 
    2708           0 : bool operator<<(Serializer& strm, const XTypes::CompleteArrayHeader& stru)
    2709             : {
    2710           0 :   size_t total_size = 0;
    2711           0 :   serialized_size(strm.encoding(), total_size, stru);
    2712           0 :   if (!strm.write_delimiter(total_size)) {
    2713           0 :     return false;
    2714             :   }
    2715             : 
    2716           0 :   return (strm << stru.common)
    2717           0 :     && (strm << stru.detail);
    2718             : }
    2719             : 
    2720           1 : bool operator>>(Serializer& strm, XTypes::CompleteArrayHeader& stru)
    2721             : {
    2722           1 :   size_t total_size = 0;
    2723           1 :   if (!strm.read_delimiter(total_size)) {
    2724           0 :     return false;
    2725             :   }
    2726             : 
    2727           1 :   const size_t start_pos = strm.rpos();
    2728             : 
    2729           1 :   const bool ret = (strm >> stru.common)
    2730           1 :     && (strm >> stru.detail);
    2731             : 
    2732           1 :   if (ret && strm.rpos() - start_pos < total_size) {
    2733           0 :     strm.skip(total_size - strm.rpos() + start_pos);
    2734             :   }
    2735           1 :   return ret;
    2736             : }
    2737             : 
    2738             : 
    2739           0 : void serialized_size(const Encoding& encoding, size_t& size,
    2740             :   const XTypes::CompleteBitfield& stru)
    2741             : {
    2742           0 :   serialized_size_delimiter(encoding, size);
    2743           0 :   serialized_size(encoding, size, stru.common);
    2744           0 :   serialized_size(encoding, size, stru.detail);
    2745           0 : }
    2746             : 
    2747           0 : bool operator<<(Serializer& strm, const XTypes::CompleteBitfield& stru)
    2748             : {
    2749           0 :   size_t total_size = 0;
    2750           0 :   serialized_size(strm.encoding(), total_size, stru);
    2751           0 :   if (!strm.write_delimiter(total_size)) {
    2752           0 :     return false;
    2753             :   }
    2754             : 
    2755           0 :   return (strm << stru.common)
    2756           0 :     && (strm << stru.detail);
    2757             : }
    2758             : 
    2759           0 : bool operator>>(Serializer& strm, XTypes::CompleteBitfield& stru)
    2760             : {
    2761           0 :   size_t total_size = 0;
    2762           0 :   if (!strm.read_delimiter(total_size)) {
    2763           0 :     return false;
    2764             :   }
    2765             : 
    2766           0 :   const size_t start_pos = strm.rpos();
    2767             : 
    2768           0 :   const bool ret = (strm >> stru.common)
    2769           0 :     && (strm >> stru.detail);
    2770             : 
    2771           0 :   if (ret && strm.rpos() - start_pos < total_size) {
    2772           0 :     strm.skip(total_size - strm.rpos() + start_pos);
    2773             :   }
    2774           0 :   return ret;
    2775             : }
    2776             : 
    2777             : 
    2778           0 : void serialized_size(const Encoding& encoding, size_t& size,
    2779             :   const XTypes::CompleteBitflag& stru)
    2780             : {
    2781           0 :   serialized_size_delimiter(encoding, size);
    2782           0 :   serialized_size(encoding, size, stru.common);
    2783           0 :   serialized_size(encoding, size, stru.detail);
    2784           0 : }
    2785             : 
    2786           0 : bool operator<<(Serializer& strm, const XTypes::CompleteBitflag& stru)
    2787             : {
    2788           0 :   size_t total_size = 0;
    2789           0 :   serialized_size(strm.encoding(), total_size, stru);
    2790           0 :   if (!strm.write_delimiter(total_size)) {
    2791           0 :     return false;
    2792             :   }
    2793             : 
    2794           0 :   return (strm << stru.common)
    2795           0 :     && (strm << stru.detail);
    2796             : }
    2797             : 
    2798           0 : bool operator>>(Serializer& strm, XTypes::CompleteBitflag& stru)
    2799             : {
    2800           0 :   size_t total_size = 0;
    2801           0 :   if (!strm.read_delimiter(total_size)) {
    2802           0 :     return false;
    2803             :   }
    2804             : 
    2805           0 :   const size_t start_pos = strm.rpos();
    2806             : 
    2807           0 :   const bool ret = (strm >> stru.common)
    2808           0 :     && (strm >> stru.detail);
    2809             : 
    2810           0 :   if (ret && strm.rpos() - start_pos < total_size) {
    2811           0 :     strm.skip(total_size - strm.rpos() + start_pos);
    2812             :   }
    2813           0 :   return ret;
    2814             : }
    2815             : 
    2816             : 
    2817           0 : void serialized_size(const Encoding& encoding, size_t& size,
    2818             :   const XTypes::CompleteBitsetHeader& stru)
    2819             : {
    2820           0 :   serialized_size_delimiter(encoding, size);
    2821           0 :   serialized_size(encoding, size, stru.detail);
    2822           0 : }
    2823             : 
    2824           0 : bool operator<<(Serializer& strm, const XTypes::CompleteBitsetHeader& stru)
    2825             : {
    2826           0 :   size_t total_size = 0;
    2827           0 :   serialized_size(strm.encoding(), total_size, stru);
    2828           0 :   if (!strm.write_delimiter(total_size)) {
    2829           0 :     return false;
    2830             :   }
    2831             : 
    2832           0 :   return (strm << stru.detail);
    2833             : }
    2834             : 
    2835           0 : bool operator>>(Serializer& strm, XTypes::CompleteBitsetHeader& stru)
    2836             : {
    2837           0 :   size_t total_size = 0;
    2838           0 :   if (!strm.read_delimiter(total_size)) {
    2839           0 :     return false;
    2840             :   }
    2841             : 
    2842           0 :   const size_t start_pos = strm.rpos();
    2843             : 
    2844           0 :   const bool ret = (strm >> stru.detail);
    2845             : 
    2846           0 :   if (ret && strm.rpos() - start_pos < total_size) {
    2847           0 :     strm.skip(total_size - strm.rpos() + start_pos);
    2848             :   }
    2849           0 :   return ret;
    2850             : }
    2851             : 
    2852             : 
    2853           0 : void serialized_size(const Encoding& encoding, size_t& size,
    2854             :   const XTypes::CompleteCollectionElement& stru)
    2855             : {
    2856           0 :   serialized_size_delimiter(encoding, size);
    2857           0 :   serialized_size(encoding, size, stru.common);
    2858           0 :   serialized_size(encoding, size, stru.detail);
    2859           0 : }
    2860             : 
    2861           0 : bool operator<<(Serializer& strm, const XTypes::CompleteCollectionElement& stru)
    2862             : {
    2863           0 :   size_t total_size = 0;
    2864           0 :   serialized_size(strm.encoding(), total_size, stru);
    2865           0 :   if (!strm.write_delimiter(total_size)) {
    2866           0 :     return false;
    2867             :   }
    2868             : 
    2869           0 :   return (strm << stru.common)
    2870           0 :     && (strm << stru.detail);
    2871             : }
    2872             : 
    2873           7 : bool operator>>(Serializer& strm, XTypes::CompleteCollectionElement& stru)
    2874             : {
    2875           7 :   size_t total_size = 0;
    2876           7 :   if (!strm.read_delimiter(total_size)) {
    2877           0 :     return false;
    2878             :   }
    2879             : 
    2880           7 :   const size_t start_pos = strm.rpos();
    2881             : 
    2882           7 :   const bool ret = (strm >> stru.common)
    2883           7 :     && (strm >> stru.detail);
    2884             : 
    2885           7 :   if (ret && strm.rpos() - start_pos < total_size) {
    2886           0 :     strm.skip(total_size - strm.rpos() + start_pos);
    2887             :   }
    2888           7 :   return ret;
    2889             : }
    2890             : 
    2891             : 
    2892           0 : void serialized_size(const Encoding& encoding, size_t& size,
    2893             :   const XTypes::CompleteCollectionHeader& stru)
    2894             : {
    2895           0 :   serialized_size_delimiter(encoding, size);
    2896           0 :   serialized_size(encoding, size, stru.common);
    2897           0 :   serialized_size(encoding, size, stru.detail);
    2898           0 : }
    2899             : 
    2900           0 : bool operator<<(Serializer& strm, const XTypes::CompleteCollectionHeader& stru)
    2901             : {
    2902           0 :   size_t total_size = 0;
    2903           0 :   serialized_size(strm.encoding(), total_size, stru);
    2904           0 :   if (!strm.write_delimiter(total_size)) {
    2905           0 :     return false;
    2906             :   }
    2907             : 
    2908           0 :   return (strm << stru.common)
    2909           0 :     && (strm << stru.detail);
    2910             : }
    2911             : 
    2912           6 : bool operator>>(Serializer& strm, XTypes::CompleteCollectionHeader& stru)
    2913             : {
    2914           6 :   size_t total_size = 0;
    2915           6 :   if (!strm.read_delimiter(total_size)) {
    2916           0 :     return false;
    2917             :   }
    2918             : 
    2919           6 :   const size_t start_pos = strm.rpos();
    2920             : 
    2921           6 :   const bool ret = (strm >> stru.common)
    2922           6 :     && (strm >> stru.detail);
    2923             : 
    2924           6 :   if (ret && strm.rpos() - start_pos < total_size) {
    2925           0 :     strm.skip(total_size - strm.rpos() + start_pos);
    2926             :   }
    2927           6 :   return ret;
    2928             : }
    2929             : 
    2930             : 
    2931          34 : void serialized_size(const Encoding& encoding, size_t& size,
    2932             :   const XTypes::CompleteDiscriminatorMember& stru)
    2933             : {
    2934          34 :   serialized_size_delimiter(encoding, size);
    2935          34 :   serialized_size(encoding, size, stru.common);
    2936          34 :   serialized_size(encoding, size, stru.ann_builtin);
    2937          34 :   serialized_size(encoding, size, stru.ann_custom);
    2938          34 : }
    2939             : 
    2940           0 : bool operator<<(Serializer& strm, const XTypes::CompleteDiscriminatorMember& stru)
    2941             : {
    2942           0 :   size_t total_size = 0;
    2943           0 :   serialized_size(strm.encoding(), total_size, stru);
    2944           0 :   if (!strm.write_delimiter(total_size)) {
    2945           0 :     return false;
    2946             :   }
    2947             : 
    2948           0 :   return (strm << stru.common)
    2949           0 :     && (strm << stru.ann_builtin)
    2950           0 :     && (strm << stru.ann_custom);
    2951             : }
    2952             : 
    2953          29 : bool operator>>(Serializer& strm, XTypes::CompleteDiscriminatorMember& stru)
    2954             : {
    2955          29 :   size_t total_size = 0;
    2956          29 :   if (!strm.read_delimiter(total_size)) {
    2957           0 :     return false;
    2958             :   }
    2959             : 
    2960          29 :   const size_t start_pos = strm.rpos();
    2961             : 
    2962          29 :   const bool ret = (strm >> stru.common)
    2963          29 :     && (strm >> stru.ann_builtin)
    2964          58 :     && (strm >> stru.ann_custom);
    2965             : 
    2966          29 :   if (ret && strm.rpos() - start_pos < total_size) {
    2967           0 :     strm.skip(total_size - strm.rpos() + start_pos);
    2968             :   }
    2969          29 :   return ret;
    2970             : }
    2971             : 
    2972             : 
    2973          65 : void serialized_size(const Encoding& encoding, size_t& size,
    2974             :   const XTypes::CompleteEnumeratedLiteral& stru)
    2975             : {
    2976          65 :   serialized_size_delimiter(encoding, size);
    2977          65 :   serialized_size(encoding, size, stru.common);
    2978          65 :   serialized_size(encoding, size, stru.detail);
    2979          65 : }
    2980             : 
    2981           0 : bool operator<<(Serializer& strm, const XTypes::CompleteEnumeratedLiteral& stru)
    2982             : {
    2983           0 :   size_t total_size = 0;
    2984           0 :   serialized_size(strm.encoding(), total_size, stru);
    2985           0 :   if (!strm.write_delimiter(total_size)) {
    2986           0 :     return false;
    2987             :   }
    2988             : 
    2989           0 :   return (strm << stru.common)
    2990           0 :     && (strm << stru.detail);
    2991             : }
    2992             : 
    2993          61 : bool operator>>(Serializer& strm, XTypes::CompleteEnumeratedLiteral& stru)
    2994             : {
    2995          61 :   size_t total_size = 0;
    2996          61 :   if (!strm.read_delimiter(total_size)) {
    2997           0 :     return false;
    2998             :   }
    2999             : 
    3000          61 :   const size_t start_pos = strm.rpos();
    3001             : 
    3002          61 :   const bool ret = (strm >> stru.common)
    3003          61 :     && (strm >> stru.detail);
    3004             : 
    3005          61 :   if (ret && strm.rpos() - start_pos < total_size) {
    3006           0 :     strm.skip(total_size - strm.rpos() + start_pos);
    3007             :   }
    3008          61 :   return ret;
    3009             : }
    3010             : 
    3011             : 
    3012         283 : void serialized_size(const Encoding& encoding, size_t& size,
    3013             :   const XTypes::CompleteStructMember& stru)
    3014             : {
    3015         283 :   serialized_size_delimiter(encoding, size);
    3016         283 :   serialized_size(encoding, size, stru.common);
    3017         283 :   serialized_size(encoding, size, stru.detail);
    3018         283 : }
    3019             : 
    3020           0 : bool operator<<(Serializer& strm, const XTypes::CompleteStructMember& stru)
    3021             : {
    3022           0 :   size_t total_size = 0;
    3023           0 :   serialized_size(strm.encoding(), total_size, stru);
    3024           0 :   if (!strm.write_delimiter(total_size)) {
    3025           0 :     return false;
    3026             :   }
    3027             : 
    3028           0 :   return (strm << stru.common)
    3029           0 :     && (strm << stru.detail);
    3030             : }
    3031             : 
    3032         490 : bool operator>>(Serializer& strm, XTypes::CompleteStructMember& stru)
    3033             : {
    3034         490 :   size_t total_size = 0;
    3035         490 :   if (!strm.read_delimiter(total_size)) {
    3036           0 :     return false;
    3037             :   }
    3038             : 
    3039         490 :   const size_t start_pos = strm.rpos();
    3040             : 
    3041         490 :   const bool ret = (strm >> stru.common)
    3042         490 :     && (strm >> stru.detail);
    3043             : 
    3044         490 :   if (ret && strm.rpos() - start_pos < total_size) {
    3045           0 :     strm.skip(total_size - strm.rpos() + start_pos);
    3046             :   }
    3047             : 
    3048         490 :   return ret;
    3049             : }
    3050             : 
    3051             : 
    3052          34 : void serialized_size(const Encoding& encoding, size_t& size,
    3053             :   const XTypes::CompleteUnionHeader& stru)
    3054             : {
    3055          34 :   serialized_size_delimiter(encoding, size);
    3056          34 :   serialized_size(encoding, size, stru.detail);
    3057          34 : }
    3058             : 
    3059           0 : bool operator<<(Serializer& strm, const XTypes::CompleteUnionHeader& stru)
    3060             : {
    3061           0 :   size_t total_size = 0;
    3062           0 :   serialized_size(strm.encoding(), total_size, stru);
    3063           0 :   if (!strm.write_delimiter(total_size)) {
    3064           0 :     return false;
    3065             :   }
    3066             : 
    3067           0 :   return (strm << stru.detail);
    3068             : }
    3069             : 
    3070          29 : bool operator>>(Serializer& strm, XTypes::CompleteUnionHeader& stru)
    3071             : {
    3072          29 :   size_t total_size = 0;
    3073          29 :   if (!strm.read_delimiter(total_size)) {
    3074           0 :     return false;
    3075             :   }
    3076             : 
    3077          29 :   const size_t start_pos = strm.rpos();
    3078             : 
    3079          29 :   const bool ret = (strm >> stru.detail);
    3080             : 
    3081          29 :   if (ret && strm.rpos() - start_pos < total_size) {
    3082           0 :     strm.skip(total_size - strm.rpos() + start_pos);
    3083             :   }
    3084          29 :   return ret;
    3085             : }
    3086             : 
    3087             : 
    3088          99 : void serialized_size(const Encoding& encoding, size_t& size,
    3089             :   const XTypes::CompleteUnionMember& stru)
    3090             : {
    3091          99 :   serialized_size_delimiter(encoding, size);
    3092          99 :   serialized_size(encoding, size, stru.common);
    3093          99 :   serialized_size(encoding, size, stru.detail);
    3094          99 : }
    3095             : 
    3096           0 : bool operator<<(Serializer& strm, const XTypes::CompleteUnionMember& stru)
    3097             : {
    3098           0 :   size_t total_size = 0;
    3099           0 :   serialized_size(strm.encoding(), total_size, stru);
    3100           0 :   if (!strm.write_delimiter(total_size)) {
    3101           0 :     return false;
    3102             :   }
    3103             : 
    3104           0 :   return (strm << stru.common)
    3105           0 :     && (strm << stru.detail);
    3106             : }
    3107             : 
    3108         263 : bool operator>>(Serializer& strm, XTypes::CompleteUnionMember& stru)
    3109             : {
    3110         263 :   size_t total_size = 0;
    3111         263 :   if (!strm.read_delimiter(total_size)) {
    3112           0 :     return false;
    3113             :   }
    3114             : 
    3115         263 :   const size_t start_pos = strm.rpos();
    3116             : 
    3117         263 :   const bool ret = (strm >> stru.common)
    3118         263 :     && (strm >> stru.detail);
    3119             : 
    3120         263 :   if (ret && strm.rpos() - start_pos < total_size) {
    3121           0 :     strm.skip(total_size - strm.rpos() + start_pos);
    3122             :   }
    3123         263 :   return ret;
    3124             : }
    3125             : 
    3126             : 
    3127          49 : void serialized_size(const Encoding& encoding, size_t& size,
    3128             :   const XTypes::MinimalAliasBody& stru)
    3129             : {
    3130          49 :   serialized_size_delimiter(encoding, size);
    3131          49 :   serialized_size(encoding, size, stru.common);
    3132          49 : }
    3133             : 
    3134           0 : bool operator<<(Serializer& strm, const XTypes::MinimalAliasBody& stru)
    3135             : {
    3136           0 :   size_t total_size = 0;
    3137           0 :   serialized_size(strm.encoding(), total_size, stru);
    3138           0 :   if (!strm.write_delimiter(total_size)) {
    3139           0 :     return false;
    3140             :   }
    3141             : 
    3142           0 :   return (strm << stru.common);
    3143             : }
    3144             : 
    3145          54 : bool operator>>(Serializer& strm, XTypes::MinimalAliasBody& stru)
    3146             : {
    3147          54 :   size_t total_size = 0;
    3148          54 :   if (!strm.read_delimiter(total_size)) {
    3149           0 :     return false;
    3150             :   }
    3151             : 
    3152          54 :   const size_t start_pos = strm.rpos();
    3153             : 
    3154          54 :   const bool ret = (strm >> stru.common);
    3155             : 
    3156          54 :   if (ret && strm.rpos() - start_pos < total_size) {
    3157           0 :     strm.skip(total_size - strm.rpos() + start_pos);
    3158             :   }
    3159          54 :   return ret;
    3160             : }
    3161             : 
    3162             : 
    3163          49 : void serialized_size(const Encoding& encoding, size_t& size,
    3164             :   const XTypes::MinimalAliasHeader&)
    3165             : {
    3166          49 :   serialized_size_delimiter(encoding, size);
    3167          49 : }
    3168             : 
    3169           0 : bool operator<<(Serializer& strm, const XTypes::MinimalAliasHeader&)
    3170             : {
    3171           0 :   return XTypes::write_empty_xcdr2_nonfinal(strm);
    3172             : }
    3173             : 
    3174          54 : bool operator>>(Serializer& strm, XTypes::MinimalAliasHeader&)
    3175             : {
    3176          54 :   return XTypes::read_empty_xcdr2_nonfinal(strm);
    3177             : }
    3178             : 
    3179             : 
    3180           0 : void serialized_size(const Encoding& encoding, size_t& size,
    3181             :   const XTypes::MinimalAnnotationHeader&)
    3182             : {
    3183           0 :   serialized_size_delimiter(encoding, size);
    3184           0 : }
    3185             : 
    3186           0 : bool operator<<(Serializer& strm, const XTypes::MinimalAnnotationHeader&)
    3187             : {
    3188           0 :   return XTypes::write_empty_xcdr2_nonfinal(strm);
    3189             : }
    3190             : 
    3191           0 : bool operator>>(Serializer& strm, XTypes::MinimalAnnotationHeader&)
    3192             : {
    3193           0 :   return XTypes::read_empty_xcdr2_nonfinal(strm);
    3194             : }
    3195             : 
    3196             : 
    3197           0 : void serialized_size(const Encoding& encoding, size_t& size,
    3198             :   const XTypes::MinimalAnnotationParameter& stru)
    3199             : {
    3200           0 :   serialized_size_delimiter(encoding, size);
    3201           0 :   XTypes::NameHash_forany stru_name_hash(const_cast<XTypes::NameHash_slice*>(stru.name_hash));
    3202           0 :   serialized_size(encoding, size, stru.common);
    3203           0 :   serialized_size(encoding, size, stru_name_hash);
    3204           0 :   serialized_size(encoding, size, stru.default_value);
    3205           0 : }
    3206             : 
    3207           0 : bool operator<<(Serializer& strm, const XTypes::MinimalAnnotationParameter& stru)
    3208             : {
    3209           0 :   size_t total_size = 0;
    3210           0 :   serialized_size(strm.encoding(), total_size, stru);
    3211           0 :   if (!strm.write_delimiter(total_size)) {
    3212           0 :     return false;
    3213             :   }
    3214             : 
    3215           0 :   XTypes::NameHash_forany stru_name_hash(const_cast<XTypes::NameHash_slice*>(stru.name_hash));
    3216           0 :   return (strm << stru.common)
    3217           0 :     && (strm << stru_name_hash)
    3218           0 :     && (strm << stru.default_value);
    3219             : }
    3220             : 
    3221           0 : bool operator>>(Serializer& strm, XTypes::MinimalAnnotationParameter& stru)
    3222             : {
    3223           0 :   XTypes::NameHash_forany stru_name_hash(const_cast<XTypes::NameHash_slice*>(stru.name_hash));
    3224           0 :   size_t total_size = 0;
    3225           0 :   if (!strm.read_delimiter(total_size)) {
    3226           0 :     return false;
    3227             :   }
    3228             : 
    3229           0 :   const size_t start_pos = strm.rpos();
    3230             : 
    3231           0 :   const bool ret = (strm >> stru.common)
    3232           0 :     && (strm >> stru_name_hash)
    3233           0 :     && (strm >> stru.default_value);
    3234             : 
    3235           0 :   if (ret && strm.rpos() - start_pos < total_size) {
    3236           0 :     strm.skip(total_size - strm.rpos() + start_pos);
    3237             :   }
    3238           0 :   return ret;
    3239             : }
    3240             : 
    3241             : 
    3242           0 : void serialized_size(const Encoding& encoding, size_t& size,
    3243             :   const XTypes::MinimalArrayHeader& stru)
    3244             : {
    3245           0 :   serialized_size_delimiter(encoding, size);
    3246           0 :   serialized_size(encoding, size, stru.common);
    3247           0 : }
    3248             : 
    3249           0 : bool operator<<(Serializer& strm, const XTypes::MinimalArrayHeader& stru)
    3250             : {
    3251           0 :   size_t total_size = 0;
    3252           0 :   serialized_size(strm.encoding(), total_size, stru);
    3253           0 :   if (!strm.write_delimiter(total_size)) {
    3254           0 :     return false;
    3255             :   }
    3256             : 
    3257           0 :   return (strm << stru.common);
    3258             : }
    3259             : 
    3260           1 : bool operator>>(Serializer& strm, XTypes::MinimalArrayHeader& stru)
    3261             : {
    3262           1 :   size_t total_size = 0;
    3263           1 :   if (!strm.read_delimiter(total_size)) {
    3264           0 :     return false;
    3265             :   }
    3266             : 
    3267           1 :   const size_t start_pos = strm.rpos();
    3268             : 
    3269           1 :   const bool ret = (strm >> stru.common);
    3270             : 
    3271           1 :   if (ret && strm.rpos() - start_pos < total_size) {
    3272           0 :     strm.skip(total_size - strm.rpos() + start_pos);
    3273             :   }
    3274           1 :   return ret;
    3275             : }
    3276             : 
    3277             : 
    3278           0 : void serialized_size(const Encoding& encoding, size_t& size,
    3279             :   const XTypes::MinimalBitfield& stru)
    3280             : {
    3281           0 :   serialized_size_delimiter(encoding, size);
    3282           0 :   XTypes::NameHash_forany stru_name_hash(const_cast<XTypes::NameHash_slice*>(stru.name_hash));
    3283           0 :   serialized_size(encoding, size, stru.common);
    3284           0 :   serialized_size(encoding, size, stru_name_hash);
    3285           0 : }
    3286             : 
    3287           0 : bool operator<<(Serializer& strm, const XTypes::MinimalBitfield& stru)
    3288             : {
    3289           0 :   size_t total_size = 0;
    3290           0 :   serialized_size(strm.encoding(), total_size, stru);
    3291           0 :   if (!strm.write_delimiter(total_size)) {
    3292           0 :     return false;
    3293             :   }
    3294             : 
    3295           0 :   XTypes::NameHash_forany stru_name_hash(const_cast<XTypes::NameHash_slice*>(stru.name_hash));
    3296           0 :   return (strm << stru.common)
    3297           0 :     && (strm << stru_name_hash);
    3298             : }
    3299             : 
    3300           0 : bool operator>>(Serializer& strm, XTypes::MinimalBitfield& stru)
    3301             : {
    3302           0 :   XTypes::NameHash_forany stru_name_hash(const_cast<XTypes::NameHash_slice*>(stru.name_hash));
    3303           0 :   size_t total_size = 0;
    3304           0 :   if (!strm.read_delimiter(total_size)) {
    3305           0 :     return false;
    3306             :   }
    3307             : 
    3308           0 :   const size_t start_pos = strm.rpos();
    3309             : 
    3310           0 :   const bool ret = (strm >> stru.common)
    3311           0 :     && (strm >> stru_name_hash);
    3312             : 
    3313           0 :   if (ret && strm.rpos() - start_pos < total_size) {
    3314           0 :     strm.skip(total_size - strm.rpos() + start_pos);
    3315             :   }
    3316           0 :   return ret;
    3317             : }
    3318             : 
    3319             : 
    3320           0 : void serialized_size(const Encoding& encoding, size_t& size,
    3321             :   const XTypes::MinimalBitflag& stru)
    3322             : {
    3323           0 :   serialized_size_delimiter(encoding, size);
    3324           0 :   serialized_size(encoding, size, stru.common);
    3325           0 :   serialized_size(encoding, size, stru.detail);
    3326           0 : }
    3327             : 
    3328           0 : bool operator<<(Serializer& strm, const XTypes::MinimalBitflag& stru)
    3329             : {
    3330           0 :   size_t total_size = 0;
    3331           0 :   serialized_size(strm.encoding(), total_size, stru);
    3332           0 :   if (!strm.write_delimiter(total_size)) {
    3333           0 :     return false;
    3334             :   }
    3335             : 
    3336           0 :   return (strm << stru.common)
    3337           0 :     && (strm << stru.detail);
    3338             : }
    3339             : 
    3340           0 : bool operator>>(Serializer& strm, XTypes::MinimalBitflag& stru)
    3341             : {
    3342           0 :   size_t total_size = 0;
    3343           0 :   if (!strm.read_delimiter(total_size)) {
    3344           0 :     return false;
    3345             :   }
    3346             : 
    3347           0 :   const size_t start_pos = strm.rpos();
    3348             : 
    3349           0 :   const bool ret = (strm >> stru.common)
    3350           0 :     && (strm >> stru.detail);
    3351             : 
    3352           0 :   if (ret && strm.rpos() - start_pos < total_size) {
    3353           0 :     strm.skip(total_size - strm.rpos() + start_pos);
    3354             :   }
    3355           0 :   return ret;
    3356             : }
    3357             : 
    3358             : 
    3359           0 : void serialized_size(const Encoding& encoding, size_t& size,
    3360             :   const XTypes::MinimalBitsetHeader&)
    3361             : {
    3362           0 :   serialized_size_delimiter(encoding, size);
    3363           0 : }
    3364             : 
    3365           0 : bool operator<<(Serializer& strm, const XTypes::MinimalBitsetHeader&)
    3366             : {
    3367           0 :   return XTypes::write_empty_xcdr2_nonfinal(strm);
    3368             : }
    3369             : 
    3370           0 : bool operator>>(Serializer& strm, XTypes::MinimalBitsetHeader&)
    3371             : {
    3372           0 :   return XTypes::read_empty_xcdr2_nonfinal(strm);
    3373             : }
    3374             : 
    3375             : 
    3376           0 : void serialized_size(const Encoding& encoding, size_t& size,
    3377             :   const XTypes::MinimalCollectionElement& stru)
    3378             : {
    3379           0 :   serialized_size_delimiter(encoding, size);
    3380           0 :   serialized_size(encoding, size, stru.common);
    3381           0 : }
    3382             : 
    3383           0 : bool operator<<(Serializer& strm, const XTypes::MinimalCollectionElement& stru)
    3384             : {
    3385           0 :   size_t total_size = 0;
    3386           0 :   serialized_size(strm.encoding(), total_size, stru);
    3387           0 :   if (!strm.write_delimiter(total_size)) {
    3388           0 :     return false;
    3389             :   }
    3390             : 
    3391           0 :   return (strm << stru.common);
    3392             : }
    3393             : 
    3394           5 : bool operator>>(Serializer& strm, XTypes::MinimalCollectionElement& stru)
    3395             : {
    3396           5 :   size_t total_size = 0;
    3397           5 :   if (!strm.read_delimiter(total_size)) {
    3398           0 :     return false;
    3399             :   }
    3400             : 
    3401           5 :   const size_t start_pos = strm.rpos();
    3402             : 
    3403           5 :   const bool ret = (strm >> stru.common);
    3404             : 
    3405           5 :   if (ret && strm.rpos() - start_pos < total_size) {
    3406           0 :     strm.skip(total_size - strm.rpos() + start_pos);
    3407             :   }
    3408           5 :   return ret;
    3409             : }
    3410             : 
    3411             : 
    3412           0 : void serialized_size(const Encoding& encoding, size_t& size,
    3413             :   const XTypes::MinimalCollectionHeader& stru)
    3414             : {
    3415           0 :   serialized_size_delimiter(encoding, size);
    3416           0 :   serialized_size(encoding, size, stru.common);
    3417           0 : }
    3418             : 
    3419           0 : bool operator<<(Serializer& strm, const XTypes::MinimalCollectionHeader& stru)
    3420             : {
    3421           0 :   size_t total_size = 0;
    3422           0 :   serialized_size(strm.encoding(), total_size, stru);
    3423           0 :   if (!strm.write_delimiter(total_size)) {
    3424           0 :     return false;
    3425             :   }
    3426             : 
    3427           0 :   return (strm << stru.common);
    3428             : }
    3429             : 
    3430           4 : bool operator>>(Serializer& strm, XTypes::MinimalCollectionHeader& stru)
    3431             : {
    3432           4 :   size_t total_size = 0;
    3433           4 :   if (!strm.read_delimiter(total_size)) {
    3434           0 :     return false;
    3435             :   }
    3436             : 
    3437           4 :   const size_t start_pos = strm.rpos();
    3438             : 
    3439           4 :   const bool ret = (strm >> stru.common);
    3440             : 
    3441           4 :   if (ret && strm.rpos() - start_pos < total_size) {
    3442           0 :     strm.skip(total_size - strm.rpos() + start_pos);
    3443             :   }
    3444           4 :   return ret;
    3445             : }
    3446             : 
    3447             : 
    3448          34 : void serialized_size(const Encoding& encoding, size_t& size,
    3449             :   const XTypes::MinimalDiscriminatorMember& stru)
    3450             : {
    3451          34 :   serialized_size_delimiter(encoding, size);
    3452          34 :   serialized_size(encoding, size, stru.common);
    3453          34 : }
    3454             : 
    3455           0 : bool operator<<(Serializer& strm, const XTypes::MinimalDiscriminatorMember& stru)
    3456             : {
    3457           0 :   size_t total_size = 0;
    3458           0 :   serialized_size(strm.encoding(), total_size, stru);
    3459           0 :   if (!strm.write_delimiter(total_size)) {
    3460           0 :     return false;
    3461             :   }
    3462             : 
    3463           0 :   return (strm << stru.common);
    3464             : }
    3465             : 
    3466          10 : bool operator>>(Serializer& strm, XTypes::MinimalDiscriminatorMember& stru)
    3467             : {
    3468          10 :   size_t total_size = 0;
    3469          10 :   if (!strm.read_delimiter(total_size)) {
    3470           0 :     return false;
    3471             :   }
    3472             : 
    3473          10 :   const size_t start_pos = strm.rpos();
    3474             : 
    3475          10 :   const bool ret = (strm >> stru.common);
    3476             : 
    3477          10 :   if (ret && strm.rpos() - start_pos < total_size) {
    3478           0 :     strm.skip(total_size - strm.rpos() + start_pos);
    3479             :   }
    3480          10 :   return ret;
    3481             : }
    3482             : 
    3483             : 
    3484          65 : void serialized_size(const Encoding& encoding, size_t& size,
    3485             :   const XTypes::MinimalEnumeratedLiteral& stru)
    3486             : {
    3487          65 :   serialized_size_delimiter(encoding, size);
    3488          65 :   serialized_size(encoding, size, stru.common);
    3489          65 :   serialized_size(encoding, size, stru.detail);
    3490          65 : }
    3491             : 
    3492           0 : bool operator<<(Serializer& strm, const XTypes::MinimalEnumeratedLiteral& stru)
    3493             : {
    3494           0 :   size_t total_size = 0;
    3495           0 :   serialized_size(strm.encoding(), total_size, stru);
    3496           0 :   if (!strm.write_delimiter(total_size)) {
    3497           0 :     return false;
    3498             :   }
    3499             : 
    3500           0 :   return (strm << stru.common)
    3501           0 :     && (strm << stru.detail);
    3502             : }
    3503             : 
    3504          27 : bool operator>>(Serializer& strm, XTypes::MinimalEnumeratedLiteral& stru)
    3505             : {
    3506          27 :   size_t total_size = 0;
    3507          27 :   if (!strm.read_delimiter(total_size)) {
    3508           0 :     return false;
    3509             :   }
    3510             : 
    3511          27 :   const size_t start_pos = strm.rpos();
    3512             : 
    3513          27 :   const bool ret = (strm >> stru.common)
    3514          27 :     && (strm >> stru.detail);
    3515             : 
    3516          27 :   if (ret && strm.rpos() - start_pos < total_size) {
    3517           0 :     strm.skip(total_size - strm.rpos() + start_pos);
    3518             :   }
    3519          27 :   return ret;
    3520             : }
    3521             : 
    3522             : 
    3523         290 : void serialized_size(const Encoding& encoding, size_t& size,
    3524             :   const XTypes::MinimalStructMember& stru)
    3525             : {
    3526         290 :   serialized_size_delimiter(encoding, size);
    3527         290 :   serialized_size(encoding, size, stru.common);
    3528         290 :   serialized_size(encoding, size, stru.detail);
    3529         290 : }
    3530             : 
    3531           2 : bool operator<<(Serializer& strm, const XTypes::MinimalStructMember& stru)
    3532             : {
    3533           2 :   size_t total_size = 0;
    3534           2 :   serialized_size(strm.encoding(), total_size, stru);
    3535           2 :   if (!strm.write_delimiter(total_size)) {
    3536           0 :     return false;
    3537             :   }
    3538             : 
    3539           2 :   return (strm << stru.common)
    3540           2 :     && (strm << stru.detail);
    3541             : }
    3542             : 
    3543         188 : bool operator>>(Serializer& strm, XTypes::MinimalStructMember& stru)
    3544             : {
    3545         188 :   size_t total_size = 0;
    3546         188 :   if (!strm.read_delimiter(total_size)) {
    3547           0 :     return false;
    3548             :   }
    3549             : 
    3550         188 :   const size_t start_pos = strm.rpos();
    3551             : 
    3552         188 :   const bool ret = (strm >> stru.common)
    3553         188 :     && (strm >> stru.detail);
    3554             : 
    3555         188 :   if (ret && strm.rpos() - start_pos < total_size) {
    3556           0 :     strm.skip(total_size - strm.rpos() + start_pos);
    3557             :   }
    3558         188 :   return ret;
    3559             : }
    3560             : 
    3561             : 
    3562          34 : void serialized_size(const Encoding& encoding, size_t& size,
    3563             :   const XTypes::MinimalUnionHeader& stru)
    3564             : {
    3565          34 :   serialized_size_delimiter(encoding, size);
    3566          34 :   serialized_size(encoding, size, stru.detail);
    3567          34 : }
    3568             : 
    3569           0 : bool operator<<(Serializer& strm, const XTypes::MinimalUnionHeader& stru)
    3570             : {
    3571           0 :   size_t total_size = 0;
    3572           0 :   serialized_size(strm.encoding(), total_size, stru);
    3573           0 :   if (!strm.write_delimiter(total_size)) {
    3574           0 :     return false;
    3575             :   }
    3576             : 
    3577           0 :   return (strm << stru.detail);
    3578             : }
    3579             : 
    3580          10 : bool operator>>(Serializer& strm, XTypes::MinimalUnionHeader& stru)
    3581             : {
    3582          10 :   size_t total_size = 0;
    3583          10 :   if (!strm.read_delimiter(total_size)) {
    3584           0 :     return false;
    3585             :   }
    3586             : 
    3587          10 :   const size_t start_pos = strm.rpos();
    3588             : 
    3589          10 :   const bool ret = (strm >> stru.detail);
    3590             : 
    3591          10 :   if (ret && strm.rpos() - start_pos < total_size) {
    3592           0 :     strm.skip(total_size - strm.rpos() + start_pos);
    3593             :   }
    3594          10 :   return ret;
    3595             : }
    3596             : 
    3597             : 
    3598          99 : void serialized_size(const Encoding& encoding, size_t& size,
    3599             :   const XTypes::MinimalUnionMember& stru)
    3600             : {
    3601          99 :   serialized_size_delimiter(encoding, size);
    3602          99 :   serialized_size(encoding, size, stru.common);
    3603          99 :   serialized_size(encoding, size, stru.detail);
    3604          99 : }
    3605             : 
    3606           0 : bool operator<<(Serializer& strm, const XTypes::MinimalUnionMember& stru)
    3607             : {
    3608           0 :   size_t total_size = 0;
    3609           0 :   serialized_size(strm.encoding(), total_size, stru);
    3610           0 :   if (!strm.write_delimiter(total_size)) {
    3611           0 :     return false;
    3612             :   }
    3613             : 
    3614           0 :   return (strm << stru.common)
    3615           0 :     && (strm << stru.detail);
    3616             : }
    3617             : 
    3618          40 : bool operator>>(Serializer& strm, XTypes::MinimalUnionMember& stru)
    3619             : {
    3620          40 :   size_t total_size = 0;
    3621          40 :   if (!strm.read_delimiter(total_size)) {
    3622           0 :     return false;
    3623             :   }
    3624             : 
    3625          40 :   const size_t start_pos = strm.rpos();
    3626             : 
    3627          40 :   const bool ret = (strm >> stru.common)
    3628          40 :     && (strm >> stru.detail);
    3629             : 
    3630          40 :   if (ret && strm.rpos() - start_pos < total_size) {
    3631           0 :     strm.skip(total_size - strm.rpos() + start_pos);
    3632             :   }
    3633          40 :   return ret;
    3634             : }
    3635             : 
    3636             : 
    3637           0 : void serialized_size(const Encoding& encoding, size_t& size,
    3638             :   const XTypes::AnnotationParameterValue& uni)
    3639             : {
    3640           0 :   primitive_serialized_size(encoding, size, ACE_OutputCDR::from_octet(uni.kind()));
    3641           0 :   switch (uni.kind()) {
    3642           0 :   case XTypes::TK_BOOLEAN: {
    3643           0 :     primitive_serialized_size(encoding, size, ACE_OutputCDR::from_boolean(uni.boolean_value()));
    3644           0 :     break;
    3645             :   }
    3646           0 :   case XTypes::TK_BYTE: {
    3647           0 :     primitive_serialized_size(encoding, size, ACE_OutputCDR::from_octet(uni.byte_value()));
    3648           0 :     break;
    3649             :   }
    3650           0 :   case XTypes::TK_INT16: {
    3651           0 :     primitive_serialized_size(encoding, size, uni.int16_value());
    3652           0 :     break;
    3653             :   }
    3654           0 :   case XTypes::TK_UINT16: {
    3655           0 :     primitive_serialized_size(encoding, size, uni.uint16_value());
    3656           0 :     break;
    3657             :   }
    3658           0 :   case XTypes::TK_INT32: {
    3659           0 :     primitive_serialized_size(encoding, size, uni.int32_value());
    3660           0 :     break;
    3661             :   }
    3662           0 :   case XTypes::TK_UINT32: {
    3663           0 :     primitive_serialized_size(encoding, size, uni.uint32_value());
    3664           0 :     break;
    3665             :   }
    3666           0 :   case XTypes::TK_INT64: {
    3667           0 :     primitive_serialized_size(encoding, size, uni.int64_value());
    3668           0 :     break;
    3669             :   }
    3670           0 :   case XTypes::TK_UINT64: {
    3671           0 :     primitive_serialized_size(encoding, size, uni.uint64_value());
    3672           0 :     break;
    3673             :   }
    3674           0 :   case XTypes::TK_FLOAT32: {
    3675           0 :     primitive_serialized_size(encoding, size, uni.float32_value());
    3676           0 :     break;
    3677             :   }
    3678           0 :   case XTypes::TK_FLOAT64: {
    3679           0 :     primitive_serialized_size(encoding, size, uni.float64_value());
    3680           0 :     break;
    3681             :   }
    3682           0 :   case XTypes::TK_FLOAT128: {
    3683           0 :     primitive_serialized_size(encoding, size, uni.float128_value());
    3684           0 :     break;
    3685             :   }
    3686           0 :   case XTypes::TK_CHAR8: {
    3687           0 :     primitive_serialized_size(encoding, size, ACE_OutputCDR::from_char(uni.char_value()));
    3688           0 :     break;
    3689             :   }
    3690           0 :   case XTypes::TK_CHAR16: {
    3691           0 :     primitive_serialized_size(encoding, size, ACE_OutputCDR::from_wchar(uni.wchar_value()));
    3692           0 :     break;
    3693             :   }
    3694           0 :   case XTypes::TK_ENUM: {
    3695           0 :     primitive_serialized_size(encoding, size, uni.enumerated_value());
    3696           0 :     break;
    3697             :   }
    3698           0 :   case XTypes::TK_STRING8: {
    3699           0 :     DCPS::primitive_serialized_size_ulong(encoding, size);
    3700           0 :     size += ACE_OS::strlen(uni.string8_value().c_str()) + 1;
    3701           0 :     break;
    3702             :   }
    3703           0 :   case XTypes::TK_STRING16: {
    3704             : #ifdef DDS_HAS_WCHAR
    3705           0 :     DCPS::primitive_serialized_size_ulong(encoding, size);
    3706           0 :     size += ACE_OS::strlen(uni.string16_value().c_str()) * DCPS::char16_cdr_size;
    3707             : #endif
    3708           0 :     break;
    3709             :   }
    3710           0 :   default: {
    3711           0 :     serialized_size(encoding, size, uni.extended_value());
    3712           0 :     break;
    3713             :   }
    3714             :   }
    3715           0 : }
    3716             : 
    3717           0 : bool operator<<(Serializer& strm, const XTypes::AnnotationParameterValue& uni)
    3718             : {
    3719           0 :   if (!(strm << ACE_OutputCDR::from_octet(uni.kind()))) {
    3720           0 :     return false;
    3721             :   }
    3722           0 :   switch (uni.kind()) {
    3723           0 :   case XTypes::TK_BOOLEAN: {
    3724           0 :     return (strm << ACE_OutputCDR::from_boolean(uni.boolean_value()));
    3725             :   }
    3726           0 :   case XTypes::TK_BYTE: {
    3727           0 :     return (strm << ACE_OutputCDR::from_octet(uni.byte_value()));
    3728             :   }
    3729           0 :   case XTypes::TK_INT16: {
    3730           0 :     return (strm << uni.int16_value());
    3731             :   }
    3732           0 :   case XTypes::TK_UINT16: {
    3733           0 :     return (strm << uni.uint16_value());
    3734             :   }
    3735           0 :   case XTypes::TK_INT32: {
    3736           0 :     return (strm << uni.int32_value());
    3737             :   }
    3738           0 :   case XTypes::TK_UINT32: {
    3739           0 :     return (strm << uni.uint32_value());
    3740             :   }
    3741           0 :   case XTypes::TK_INT64: {
    3742           0 :     return (strm << uni.int64_value());
    3743             :   }
    3744           0 :   case XTypes::TK_UINT64: {
    3745           0 :     return (strm << uni.uint64_value());
    3746             :   }
    3747           0 :   case XTypes::TK_FLOAT32: {
    3748           0 :     return (strm << uni.float32_value());
    3749             :   }
    3750           0 :   case XTypes::TK_FLOAT64: {
    3751           0 :     return (strm << uni.float64_value());
    3752             :   }
    3753           0 :   case XTypes::TK_FLOAT128: {
    3754           0 :     return (strm << uni.float128_value());
    3755             :   }
    3756           0 :   case XTypes::TK_CHAR8: {
    3757           0 :     return (strm << ACE_OutputCDR::from_char(uni.char_value()));
    3758             :   }
    3759           0 :   case XTypes::TK_CHAR16: {
    3760           0 :     return (strm << ACE_OutputCDR::from_wchar(uni.wchar_value()));
    3761             :   }
    3762           0 :   case XTypes::TK_ENUM: {
    3763           0 :     return (strm << uni.enumerated_value());
    3764             :   }
    3765           0 :   case XTypes::TK_STRING8: {
    3766           0 :     return (strm << Serializer::FromBoundedString<char>(uni.string8_value(), 128));
    3767             :   }
    3768           0 :   case XTypes::TK_STRING16: {
    3769             : #ifdef DDS_HAS_WCHAR
    3770           0 :     return (strm << Serializer::FromBoundedString<wchar_t>(uni.string16_value(), 128));
    3771             : #else
    3772             :     return false;
    3773             : #endif
    3774             :   }
    3775           0 :   default: {
    3776           0 :     return (strm << uni.extended_value());
    3777             :   }
    3778             :   }
    3779             : }
    3780             : 
    3781           0 : bool operator>>(Serializer& strm, XTypes::AnnotationParameterValue& uni)
    3782             : {
    3783             :   ACE_CDR::Octet kind;
    3784           0 :   if (!(strm >> ACE_InputCDR::to_octet(kind))) {
    3785           0 :     return false;
    3786             :   }
    3787           0 :   uni = XTypes::AnnotationParameterValue(kind);
    3788             : 
    3789           0 :   switch (kind) {
    3790           0 :   case XTypes::TK_BOOLEAN:
    3791           0 :     return (strm >> ACE_InputCDR::to_boolean(uni.boolean_value()));
    3792           0 :   case XTypes::TK_BYTE:
    3793           0 :     return (strm >> ACE_InputCDR::to_octet(uni.byte_value()));
    3794           0 :   case XTypes::TK_INT16:
    3795           0 :     return (strm >> uni.int16_value());
    3796           0 :   case XTypes::TK_UINT16:
    3797           0 :     return (strm >> uni.uint16_value());
    3798           0 :   case XTypes::TK_INT32:
    3799           0 :     return (strm >> uni.int32_value());
    3800           0 :   case XTypes::TK_UINT32:
    3801           0 :     return (strm >> uni.uint32_value());
    3802           0 :   case XTypes::TK_INT64:
    3803           0 :     return (strm >> uni.int64_value());
    3804           0 :   case XTypes::TK_UINT64:
    3805           0 :     return (strm >> uni.uint64_value());
    3806           0 :   case XTypes::TK_FLOAT32:
    3807           0 :     return (strm >> uni.float32_value());
    3808           0 :   case XTypes::TK_FLOAT64:
    3809           0 :     return (strm >> uni.float64_value());
    3810           0 :   case XTypes::TK_FLOAT128:
    3811           0 :     return (strm >> uni.float128_value());
    3812           0 :   case XTypes::TK_CHAR8:
    3813           0 :     return (strm >> ACE_InputCDR::to_char(uni.char_value()));
    3814           0 :   case XTypes::TK_CHAR16:
    3815           0 :     return (strm >> ACE_InputCDR::to_wchar(uni.wchar_value()));
    3816           0 :   case XTypes::TK_ENUM:
    3817           0 :     return (strm >> uni.enumerated_value());
    3818           0 :   case XTypes::TK_STRING8:
    3819           0 :     return (strm >> Serializer::ToBoundedString<char>(uni.string8_value(), 128));
    3820           0 :   case XTypes::TK_STRING16:
    3821             : #ifdef DDS_HAS_WCHAR
    3822           0 :     return (strm >> Serializer::ToBoundedString<wchar_t>(uni.string16_value(), 128));
    3823             : #endif
    3824             :     return false;
    3825           0 :   default:
    3826           0 :     return (strm >> uni.extended_value());
    3827             :   }
    3828             : }
    3829             : 
    3830             : 
    3831           0 : void serialized_size(const Encoding& encoding, size_t& size,
    3832             :   const XTypes::AppliedAnnotationParameter& stru)
    3833             : {
    3834           0 :   serialized_size_delimiter(encoding, size);
    3835           0 :   XTypes::NameHash_forany stru_paramname_hash(const_cast<XTypes::NameHash_slice*>(stru.paramname_hash));
    3836           0 :   serialized_size(encoding, size, stru_paramname_hash);
    3837           0 :   serialized_size(encoding, size, stru.value);
    3838           0 : }
    3839             : 
    3840           0 : bool operator<<(Serializer& strm, const XTypes::AppliedAnnotationParameter& stru)
    3841             : {
    3842           0 :   size_t total_size = 0;
    3843           0 :   serialized_size(strm.encoding(), total_size, stru);
    3844           0 :   if (!strm.write_delimiter(total_size)) {
    3845           0 :     return false;
    3846             :   }
    3847             : 
    3848           0 :   XTypes::NameHash_forany stru_paramname_hash(const_cast<XTypes::NameHash_slice*>(stru.paramname_hash));
    3849           0 :   return (strm << stru_paramname_hash)
    3850           0 :     && (strm << stru.value);
    3851             : }
    3852             : 
    3853           0 : bool operator>>(Serializer& strm, XTypes::AppliedAnnotationParameter& stru)
    3854             : {
    3855           0 :   size_t total_size = 0;
    3856           0 :   if (!strm.read_delimiter(total_size)) {
    3857           0 :     return false;
    3858             :   }
    3859             : 
    3860           0 :   const size_t start_pos = strm.rpos();
    3861             : 
    3862           0 :   XTypes::NameHash_forany stru_paramname_hash(const_cast<XTypes::NameHash_slice*>(stru.paramname_hash));
    3863           0 :   const bool ret = (strm >> stru_paramname_hash)
    3864           0 :     && (strm >> stru.value);
    3865             : 
    3866           0 :   if (ret && strm.rpos() - start_pos < total_size) {
    3867           0 :     strm.skip(total_size - strm.rpos() + start_pos);
    3868             :   }
    3869           0 :   return ret;
    3870             : }
    3871             : 
    3872             : 
    3873           0 : void serialized_size(const Encoding& encoding, size_t& size,
    3874             :   const XTypes::AppliedBuiltinMemberAnnotations& stru)
    3875             : {
    3876           0 :   serialized_size_delimiter(encoding, size);
    3877             : 
    3878           0 :   size += DCPS::boolean_cdr_size;
    3879           0 :   if (stru.unit) {
    3880           0 :     DCPS::primitive_serialized_size_ulong(encoding, size);
    3881           0 :     size += ACE_OS::strlen(stru.unit.value().c_str()) + 1;
    3882             :   }
    3883             : 
    3884           0 :   serialized_size(encoding, size, stru.min);
    3885           0 :   serialized_size(encoding, size, stru.max);
    3886             : 
    3887           0 :   size += DCPS::boolean_cdr_size;
    3888           0 :   if (stru.hash_id) {
    3889           0 :     DCPS::primitive_serialized_size_ulong(encoding, size);
    3890           0 :     size += ACE_OS::strlen(stru.hash_id.value().c_str()) + 1;
    3891             :   }
    3892           0 : }
    3893             : 
    3894           0 : bool operator<<(Serializer& strm, const XTypes::AppliedBuiltinMemberAnnotations& stru)
    3895             : {
    3896           0 :   size_t total_size = 0;
    3897           0 :   serialized_size(strm.encoding(), total_size, stru);
    3898           0 :   if (!strm.write_delimiter(total_size)) {
    3899           0 :     return false;
    3900             :   }
    3901             : 
    3902           0 :   return (strm << stru.unit)
    3903           0 :     && (strm << stru.min)
    3904           0 :     && (strm << stru.max)
    3905           0 :     && (strm << stru.hash_id);
    3906             : }
    3907             : 
    3908           0 : bool operator>>(Serializer& strm, XTypes::AppliedBuiltinMemberAnnotations& stru)
    3909             : {
    3910           0 :   size_t total_size = 0;
    3911           0 :   if (!strm.read_delimiter(total_size)) {
    3912           0 :     return false;
    3913             :   }
    3914             : 
    3915           0 :   const size_t start_pos = strm.rpos();
    3916             : 
    3917           0 :   const bool ret = (strm >> stru.unit)
    3918           0 :     && (strm >> stru.min)
    3919           0 :     && (strm >> stru.max)
    3920           0 :     && (strm >> stru.hash_id);
    3921             : 
    3922           0 :   if (ret && strm.rpos() - start_pos < total_size) {
    3923           0 :     strm.skip(total_size - strm.rpos() + start_pos);
    3924             :   }
    3925           0 :   return ret;
    3926             : }
    3927             : 
    3928             : 
    3929           0 : void serialized_size(const Encoding& encoding, size_t& size,
    3930             :   const XTypes::AppliedVerbatimAnnotation& stru)
    3931             : {
    3932           0 :   DCPS::primitive_serialized_size_ulong(encoding, size);
    3933           0 :   size += ACE_OS::strlen(stru.placement.c_str()) + 1;
    3934           0 :   DCPS::primitive_serialized_size_ulong(encoding, size);
    3935           0 :   size += ACE_OS::strlen(stru.language.c_str()) + 1;
    3936           0 :   DCPS::primitive_serialized_size_ulong(encoding, size);
    3937           0 :   size += ACE_OS::strlen(stru.text.c_str()) + 1;
    3938           0 : }
    3939             : 
    3940           0 : bool operator<<(Serializer& strm, const XTypes::AppliedVerbatimAnnotation& stru)
    3941             : {
    3942           0 :   return (strm << Serializer::FromBoundedString<char>(stru.placement, 32))
    3943           0 :     && (strm << Serializer::FromBoundedString<char>(stru.language, 32))
    3944           0 :     && (strm << stru.text);
    3945             : }
    3946             : 
    3947           0 : bool operator>>(Serializer& strm, XTypes::AppliedVerbatimAnnotation& stru)
    3948             : {
    3949           0 :   return (strm >> Serializer::ToBoundedString<char>(stru.placement, 32))
    3950           0 :     && (strm >> Serializer::ToBoundedString<char>(stru.language, 32))
    3951           0 :     && (strm >> stru.text);
    3952             : }
    3953             : 
    3954             : 
    3955          98 : void serialized_size(const Encoding& encoding, size_t& size,
    3956             :   const XTypes::CommonAliasBody& stru)
    3957             : {
    3958          98 :   primitive_serialized_size(encoding, size, stru.related_flags);
    3959          98 :   serialized_size(encoding, size, stru.related_type);
    3960          98 : }
    3961             : 
    3962           0 : bool operator<<(Serializer& strm, const XTypes::CommonAliasBody& stru)
    3963             : {
    3964           0 :   return (strm << stru.related_flags)
    3965           0 :     && (strm << stru.related_type);
    3966             : }
    3967             : 
    3968         148 : bool operator>>(Serializer& strm, XTypes::CommonAliasBody& stru)
    3969             : {
    3970         148 :   return (strm >> stru.related_flags)
    3971         148 :     && (strm >> stru.related_type);
    3972             : }
    3973             : 
    3974             : 
    3975           0 : void serialized_size(const Encoding& encoding, size_t& size,
    3976             :   const XTypes::CommonAnnotationParameter& stru)
    3977             : {
    3978           0 :   primitive_serialized_size(encoding, size, stru.member_flags);
    3979           0 :   serialized_size(encoding, size, stru.member_type_id);
    3980           0 : }
    3981             : 
    3982           0 : bool operator<<(Serializer& strm, const XTypes::CommonAnnotationParameter& stru)
    3983             : {
    3984           0 :   return (strm << stru.member_flags)
    3985           0 :     && (strm << stru.member_type_id);
    3986             : }
    3987             : 
    3988           0 : bool operator>>(Serializer& strm, XTypes::CommonAnnotationParameter& stru)
    3989             : {
    3990           0 :   return (strm >> stru.member_flags)
    3991           0 :     && (strm >> stru.member_type_id);
    3992             : }
    3993             : 
    3994             : 
    3995           0 : void serialized_size(const Encoding& encoding, size_t& size,
    3996             :   const XTypes::CommonArrayHeader& stru)
    3997             : {
    3998           0 :   serialized_size(encoding, size, stru.bound_seq);
    3999           0 : }
    4000             : 
    4001           0 : bool operator<<(Serializer& strm, const XTypes::CommonArrayHeader& stru)
    4002             : {
    4003           0 :   return (strm << stru.bound_seq);
    4004             : }
    4005             : 
    4006           2 : bool operator>>(Serializer& strm, XTypes::CommonArrayHeader& stru)
    4007             : {
    4008           2 :   return (strm >> stru.bound_seq);
    4009             : }
    4010             : 
    4011             : 
    4012           0 : void serialized_size(const Encoding& encoding, size_t& size,
    4013             :   const XTypes::CommonBitfield& stru)
    4014             : {
    4015           0 :   primitive_serialized_size(encoding, size, stru.position);
    4016           0 :   primitive_serialized_size(encoding, size, stru.flags);
    4017           0 :   primitive_serialized_size(encoding, size, ACE_OutputCDR::from_octet(stru.bitcount));
    4018           0 :   primitive_serialized_size(encoding, size, ACE_OutputCDR::from_octet(stru.holder_type));
    4019           0 : }
    4020             : 
    4021           0 : bool operator<<(Serializer& strm, const XTypes::CommonBitfield& stru)
    4022             : {
    4023           0 :   return (strm << stru.position)
    4024           0 :     && (strm << stru.flags)
    4025           0 :     && (strm << ACE_OutputCDR::from_octet(stru.bitcount))
    4026           0 :     && (strm << ACE_OutputCDR::from_octet(stru.holder_type));
    4027             : }
    4028             : 
    4029           0 : bool operator>>(Serializer& strm, XTypes::CommonBitfield& stru)
    4030             : {
    4031           0 :   return (strm >> stru.position)
    4032           0 :     && (strm >> stru.flags)
    4033           0 :     && (strm >> ACE_InputCDR::to_octet(stru.bitcount))
    4034           0 :     && (strm >> ACE_InputCDR::to_octet(stru.holder_type));
    4035             : }
    4036             : 
    4037             : 
    4038           0 : void serialized_size(const Encoding& encoding, size_t& size,
    4039             :   const XTypes::CommonBitflag& stru)
    4040             : {
    4041           0 :   primitive_serialized_size(encoding, size, stru.position);
    4042           0 :   primitive_serialized_size(encoding, size, stru.flags);
    4043           0 : }
    4044             : 
    4045           0 : bool operator<<(Serializer& strm, const XTypes::CommonBitflag& stru)
    4046             : {
    4047           0 :   return (strm << stru.position)
    4048           0 :     && (strm << stru.flags);
    4049             : }
    4050             : 
    4051           0 : bool operator>>(Serializer& strm, XTypes::CommonBitflag& stru)
    4052             : {
    4053           0 :   return (strm >> stru.position)
    4054           0 :     && (strm >> stru.flags);
    4055             : }
    4056             : 
    4057             : 
    4058           0 : void serialized_size(const Encoding& encoding, size_t& size,
    4059             :   const XTypes::CommonCollectionElement& stru)
    4060             : {
    4061           0 :   primitive_serialized_size(encoding, size, stru.element_flags);
    4062           0 :   serialized_size(encoding, size, stru.type);
    4063           0 : }
    4064             : 
    4065           0 : bool operator<<(Serializer& strm, const XTypes::CommonCollectionElement& stru)
    4066             : {
    4067           0 :   return (strm << stru.element_flags)
    4068           0 :     && (strm << stru.type);
    4069             : }
    4070             : 
    4071          12 : bool operator>>(Serializer& strm, XTypes::CommonCollectionElement& stru)
    4072             : {
    4073          12 :   return (strm >> stru.element_flags)
    4074          12 :     && (strm >> stru.type);
    4075             : }
    4076             : 
    4077             : 
    4078           0 : void serialized_size(const Encoding& encoding, size_t& size,
    4079             :   const XTypes::CommonCollectionHeader& stru)
    4080             : {
    4081           0 :   primitive_serialized_size(encoding, size, stru.bound);
    4082           0 : }
    4083             : 
    4084           0 : bool operator<<(Serializer& strm, const XTypes::CommonCollectionHeader& stru)
    4085             : {
    4086           0 :   return (strm << stru.bound);
    4087             : }
    4088             : 
    4089          10 : bool operator>>(Serializer& strm, XTypes::CommonCollectionHeader& stru)
    4090             : {
    4091          10 :   return (strm >> stru.bound);
    4092             : }
    4093             : 
    4094             : 
    4095          68 : void serialized_size(const Encoding& encoding, size_t& size,
    4096             :   const XTypes::CommonDiscriminatorMember& stru)
    4097             : {
    4098          68 :   primitive_serialized_size(encoding, size, stru.member_flags);
    4099          68 :   serialized_size(encoding, size, stru.type_id);
    4100          68 : }
    4101             : 
    4102           0 : bool operator<<(Serializer& strm, const XTypes::CommonDiscriminatorMember& stru)
    4103             : {
    4104           0 :   return (strm << stru.member_flags)
    4105           0 :     && (strm << stru.type_id);
    4106             : }
    4107             : 
    4108          39 : bool operator>>(Serializer& strm, XTypes::CommonDiscriminatorMember& stru)
    4109             : {
    4110          39 :   return (strm >> stru.member_flags)
    4111          39 :     && (strm >> stru.type_id);
    4112             : }
    4113             : 
    4114             : 
    4115          28 : void serialized_size(const Encoding& encoding, size_t& size,
    4116             :   const XTypes::CommonEnumeratedHeader& stru)
    4117             : {
    4118          28 :   primitive_serialized_size(encoding, size, stru.bit_bound);
    4119          28 : }
    4120             : 
    4121           0 : bool operator<<(Serializer& strm, const XTypes::CommonEnumeratedHeader& stru)
    4122             : {
    4123           0 :   return (strm << stru.bit_bound);
    4124             : }
    4125             : 
    4126          10 : bool operator>>(Serializer& strm, XTypes::CommonEnumeratedHeader& stru)
    4127             : {
    4128          10 :   return (strm >> stru.bit_bound);
    4129             : }
    4130             : 
    4131             : 
    4132         130 : void serialized_size(const Encoding& encoding, size_t& size,
    4133             :   const XTypes::CommonEnumeratedLiteral& stru)
    4134             : {
    4135         130 :   serialized_size_delimiter(encoding, size);
    4136         130 :   primitive_serialized_size(encoding, size, stru.value);
    4137         130 :   primitive_serialized_size(encoding, size, stru.flags);
    4138         130 : }
    4139             : 
    4140           0 : bool operator<<(Serializer& strm, const XTypes::CommonEnumeratedLiteral& stru)
    4141             : {
    4142           0 :   size_t total_size = 0;
    4143           0 :   serialized_size(strm.encoding(), total_size, stru);
    4144           0 :   if (!strm.write_delimiter(total_size)) {
    4145           0 :     return false;
    4146             :   }
    4147             : 
    4148           0 :   return (strm << stru.value)
    4149           0 :     && (strm << stru.flags);
    4150             : }
    4151             : 
    4152          88 : bool operator>>(Serializer& strm, XTypes::CommonEnumeratedLiteral& stru)
    4153             : {
    4154          88 :   size_t total_size = 0;
    4155          88 :   if (!strm.read_delimiter(total_size)) {
    4156           0 :     return false;
    4157             :   }
    4158             : 
    4159          88 :   const size_t start_pos = strm.rpos();
    4160             : 
    4161          88 :   const bool ret = (strm >> stru.value)
    4162          88 :     && (strm >> stru.flags);
    4163             : 
    4164          88 :   if (ret && strm.rpos() - start_pos < total_size) {
    4165           0 :     strm.skip(total_size - strm.rpos() + start_pos);
    4166             :   }
    4167          88 :   return ret;
    4168             : }
    4169             : 
    4170             : 
    4171         573 : void serialized_size(const Encoding& encoding, size_t& size,
    4172             :   const XTypes::CommonStructMember& stru)
    4173             : {
    4174         573 :   primitive_serialized_size(encoding, size, stru.member_id);
    4175         573 :   primitive_serialized_size(encoding, size, stru.member_flags);
    4176         573 :   serialized_size(encoding, size, stru.member_type_id);
    4177         573 : }
    4178             : 
    4179           2 : bool operator<<(Serializer& strm, const XTypes::CommonStructMember& stru)
    4180             : {
    4181           2 :   return (strm << stru.member_id)
    4182           2 :     && (strm << stru.member_flags)
    4183           4 :     && (strm << stru.member_type_id);
    4184             : }
    4185             : 
    4186         678 : bool operator>>(Serializer& strm, XTypes::CommonStructMember& stru)
    4187             : {
    4188         678 :   return (strm >> stru.member_id)
    4189         678 :     && (strm >> stru.member_flags)
    4190        1356 :     && (strm >> stru.member_type_id);
    4191             : }
    4192             : 
    4193             : 
    4194         198 : void serialized_size(const Encoding& encoding, size_t& size,
    4195             :   const XTypes::CommonUnionMember& stru)
    4196             : {
    4197         198 :   primitive_serialized_size(encoding, size, stru.member_id);
    4198         198 :   primitive_serialized_size(encoding, size, stru.member_flags);
    4199         198 :   serialized_size(encoding, size, stru.type_id);
    4200         198 :   serialized_size(encoding, size, stru.label_seq);
    4201         198 : }
    4202             : 
    4203           0 : bool operator<<(Serializer& strm, const XTypes::CommonUnionMember& stru)
    4204             : {
    4205           0 :   return (strm << stru.member_id)
    4206           0 :     && (strm << stru.member_flags)
    4207           0 :     && (strm << stru.type_id)
    4208           0 :     && (strm << stru.label_seq);
    4209             : }
    4210             : 
    4211         303 : bool operator>>(Serializer& strm, XTypes::CommonUnionMember& stru)
    4212             : {
    4213         303 :   return (strm >> stru.member_id)
    4214         303 :     && (strm >> stru.member_flags)
    4215         303 :     && (strm >> stru.type_id)
    4216         606 :     && (strm >> stru.label_seq);
    4217             : }
    4218             : 
    4219             : 
    4220           0 : void serialized_size(const Encoding& encoding, size_t& size,
    4221             :   const XTypes::CompleteElementDetail& stru)
    4222             : {
    4223           0 :   serialized_size(encoding, size, stru.ann_builtin);
    4224           0 :   serialized_size(encoding, size, stru.ann_custom);
    4225           0 : }
    4226             : 
    4227           0 : bool operator<<(Serializer& strm, const XTypes::CompleteElementDetail& stru)
    4228             : {
    4229           0 :   return (strm << stru.ann_builtin)
    4230           0 :     && (strm << stru.ann_custom);
    4231             : }
    4232             : 
    4233           7 : bool operator>>(Serializer& strm, XTypes::CompleteElementDetail& stru)
    4234             : {
    4235           7 :   return (strm >> stru.ann_builtin)
    4236           7 :     && (strm >> stru.ann_custom);
    4237             : }
    4238             : 
    4239             : 
    4240         447 : void serialized_size(const Encoding& encoding, size_t& size,
    4241             :   const XTypes::CompleteMemberDetail& stru)
    4242             : {
    4243         447 :   DCPS::primitive_serialized_size_ulong(encoding, size);
    4244         447 :   size += ACE_OS::strlen(stru.name.c_str()) + 1;
    4245         447 :   serialized_size(encoding, size, stru.ann_builtin);
    4246         447 :   serialized_size(encoding, size, stru.ann_custom);
    4247         447 : }
    4248             : 
    4249           0 : bool operator<<(Serializer& strm, const XTypes::CompleteMemberDetail& stru)
    4250             : {
    4251           0 :   return (strm << Serializer::FromBoundedString<char>(stru.name, MEMBER_NAME_MAX_LENGTH))
    4252           0 :     && (strm << stru.ann_builtin)
    4253           0 :     && (strm << stru.ann_custom);
    4254             : }
    4255             : 
    4256         814 : bool operator>>(Serializer& strm, XTypes::CompleteMemberDetail& stru)
    4257             : {
    4258         814 :   return (strm >> Serializer::ToBoundedString<char>(stru.name, MEMBER_NAME_MAX_LENGTH))
    4259         814 :     && (strm >> stru.ann_builtin)
    4260        1628 :     && (strm >> stru.ann_custom);
    4261             : }
    4262             : 
    4263             : 
    4264         454 : void serialized_size(const Encoding& encoding, size_t& size,
    4265             :   const XTypes::MinimalMemberDetail& stru)
    4266             : {
    4267         454 :   XTypes::NameHash_forany stru_name_hash(const_cast<XTypes::NameHash_slice*>(stru.name_hash));
    4268         454 :   serialized_size(encoding, size, stru_name_hash);
    4269         454 : }
    4270             : 
    4271           2 : bool operator<<(Serializer& strm, const XTypes::MinimalMemberDetail& stru)
    4272             : {
    4273           2 :   XTypes::NameHash_forany stru_name_hash(const_cast<XTypes::NameHash_slice*>(stru.name_hash));
    4274           4 :   return (strm << stru_name_hash);
    4275             : }
    4276             : 
    4277         255 : bool operator>>(Serializer& strm, XTypes::MinimalMemberDetail& stru)
    4278             : {
    4279         255 :   XTypes::NameHash_forany stru_name_hash(const_cast<XTypes::NameHash_slice*>(stru.name_hash));
    4280         510 :   return (strm >> stru_name_hash);
    4281             : }
    4282             : 
    4283             : 
    4284           0 : void serialized_size(const Encoding& encoding, size_t& size,
    4285             :   const XTypes::ExtendedTypeDefn&)
    4286             : {
    4287           0 :   serialized_size_delimiter(encoding, size);
    4288           0 : }
    4289             : 
    4290           0 : bool operator<<(Serializer& strm, const XTypes::ExtendedTypeDefn&)
    4291             : {
    4292           0 :   return XTypes::write_empty_xcdr2_nonfinal(strm);
    4293             : }
    4294             : 
    4295           0 : bool operator>>(Serializer& strm, XTypes::ExtendedTypeDefn&)
    4296             : {
    4297           0 :   return XTypes::read_empty_xcdr2_nonfinal(strm);
    4298             : }
    4299             : 
    4300             : 
    4301           0 : void serialized_size(const Encoding& encoding, size_t& size,
    4302             :   const XTypes::PlainArrayLElemDefn& stru)
    4303             : {
    4304           0 :   serialized_size(encoding, size, stru.header);
    4305           0 :   serialized_size(encoding, size, stru.array_bound_seq);
    4306           0 :   serialized_size(encoding, size, *stru.element_identifier);
    4307           0 : }
    4308             : 
    4309           0 : bool operator<<(Serializer& strm, const XTypes::PlainArrayLElemDefn& stru)
    4310             : {
    4311           0 :   return (strm << stru.header)
    4312           0 :     && (strm << stru.array_bound_seq)
    4313           0 :     && (strm << *stru.element_identifier);
    4314             : }
    4315             : 
    4316           0 : bool operator>>(Serializer& strm, XTypes::PlainArrayLElemDefn& stru)
    4317             : {
    4318           0 :   return (strm >> stru.header)
    4319           0 :     && (strm >> stru.array_bound_seq)
    4320           0 :     && (strm >> *stru.element_identifier);
    4321             : }
    4322             : 
    4323             : 
    4324         112 : void serialized_size(const Encoding& encoding, size_t& size,
    4325             :   const XTypes::PlainArraySElemDefn& stru)
    4326             : {
    4327         112 :   serialized_size(encoding, size, stru.header);
    4328         112 :   serialized_size(encoding, size, stru.array_bound_seq);
    4329         112 :   serialized_size(encoding, size, *stru.element_identifier);
    4330         112 : }
    4331             : 
    4332           0 : bool operator<<(Serializer& strm, const XTypes::PlainArraySElemDefn& stru)
    4333             : {
    4334           0 :   return (strm << stru.header)
    4335           0 :     && (strm << stru.array_bound_seq)
    4336           0 :     && (strm << *stru.element_identifier);
    4337             : }
    4338             : 
    4339         113 : bool operator>>(Serializer& strm, XTypes::PlainArraySElemDefn& stru)
    4340             : {
    4341         113 :   return (strm >> stru.header)
    4342         113 :     && (strm >> stru.array_bound_seq)
    4343         226 :     && (strm >> *stru.element_identifier);
    4344             : }
    4345             : 
    4346             : 
    4347           0 : void serialized_size(const Encoding& encoding, size_t& size,
    4348             :   const XTypes::PlainMapLTypeDefn& stru)
    4349             : {
    4350           0 :   serialized_size(encoding, size, stru.header);
    4351           0 :   primitive_serialized_size(encoding, size, stru.bound);
    4352           0 :   serialized_size(encoding, size, *stru.element_identifier);
    4353           0 :   primitive_serialized_size(encoding, size, stru.key_flags);
    4354           0 :   serialized_size(encoding, size, *stru.key_identifier);
    4355           0 : }
    4356             : 
    4357           0 : bool operator<<(Serializer& strm, const XTypes::PlainMapLTypeDefn& stru)
    4358             : {
    4359           0 :   return (strm << stru.header)
    4360           0 :     && (strm << stru.bound)
    4361           0 :     && (strm << *stru.element_identifier)
    4362           0 :     && (strm << stru.key_flags)
    4363           0 :     && (strm << *stru.key_identifier);
    4364             : }
    4365             : 
    4366           0 : bool operator>>(Serializer& strm, XTypes::PlainMapLTypeDefn& stru)
    4367             : {
    4368           0 :   return (strm >> stru.header)
    4369           0 :     && (strm >> stru.bound)
    4370           0 :     && (strm >> *stru.element_identifier)
    4371           0 :     && (strm >> stru.key_flags)
    4372           0 :     && (strm >> *stru.key_identifier);
    4373             : }
    4374             : 
    4375             : 
    4376           0 : void serialized_size(const Encoding& encoding, size_t& size,
    4377             :   const XTypes::PlainMapSTypeDefn& stru)
    4378             : {
    4379           0 :   serialized_size(encoding, size, stru.header);
    4380           0 :   primitive_serialized_size(encoding, size, ACE_OutputCDR::from_octet(stru.bound));
    4381           0 :   serialized_size(encoding, size, *stru.element_identifier);
    4382           0 :   primitive_serialized_size(encoding, size, stru.key_flags);
    4383           0 :   serialized_size(encoding, size, *stru.key_identifier);
    4384           0 : }
    4385             : 
    4386           0 : bool operator<<(Serializer& strm, const XTypes::PlainMapSTypeDefn& stru)
    4387             : {
    4388           0 :   return (strm << stru.header)
    4389           0 :     && (strm << ACE_OutputCDR::from_octet(stru.bound))
    4390           0 :     && (strm << *stru.element_identifier)
    4391           0 :     && (strm << stru.key_flags)
    4392           0 :     && (strm << *stru.key_identifier);
    4393             : }
    4394             : 
    4395           0 : bool operator>>(Serializer& strm, XTypes::PlainMapSTypeDefn& stru)
    4396             : {
    4397           0 :   return (strm >> stru.header)
    4398           0 :     && (strm >> ACE_InputCDR::to_octet(stru.bound))
    4399           0 :     && (strm >> *stru.element_identifier)
    4400           0 :     && (strm >> stru.key_flags)
    4401           0 :     && (strm >> *stru.key_identifier);
    4402             : }
    4403             : 
    4404             : 
    4405           0 : void serialized_size(const Encoding& encoding, size_t& size,
    4406             :   const XTypes::PlainSequenceLElemDefn& stru)
    4407             : {
    4408           0 :   serialized_size(encoding, size, stru.header);
    4409           0 :   primitive_serialized_size(encoding, size, stru.bound);
    4410           0 :   serialized_size(encoding, size, *stru.element_identifier);
    4411           0 : }
    4412             : 
    4413           0 : bool operator<<(Serializer& strm, const XTypes::PlainSequenceLElemDefn& stru)
    4414             : {
    4415           0 :   return (strm << stru.header)
    4416           0 :     && (strm << stru.bound)
    4417           0 :     && (strm << *stru.element_identifier);
    4418             : }
    4419             : 
    4420           0 : bool operator>>(Serializer& strm, XTypes::PlainSequenceLElemDefn& stru)
    4421             : {
    4422           0 :   return (strm >> stru.header)
    4423           0 :     && (strm >> stru.bound)
    4424           0 :     && (strm >> *stru.element_identifier);
    4425             : }
    4426             : 
    4427             : 
    4428         104 : void serialized_size(const Encoding& encoding, size_t& size,
    4429             :   const XTypes::PlainSequenceSElemDefn& stru)
    4430             : {
    4431         104 :   serialized_size(encoding, size, stru.header);
    4432         104 :   primitive_serialized_size(encoding, size, ACE_OutputCDR::from_octet(stru.bound));
    4433         104 :   serialized_size(encoding, size, *stru.element_identifier);
    4434         104 : }
    4435             : 
    4436           0 : bool operator<<(Serializer& strm, const XTypes::PlainSequenceSElemDefn& stru)
    4437             : {
    4438           0 :   return (strm << stru.header)
    4439           0 :     && (strm << ACE_OutputCDR::from_octet(stru.bound))
    4440           0 :     && (strm << *stru.element_identifier);
    4441             : }
    4442             : 
    4443         127 : bool operator>>(Serializer& strm, XTypes::PlainSequenceSElemDefn& stru)
    4444             : {
    4445         127 :   return (strm >> stru.header)
    4446         127 :     && (strm >> ACE_InputCDR::to_octet(stru.bound))
    4447         254 :     && (strm >> *stru.element_identifier);
    4448             : }
    4449             : 
    4450             : 
    4451           0 : void serialized_size(const Encoding& encoding, size_t& size,
    4452             :   const XTypes::StringLTypeDefn& stru)
    4453             : {
    4454           0 :   primitive_serialized_size(encoding, size, stru.bound);
    4455           0 : }
    4456             : 
    4457           0 : bool operator<<(Serializer& strm, const XTypes::StringLTypeDefn& stru)
    4458             : {
    4459           0 :   return (strm << stru.bound);
    4460             : }
    4461             : 
    4462           0 : bool operator>>(Serializer& strm, XTypes::StringLTypeDefn& stru)
    4463             : {
    4464           0 :   return (strm >> stru.bound);
    4465             : }
    4466             : 
    4467             : 
    4468          28 : void serialized_size(const Encoding& encoding, size_t& size,
    4469             :   const XTypes::StringSTypeDefn& stru)
    4470             : {
    4471          28 :   primitive_serialized_size(encoding, size, ACE_OutputCDR::from_octet(stru.bound));
    4472          28 : }
    4473             : 
    4474           0 : bool operator<<(Serializer& strm, const XTypes::StringSTypeDefn& stru)
    4475             : {
    4476           0 :   return (strm << ACE_OutputCDR::from_octet(stru.bound));
    4477             : }
    4478             : 
    4479          56 : bool operator>>(Serializer& strm, XTypes::StringSTypeDefn& stru)
    4480             : {
    4481          56 :   return (strm >> ACE_InputCDR::to_octet(stru.bound));
    4482             : }
    4483             : 
    4484             : 
    4485           0 : void serialized_size(const Encoding& encoding, size_t& size,
    4486             :   const XTypes::StronglyConnectedComponentId& stru)
    4487             : {
    4488           0 :   serialized_size_delimiter(encoding, size);
    4489           0 :   serialized_size(encoding, size, stru.sc_component_id);
    4490           0 :   primitive_serialized_size(encoding, size, stru.scc_length);
    4491           0 :   primitive_serialized_size(encoding, size, stru.scc_index);
    4492           0 : }
    4493             : 
    4494           0 : bool operator<<(Serializer& strm, const XTypes::StronglyConnectedComponentId& stru)
    4495             : {
    4496           0 :   size_t total_size = 0;
    4497           0 :   serialized_size(XTypes::get_typeobject_encoding(), total_size, stru);
    4498           0 :   if (!strm.write_delimiter(total_size)) {
    4499           0 :     return false;
    4500             :   }
    4501             : 
    4502           0 :   return (strm << stru.sc_component_id)
    4503           0 :     && (strm << stru.scc_length)
    4504           0 :     && (strm << stru.scc_index);
    4505             : }
    4506             : 
    4507          26 : bool operator>>(Serializer& strm, XTypes::StronglyConnectedComponentId& stru)
    4508             : {
    4509          26 :   size_t total_size = 0;
    4510          26 :   if (!strm.read_delimiter(total_size)) {
    4511           0 :     return false;
    4512             :   }
    4513             : 
    4514          26 :   const size_t start_pos = strm.rpos();
    4515             : 
    4516             :   // appendable, but no need to handle truncated streams since
    4517             :   // this struct is defined in the spec with the following members:
    4518          26 :   const bool ret = (strm >> stru.sc_component_id)
    4519          26 :     && (strm >> stru.scc_length)
    4520          52 :     && (strm >> stru.scc_index);
    4521             : 
    4522          26 :   if (ret && strm.rpos() - start_pos < total_size) {
    4523           0 :     strm.skip(total_size - strm.rpos() + start_pos);
    4524             :   }
    4525             : 
    4526          26 :   return ret;
    4527             : }
    4528             : 
    4529             : 
    4530         216 : void serialized_size(const Encoding& encoding, size_t& size,
    4531             :   const XTypes::PlainCollectionHeader& stru)
    4532             : {
    4533         216 :   primitive_serialized_size(encoding, size, ACE_OutputCDR::from_octet(stru.equiv_kind));
    4534         216 :   primitive_serialized_size(encoding, size, stru.element_flags);
    4535         216 : }
    4536             : 
    4537           0 : bool operator<<(Serializer& strm, const XTypes::PlainCollectionHeader& stru)
    4538             : {
    4539           0 :   return (strm << ACE_OutputCDR::from_octet(stru.equiv_kind))
    4540           0 :     && (strm << stru.element_flags);
    4541             : }
    4542             : 
    4543         240 : bool operator>>(Serializer& strm, XTypes::PlainCollectionHeader& stru)
    4544             : {
    4545         240 :   return (strm >> ACE_InputCDR::to_octet(stru.equiv_kind))
    4546         240 :     && (strm >> stru.element_flags);
    4547             : }
    4548             : 
    4549             : 
    4550           0 : void serialized_size(const Encoding& encoding, size_t& size,
    4551             :   const XTypes::TypeObjectHashId& uni)
    4552             : {
    4553           0 :   primitive_serialized_size(encoding, size, ACE_OutputCDR::from_octet(uni.kind));
    4554           0 :   switch (uni.kind) {
    4555           0 :   case XTypes::EK_MINIMAL:
    4556             :   case XTypes::EK_COMPLETE: {
    4557           0 :     XTypes::EquivalenceHash_forany uni_hash(const_cast<XTypes::EquivalenceHash_slice*>(uni.hash));
    4558           0 :     serialized_size(encoding, size, uni_hash);
    4559           0 :     break;
    4560             :   }
    4561           0 :   default:
    4562           0 :     break;
    4563             :   }
    4564           0 : }
    4565             : 
    4566           0 : bool operator<<(Serializer& strm, const XTypes::TypeObjectHashId& uni)
    4567             : {
    4568           0 :   if (!(strm << ACE_OutputCDR::from_octet(uni.kind))) {
    4569           0 :     return false;
    4570             :   }
    4571           0 :   switch (uni.kind) {
    4572           0 :   case XTypes::EK_MINIMAL:
    4573             :   case XTypes::EK_COMPLETE: {
    4574           0 :     XTypes::EquivalenceHash_forany uni_hash(const_cast<XTypes::EquivalenceHash_slice*>(uni.hash));
    4575           0 :     return strm << uni_hash;
    4576             :   }
    4577           0 :   default:
    4578           0 :     return true;
    4579             :   }
    4580             : }
    4581             : 
    4582          26 : bool operator>>(Serializer& strm, XTypes::TypeObjectHashId& uni)
    4583             : {
    4584          26 :   if (!(strm >> ACE_InputCDR::to_octet(uni.kind))) {
    4585           0 :     return false;
    4586             :   }
    4587          26 :   switch (uni.kind) {
    4588          26 :   case XTypes::EK_MINIMAL:
    4589             :   case XTypes::EK_COMPLETE: {
    4590          26 :     XTypes::EquivalenceHash_forany uni_hash(uni.hash);
    4591          26 :     return strm >> uni_hash;
    4592             :   }
    4593           0 :   default:
    4594           0 :     return true;
    4595             :   }
    4596             : }
    4597             : 
    4598             : 
    4599         207 : void serialized_size(const Encoding& encoding, size_t& size,
    4600             :   const XTypes::CompleteTypeObject& type_object)
    4601             : {
    4602             :   using namespace XTypes;
    4603         207 :   primitive_serialized_size_octet(encoding, size); // discriminator
    4604             : 
    4605         207 :   switch (type_object.kind) {
    4606          49 :   case TK_ALIAS:
    4607          49 :     serialized_size(encoding, size, type_object.alias_type);
    4608          49 :     return;
    4609           0 :   case TK_ANNOTATION:
    4610           0 :     serialized_size(encoding, size, type_object.annotation_type);
    4611           0 :     return;
    4612         110 :   case TK_STRUCTURE:
    4613         110 :     serialized_size(encoding, size, type_object.struct_type);
    4614         110 :     return;
    4615          34 :   case TK_UNION:
    4616          34 :     serialized_size(encoding, size, type_object.union_type);
    4617          34 :     return;
    4618           0 :   case TK_BITSET:
    4619           0 :     serialized_size(encoding, size, type_object.bitset_type);
    4620           0 :     return;
    4621           0 :   case TK_SEQUENCE:
    4622           0 :     serialized_size(encoding, size, type_object.sequence_type);
    4623           0 :     return;
    4624           0 :   case TK_ARRAY:
    4625           0 :     serialized_size(encoding, size, type_object.array_type);
    4626           0 :     return;
    4627           0 :   case TK_MAP:
    4628           0 :     serialized_size(encoding, size, type_object.map_type);
    4629           0 :     return;
    4630          14 :   case TK_ENUM:
    4631          14 :     serialized_size(encoding, size, type_object.enumerated_type);
    4632          14 :     return;
    4633           0 :   case TK_BITMASK:
    4634           0 :     serialized_size(encoding, size, type_object.bitmask_type);
    4635           0 :     return;
    4636           0 :   default:
    4637           0 :     serialized_size(encoding, size, type_object.extended_type);
    4638             :   }
    4639             : }
    4640             : 
    4641           0 : bool operator<<(Serializer& ser, const XTypes::CompleteTypeObject& type_object)
    4642             : {
    4643             :   using namespace XTypes;
    4644           0 :   if (!(ser << ACE_OutputCDR::from_octet(type_object.kind))) {
    4645           0 :     return false;
    4646             :   }
    4647             : 
    4648           0 :   switch (type_object.kind) {
    4649           0 :   case TK_ALIAS:
    4650           0 :     return ser << type_object.alias_type;
    4651           0 :   case TK_ANNOTATION:
    4652           0 :     return ser << type_object.annotation_type;
    4653           0 :   case TK_STRUCTURE:
    4654           0 :     return ser << type_object.struct_type;
    4655           0 :   case TK_UNION:
    4656           0 :     return ser << type_object.union_type;
    4657           0 :   case TK_BITSET:
    4658           0 :     return ser << type_object.bitset_type;
    4659           0 :   case TK_SEQUENCE:
    4660           0 :     return ser << type_object.sequence_type;
    4661           0 :   case TK_ARRAY:
    4662           0 :     return ser << type_object.array_type;
    4663           0 :   case TK_MAP:
    4664           0 :     return ser << type_object.map_type;
    4665           0 :   case TK_ENUM:
    4666           0 :     return ser << type_object.enumerated_type;
    4667           0 :   case TK_BITMASK:
    4668           0 :     return ser << type_object.bitmask_type;
    4669           0 :   default:
    4670           0 :     return ser << type_object.extended_type;
    4671             :   }
    4672             : }
    4673             : 
    4674         215 : bool operator>>(Serializer& ser, XTypes::CompleteTypeObject& type_object)
    4675             : {
    4676             :   using namespace XTypes;
    4677         215 :   if (!(ser >> ACE_InputCDR::to_octet(type_object.kind))) {
    4678           0 :     return false;
    4679             :   }
    4680             : 
    4681         215 :   switch (type_object.kind) {
    4682          94 :   case TK_ALIAS:
    4683          94 :     return ser >> type_object.alias_type;
    4684           0 :   case TK_ANNOTATION:
    4685           0 :     return ser >> type_object.annotation_type;
    4686          79 :   case TK_STRUCTURE:
    4687          79 :     return ser >> type_object.struct_type;
    4688          29 :   case TK_UNION:
    4689          29 :     return ser >> type_object.union_type;
    4690           0 :   case TK_BITSET:
    4691           0 :     return ser >> type_object.bitset_type;
    4692           6 :   case TK_SEQUENCE:
    4693           6 :     return ser >> type_object.sequence_type;
    4694           1 :   case TK_ARRAY:
    4695           1 :     return ser >> type_object.array_type;
    4696           0 :   case TK_MAP:
    4697           0 :     return ser >> type_object.map_type;
    4698           6 :   case TK_ENUM:
    4699           6 :     return ser >> type_object.enumerated_type;
    4700           0 :   case TK_BITMASK:
    4701           0 :     return ser >> type_object.bitmask_type;
    4702           0 :   default:
    4703           0 :     return ser >> type_object.extended_type;
    4704             :   }
    4705             : }
    4706             : 
    4707             : 
    4708         211 : void serialized_size(const Encoding& encoding, size_t& size,
    4709             :   const XTypes::MinimalTypeObject& type_object)
    4710             : {
    4711             :   using namespace XTypes;
    4712         211 :   primitive_serialized_size_octet(encoding, size); // discriminator
    4713             : 
    4714         211 :   switch (type_object.kind) {
    4715          49 :   case TK_ALIAS:
    4716          49 :     return serialized_size(encoding, size, type_object.alias_type);
    4717           0 :   case TK_ANNOTATION:
    4718           0 :     return serialized_size(encoding, size, type_object.annotation_type);
    4719         114 :   case TK_STRUCTURE:
    4720         114 :     return serialized_size(encoding, size, type_object.struct_type);
    4721          34 :   case TK_UNION:
    4722          34 :     return serialized_size(encoding, size, type_object.union_type);
    4723           0 :   case TK_BITSET:
    4724           0 :     return serialized_size(encoding, size, type_object.bitset_type);
    4725           0 :   case TK_SEQUENCE:
    4726           0 :     return serialized_size(encoding, size, type_object.sequence_type);
    4727           0 :   case TK_ARRAY:
    4728           0 :     return serialized_size(encoding, size, type_object.array_type);
    4729           0 :   case TK_MAP:
    4730           0 :     return serialized_size(encoding, size, type_object.map_type);
    4731          14 :   case TK_ENUM:
    4732          14 :     return serialized_size(encoding, size, type_object.enumerated_type);
    4733           0 :   case TK_BITMASK:
    4734           0 :     return serialized_size(encoding, size, type_object.bitmask_type);
    4735           0 :   default:
    4736           0 :     return serialized_size(encoding, size, type_object.extended_type);
    4737             :   }
    4738             : }
    4739             : 
    4740           2 : bool operator<<(Serializer& ser, const XTypes::MinimalTypeObject& type_object)
    4741             : {
    4742             :   using namespace XTypes;
    4743           2 :   if (!(ser << ACE_OutputCDR::from_octet(type_object.kind))) {
    4744           0 :     return false;
    4745             :   }
    4746             : 
    4747           2 :   switch (type_object.kind) {
    4748           0 :   case TK_ALIAS:
    4749           0 :     return ser << type_object.alias_type;
    4750           0 :   case TK_ANNOTATION:
    4751           0 :     return ser << type_object.annotation_type;
    4752           2 :   case TK_STRUCTURE:
    4753           2 :     return ser << type_object.struct_type;
    4754           0 :   case TK_UNION:
    4755           0 :     return ser << type_object.union_type;
    4756           0 :   case TK_BITSET:
    4757           0 :     return ser << type_object.bitset_type;
    4758           0 :   case TK_SEQUENCE:
    4759           0 :     return ser << type_object.sequence_type;
    4760           0 :   case TK_ARRAY:
    4761           0 :     return ser << type_object.array_type;
    4762           0 :   case TK_MAP:
    4763           0 :     return ser << type_object.map_type;
    4764           0 :   case TK_ENUM:
    4765           0 :     return ser << type_object.enumerated_type;
    4766           0 :   case TK_BITMASK:
    4767           0 :     return ser << type_object.bitmask_type;
    4768           0 :   default:
    4769           0 :     return ser << type_object.extended_type;
    4770             :   }
    4771             : }
    4772             : 
    4773         112 : bool operator>>(Serializer& ser, XTypes::MinimalTypeObject& type_object)
    4774             : {
    4775             :   using namespace XTypes;
    4776         112 :   if (!(ser >> ACE_InputCDR::to_octet(type_object.kind))) {
    4777           0 :     return false;
    4778             :   }
    4779             : 
    4780         112 :   switch (type_object.kind) {
    4781          54 :   case TK_ALIAS:
    4782          54 :     return ser >> type_object.alias_type;
    4783           0 :   case TK_ANNOTATION:
    4784           0 :     return ser >> type_object.annotation_type;
    4785          39 :   case TK_STRUCTURE:
    4786          39 :     return ser >> type_object.struct_type;
    4787          10 :   case TK_UNION:
    4788          10 :     return ser >> type_object.union_type;
    4789           0 :   case TK_BITSET:
    4790           0 :     return ser >> type_object.bitset_type;
    4791           4 :   case TK_SEQUENCE:
    4792           4 :     return ser >> type_object.sequence_type;
    4793           1 :   case TK_ARRAY:
    4794           1 :     return ser >> type_object.array_type;
    4795           0 :   case TK_MAP:
    4796           0 :     return ser >> type_object.map_type;
    4797           4 :   case TK_ENUM:
    4798           4 :     return ser >> type_object.enumerated_type;
    4799           0 :   case TK_BITMASK:
    4800           0 :     return ser >> type_object.bitmask_type;
    4801           0 :   default:
    4802           0 :     return ser >> type_object.extended_type;
    4803             :   }
    4804             : }
    4805             : 
    4806             : 
    4807         418 : void serialized_size(const Encoding& encoding, size_t& size,
    4808             :   const XTypes::TypeObject& type_object)
    4809             : {
    4810             :   using namespace XTypes;
    4811         418 :   primitive_serialized_size_ulong(encoding, size); // DHEADER
    4812         418 :   primitive_serialized_size_octet(encoding, size); // discriminator
    4813             : 
    4814         418 :   switch (type_object.kind) {
    4815         207 :   case EK_COMPLETE:
    4816         207 :     return serialized_size(encoding, size, type_object.complete);
    4817         211 :   case EK_MINIMAL:
    4818         211 :     return serialized_size(encoding, size, type_object.minimal);
    4819             :   }
    4820             : }
    4821             : 
    4822           2 : bool operator<<(Serializer& ser, const XTypes::TypeObject& type_object)
    4823             : {
    4824           2 :   size_t total_size = 0;
    4825           2 :   serialized_size(ser.encoding(), total_size, type_object);
    4826           2 :   if (!ser.write_delimiter(total_size)) {
    4827           0 :     return false;
    4828             :   }
    4829             : 
    4830           2 :   if (!(ser << ACE_OutputCDR::from_octet(type_object.kind))) {
    4831           0 :     return false;
    4832             :   }
    4833             : 
    4834           2 :   switch (type_object.kind) {
    4835           0 :   case XTypes::EK_COMPLETE:
    4836           0 :     return ser << type_object.complete;
    4837           2 :   case XTypes::EK_MINIMAL:
    4838           2 :     return ser << type_object.minimal;
    4839             :   }
    4840             : 
    4841           0 :   return true;
    4842             : }
    4843             : 
    4844         327 : bool operator>>(Serializer& ser, XTypes::TypeObject& type_object)
    4845             : {
    4846         327 :   size_t total_size = 0;
    4847         327 :   if (!ser.read_delimiter(total_size)) {
    4848           0 :     return false;
    4849             :   }
    4850             : 
    4851         327 :   if (!(ser >> ACE_InputCDR::to_octet(type_object.kind))) {
    4852           0 :     return false;
    4853             :   }
    4854             : 
    4855         327 :   bool ret = true;
    4856         327 :   switch (type_object.kind) {
    4857         215 :   case XTypes::EK_COMPLETE:
    4858         215 :     ret = ser >> type_object.complete;
    4859         215 :     break;
    4860         112 :   case XTypes::EK_MINIMAL:
    4861         112 :     ret = ser >> type_object.minimal;
    4862         112 :     break;
    4863             :   }
    4864             : 
    4865         327 :   return ret;
    4866             : }
    4867             : 
    4868             : 
    4869           0 : void serialized_size(const Encoding& encoding, size_t& size,
    4870             :   const XTypes::MinimalExtendedType&)
    4871             : {
    4872           0 :   serialized_size_delimiter(encoding, size);
    4873           0 : }
    4874             : 
    4875           0 : bool operator<<(Serializer& strm, const XTypes::MinimalExtendedType&)
    4876             : {
    4877           0 :   return XTypes::write_empty_xcdr2_nonfinal(strm);
    4878             : }
    4879             : 
    4880           0 : bool operator>>(Serializer& strm, XTypes::MinimalExtendedType&)
    4881             : {
    4882           0 :   return XTypes::read_empty_xcdr2_nonfinal(strm);
    4883             : }
    4884             : 
    4885             : 
    4886         162 : void serialized_size(const Encoding& encoding, size_t& size,
    4887             :   const XTypes::TypeInformation& stru)
    4888             : {
    4889         162 :   size_t mutable_running_total = 0;
    4890         162 :   serialized_size_delimiter(encoding, size);
    4891             : 
    4892         162 :   serialized_size_parameter_id(encoding, size, mutable_running_total);
    4893         162 :   serialized_size(encoding, size, stru.minimal);
    4894             : 
    4895         162 :   serialized_size_parameter_id(encoding, size, mutable_running_total);
    4896         162 :   serialized_size(encoding, size, stru.complete);
    4897             : 
    4898         162 :   serialized_size_list_end_parameter_id(encoding, size, mutable_running_total);
    4899         162 : }
    4900             : 
    4901          81 : bool operator<<(Serializer& strm, const XTypes::TypeInformation& stru)
    4902             : {
    4903          81 :   const Encoding& encoding = strm.encoding();
    4904          81 :   size_t total_size = 0;
    4905          81 :   serialized_size(encoding, total_size, stru);
    4906          81 :   if (!strm.write_delimiter(total_size)) {
    4907           0 :     return false;
    4908             :   }
    4909             : 
    4910          81 :   size_t size = 0;
    4911             : 
    4912          81 :   serialized_size(encoding, size, stru.minimal);
    4913          81 :   if (!strm.write_parameter_id(4097, size)) {
    4914           0 :     return false;
    4915             :   }
    4916          81 :   size = 0;
    4917          81 :   if (!(strm << stru.minimal)) {
    4918           0 :     return false;
    4919             :   }
    4920             : 
    4921          81 :   serialized_size(encoding, size, stru.complete);
    4922          81 :   if (!strm.write_parameter_id(4098, size)) {
    4923           0 :     return false;
    4924             :   }
    4925          81 :   size = 0;
    4926          81 :   if (!(strm << stru.complete)) {
    4927           0 :     return false;
    4928             :   }
    4929             : 
    4930          81 :   return true;
    4931             : }
    4932             : 
    4933          39 : bool operator>>(Serializer& strm, XTypes::TypeInformation& stru)
    4934             : {
    4935          39 :   size_t total_size = 0;
    4936          39 :   if (!strm.read_delimiter(total_size)) {
    4937           0 :     return false;
    4938             :   }
    4939             : 
    4940          39 :   const size_t start_pos = strm.rpos();
    4941             : 
    4942             :   unsigned member_id;
    4943             :   size_t field_size;
    4944             :   while (true) {
    4945             : 
    4946         117 :     if (strm.rpos() - start_pos >= total_size) {
    4947          39 :       return true;
    4948             :     }
    4949             : 
    4950          78 :     bool must_understand = false;
    4951          78 :     if (!strm.read_parameter_id(member_id, field_size, must_understand)) {
    4952           0 :       return false;
    4953             :     }
    4954             : 
    4955          78 :     switch (member_id) {
    4956          39 :     case 4097: {
    4957          39 :       if (!(strm >> stru.minimal)) {
    4958           0 :         return false;
    4959             :       }
    4960          39 :       break;
    4961             :     }
    4962          39 :     case 4098: {
    4963          39 :       if (!(strm >> stru.complete)) {
    4964           0 :         return false;
    4965             :       }
    4966          39 :       break;
    4967             :     }
    4968           0 :     default:
    4969           0 :       if (must_understand) {
    4970           0 :         if (DCPS_debug_level >= 8) {
    4971           0 :           ACE_DEBUG((LM_DEBUG, ACE_TEXT("(%P|%t) unknown must_understand field(%u) in OpenDDS::XTypes::TypeInformation\n"), member_id));
    4972             :         }
    4973           0 :         return false;
    4974             :       }
    4975           0 :       strm.skip(field_size);
    4976           0 :       break;
    4977             :     }
    4978          78 :   }
    4979             :   return false;
    4980             : }
    4981             : 
    4982             : 
    4983           0 : void serialized_size(const Encoding& encoding, size_t& size,
    4984             :   const XTypes::TypeIdentifierTypeObjectPair& stru)
    4985             : {
    4986           0 :   serialized_size(encoding, size, stru.type_identifier);
    4987           0 :   serialized_size(encoding, size, stru.type_object);
    4988           0 : }
    4989             : 
    4990           0 : void serialized_size(const Encoding& encoding, size_t& size,
    4991             :                      const NestedKeyOnly<const XTypes::TypeIdentifierTypeObjectPair>& stru)
    4992             : {
    4993           0 :   serialized_size(encoding, size, stru.value);
    4994           0 : }
    4995             : 
    4996           0 : bool operator<<(Serializer& strm, const XTypes::TypeIdentifierTypeObjectPair& stru)
    4997             : {
    4998           0 :   return (strm << stru.type_identifier)
    4999           0 :     && (strm << stru.type_object);
    5000             : }
    5001             : 
    5002           0 : bool operator<<(Serializer& strm, const NestedKeyOnly<const XTypes::TypeIdentifierTypeObjectPair>& stru)
    5003             : {
    5004           0 :   return (strm << stru.value);
    5005             : }
    5006             : 
    5007           0 : bool operator>>(Serializer& strm, XTypes::TypeIdentifierTypeObjectPair& stru)
    5008             : {
    5009           0 :   return (strm >> stru.type_identifier)
    5010           0 :     && (strm >> stru.type_object);
    5011             : }
    5012             : 
    5013           0 : bool operator>>(Serializer& strm, NestedKeyOnly<XTypes::TypeIdentifierTypeObjectPair>& stru)
    5014             : {
    5015           0 :   return (strm >> stru.value);
    5016             : }
    5017             : 
    5018           0 : void serialized_size(const Encoding& encoding, size_t& size,
    5019             :   const XTypes::TypeIdentifierPair& stru)
    5020             : {
    5021           0 :   serialized_size(encoding, size, stru.type_identifier1);
    5022           0 :   serialized_size(encoding, size, stru.type_identifier2);
    5023           0 : }
    5024             : 
    5025           0 : void serialized_size(const Encoding& encoding, size_t& size,
    5026             :                      const NestedKeyOnly<const XTypes::TypeIdentifierPair>& stru)
    5027             : {
    5028           0 :   serialized_size(encoding, size, stru.value);
    5029           0 : }
    5030             : 
    5031           0 : bool operator<<(Serializer& strm, const XTypes::TypeIdentifierPair& stru)
    5032             : {
    5033           0 :   return (strm << stru.type_identifier1)
    5034           0 :     && (strm << stru.type_identifier2);
    5035             : }
    5036             : 
    5037           0 : bool operator<<(Serializer& strm, const NestedKeyOnly<const XTypes::TypeIdentifierPair>& stru)
    5038             : {
    5039           0 :   return (strm << stru.value);
    5040             : }
    5041             : 
    5042           0 : bool operator>>(Serializer& strm, XTypes::TypeIdentifierPair& stru)
    5043             : {
    5044           0 :   return (strm >> stru.type_identifier1)
    5045           0 :     && (strm >> stru.type_identifier2);
    5046             : }
    5047             : 
    5048           0 : bool operator>>(Serializer& strm, NestedKeyOnly<XTypes::TypeIdentifierPair>& stru)
    5049             : {
    5050           0 :   return (strm >> stru.value);
    5051             : }
    5052             : 
    5053         327 : bool to_type_object(const unsigned char* buffer, size_t size, XTypes::TypeObject& to)
    5054             : {
    5055         327 :   ACE_Message_Block message_block(reinterpret_cast<const char*>(buffer), size);
    5056         327 :   message_block.length(size);
    5057         327 :   DCPS::Serializer ser(&message_block, XTypes::get_typeobject_encoding());
    5058         654 :   return ser >> to;
    5059         327 : }
    5060             : 
    5061             : } // namespace DCPS
    5062             : } // namespace OpenDDS
    5063             : 
    5064             : OPENDDS_END_VERSIONED_NAMESPACE_DECL

Generated by: LCOV version 1.16