CORBA::TypeCode
implementation for OMG IDL sequence
and array
types.
More...
#include <Sequence_TypeCode.h>
Inheritance diagram for TAO::TypeCode::Sequence< TypeCodeType, RefCountPolicy >:
@c TAO CORBA::TypeCode Template Methods | |
CORBA::TypeCode template methods specific to tk_sequence TypeCodes .
| |
virtual CORBA::Boolean | equal_i (CORBA::TypeCode_ptr tc) const |
virtual CORBA::Boolean | equivalent_i (CORBA::TypeCode_ptr tc) const |
virtual CORBA::TypeCode_ptr | get_compact_typecode_i (void) const |
virtual CORBA::ULong | length_i (void) const |
virtual CORBA::TypeCode_ptr | content_type_i (void) const |
TypeCodeType const | content_type_ |
Element type of the sequence. | |
CORBA::ULong const | length_ |
Public Member Functions | |
Sequence (CORBA::TCKind kind, TypeCodeType const &content_type, CORBA::ULong length) | |
Constructor. | |
TAO-specific @c CORBA::TypeCode Methods | |
virtual bool | tao_marshal (TAO_OutputCDR &cdr, CORBA::ULong offset) const |
Marshal this TypeCode into a CDR output stream. | |
virtual void | tao_duplicate (void) |
Increase the reference count on this TypeCode . | |
virtual void | tao_release (void) |
Decrease the reference count on this object. |
CORBA::TypeCode
implementation for OMG IDL sequence
and array
types.
This class implements a CORBA::TypeCode
for OMG IDL sequence
and array types.
Definition at line 44 of file Sequence_TypeCode.h.
|
Constructor.
Definition at line 9 of file Sequence_TypeCode.inl.
00019 : ::CORBA::TypeCode (kind) 00020 , RefCountPolicy () 00021 , content_type_ (content_type) 00022 , length_ (length) 00023 { 00024 // ACE_ASSERT (kind == CORBA::tk_array || kind == CORBA::tk_sequence); 00025 } |
|
Reimplemented from CORBA::TypeCode. Definition at line 136 of file Sequence_TypeCode.cpp. References CORBA::TypeCode::_duplicate().
00138 { 00139 return 00140 CORBA::TypeCode::_duplicate ( 00141 Traits<TypeCodeType>::get_typecode (this->content_type_)); 00142 } |
|
Implements CORBA::TypeCode. Definition at line 65 of file Sequence_TypeCode.cpp.
00067 { 00068 // The following calls won't throw since CORBA::TypeCode::equal() 00069 // has already established the kind of tc is the same as our kind. 00070 CORBA::ULong const tc_length = tc->length (); 00071 00072 if (this->length_ != tc_length) 00073 return 0; 00074 00075 CORBA::TypeCode_var rhs_content_type = 00076 tc->content_type (); 00077 00078 return 00079 Traits<TypeCodeType>::get_typecode (this->content_type_)->equal ( 00080 rhs_content_type.in () 00081 ); 00082 } |
|
Implements CORBA::TypeCode. Definition at line 87 of file Sequence_TypeCode.cpp.
00089 { 00090 // The following calls won't throw since CORBA::TypeCode::equal() 00091 // has already established the kind of tc is the same as our kind. 00092 CORBA::ULong const tc_length = tc->length (); 00093 00094 if (this->length_ != tc_length) 00095 return 0; 00096 00097 CORBA::TypeCode_var rhs_content_type = 00098 tc->content_type (); 00099 00100 return 00101 Traits<TypeCodeType>::get_typecode (this->content_type_)->equivalent ( 00102 rhs_content_type.in () 00103 ); 00104 } |
|
Implements CORBA::TypeCode. Definition at line 108 of file Sequence_TypeCode.cpp. References CORBA::TypeCode::_duplicate().
00110 { 00111 // Already compact since tk_sequence and tk_array TypeCodes have no 00112 // name or member names, meaning that we can simply call 00113 // _duplicate() on this TypeCode. 00114 00115 // @@ There is a potential problem here if this TypeCode is a static 00116 // and const since it may have been placed in read-only memory by 00117 // the compiler. A const_cast<> can return undefined results in 00118 // that case. 00119 00120 CORBA::TypeCode_ptr mutable_tc = 00121 const_cast<TAO::TypeCode::Sequence<TypeCodeType, RefCountPolicy> *> (this); 00122 00123 return CORBA::TypeCode::_duplicate (mutable_tc); 00124 } |
|
Reimplemented from CORBA::TypeCode. Definition at line 128 of file Sequence_TypeCode.cpp.
00130 { 00131 return this->length_; 00132 } |
|
Increase the reference count on this
Implements CORBA::TypeCode. Definition at line 50 of file Sequence_TypeCode.cpp.
00051 { 00052 this->RefCountPolicy::add_ref (); 00053 } |
|
Marshal this
Marshal this
Implements CORBA::TypeCode. Definition at line 18 of file Sequence_TypeCode.cpp. References ACE_align_binary(), ACE_OutputCDR::begin(), TAO_ENCAP_BYTE_ORDER, ACE_OutputCDR::total_length(), and ACE_OutputCDR::write_octet_array_mb().
00021 { 00022 // A tk_array or tk_sequence TypeCode has a "complex" parameter list 00023 // type (see Table 15-2 in Section 15.3.5.1 "TypeCode" in the CDR 00024 // section of the CORBA specification), meaning that it must be 00025 // marshaled into a CDR encapsulation. 00026 00027 // Create a CDR encapsulation. 00028 TAO_OutputCDR enc; 00029 00030 // Account for the encoded CDR encapsulation length and byte order. 00031 // 00032 // Aligning on an octet since the next value after the CDR 00033 // encapsulation length will always be the byte order octet/boolean 00034 // in this case. 00035 offset = ACE_align_binary (offset + 4, 00036 ACE_CDR::OCTET_ALIGN); 00037 00038 return 00039 enc << TAO_OutputCDR::from_boolean (TAO_ENCAP_BYTE_ORDER) 00040 && marshal (enc, 00041 Traits<TypeCodeType>::get_typecode (this->content_type_), 00042 offset + enc.total_length ()) 00043 && enc << this->length_ 00044 && cdr << static_cast<CORBA::ULong> (enc.total_length ()) 00045 && cdr.write_octet_array_mb (enc.begin ()); 00046 } |
|
Decrease the reference count on this object.
Implements CORBA::TypeCode. Definition at line 57 of file Sequence_TypeCode.cpp.
00058 { 00059 this->RefCountPolicy::remove_ref (); 00060 } |
|
Element type of the sequence.
A pointer to the
Definition at line 105 of file Sequence_TypeCode.h. |
|
Length of the Definition at line 109 of file Sequence_TypeCode.h. |