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.
TAO_BEGIN_VERSIONED_NAMESPACE_DECL ACE_INLINE TAO::TypeCode::Sequence< TypeCodeType, RefCountPolicy >::Sequence | ( | CORBA::TCKind | kind, | |
TypeCodeType const & | content_type, | |||
CORBA::ULong | length | |||
) |
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 }
CORBA::TypeCode_ptr TAO::TypeCode::Sequence< TypeCodeType, RefCountPolicy >::content_type_i | ( | void | ) | const [protected, virtual] |
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 }
CORBA::Boolean TAO::TypeCode::Sequence< TypeCodeType, RefCountPolicy >::equal_i | ( | CORBA::TypeCode_ptr | tc | ) | const [protected, virtual] |
Implements CORBA::TypeCode.
Definition at line 65 of file Sequence_TypeCode.cpp.
References TAO_Pseudo_Var_T< T >::in().
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 }
CORBA::Boolean TAO::TypeCode::Sequence< TypeCodeType, RefCountPolicy >::equivalent_i | ( | CORBA::TypeCode_ptr | tc | ) | const [protected, virtual] |
Implements CORBA::TypeCode.
Definition at line 87 of file Sequence_TypeCode.cpp.
References TAO_Pseudo_Var_T< T >::in().
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 }
CORBA::TypeCode_ptr TAO::TypeCode::Sequence< TypeCodeType, RefCountPolicy >::get_compact_typecode_i | ( | void | ) | const [protected, virtual] |
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 }
CORBA::ULong TAO::TypeCode::Sequence< TypeCodeType, RefCountPolicy >::length_i | ( | void | ) | const [protected, virtual] |
Reimplemented from CORBA::TypeCode.
Definition at line 128 of file Sequence_TypeCode.cpp.
References TAO::TypeCode::Sequence< TypeCodeType, RefCountPolicy >::length_.
00130 { 00131 return this->length_; 00132 }
void TAO::TypeCode::Sequence< TypeCodeType, RefCountPolicy >::tao_duplicate | ( | void | ) | [virtual] |
Increase the reference count on this TypeCode
.
Implements CORBA::TypeCode.
Definition at line 50 of file Sequence_TypeCode.cpp.
TAO_BEGIN_VERSIONED_NAMESPACE_DECL bool TAO::TypeCode::Sequence< TypeCodeType, RefCountPolicy >::tao_marshal | ( | TAO_OutputCDR & | cdr, | |
CORBA::ULong | offset | |||
) | const [virtual] |
Marshal this TypeCode
into a CDR output stream.
Marshal this TypeCode
into the cdr output CDR stream, excluding the TypeCode
kind. Existing cdr contents will not be altered. The marshaled TypeCode
will be appended to the given cdr CDR output stream.
cdr | Output CDR stream into which the TypeCode will be marshaled. | |
offset | Number of bytes currently in the output CDR stream, including the top-level TypeCode TCKind . This argument is useful for recursive TypeCodes . TypeCodes that contain other TypeCodes should pass an updated offset value to the marshaling operation for those contained TypeCodes . |
true
if marshaling was successful.CORBA::TypeCode
interface.If this method returns false, the contents of the cdr output CDR stream are undefined.
Implements CORBA::TypeCode.
Definition at line 18 of file Sequence_TypeCode.cpp.
References ACE_align_binary(), ACE_OutputCDR::begin(), ACE_CDR::OCTET_ALIGN, 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 }
void TAO::TypeCode::Sequence< TypeCodeType, RefCountPolicy >::tao_release | ( | void | ) | [virtual] |
Decrease the reference count on this object.
Implements CORBA::TypeCode.
Definition at line 57 of file Sequence_TypeCode.cpp.
TypeCodeType const TAO::TypeCode::Sequence< TypeCodeType, RefCountPolicy >::content_type_ [private] |
Element type of the sequence.
A pointer to the CORBA::TypeCode_ptr
rather than the CORBA::TypeCode_ptr
itself is stored since that address is well-defined. We may not know the value of the CORBA::TypeCode_ptr
when creating this Field
statically at compile-time, hence the indirection.
TypeCode
is released upon destruction of this TypeCode::Sequence
. Definition at line 105 of file Sequence_TypeCode.h.
CORBA::ULong const TAO::TypeCode::Sequence< TypeCodeType, RefCountPolicy >::length_ [private] |
Length of the sequence
or array. A length of zero indicates an unbounded sequence
.
Definition at line 109 of file Sequence_TypeCode.h.
Referenced by TAO::TypeCode::Sequence< TypeCodeType, RefCountPolicy >::length_i().