#include <Tagged_Components.h>
Collaboration diagram for TAO_Tagged_Components:
This class is used to manipulate and access the field of an IIOP profile (and other GIOP profiles). The definition for that field is simply a sequence of the following structures: typedef unsigned long ComponentId; struct TaggedComponent { ComponentId tag; sequence<octet> component_data; }; the real motivation is to minimize the marshaling and demarshaling of the field for certain critical components.
Definition at line 57 of file Tagged_Components.h.
|
Constructor.
Definition at line 8 of file Tagged_Components.inl.
00009 : orb_type_ (0), 00010 orb_type_set_ (0), 00011 code_sets_set_ (0) 00012 { 00013 } |
|
Definition at line 213 of file Tagged_Components.cpp. References IOP::TaggedComponent::component_data, components_, and IOP::TaggedComponent::tag.
00214 { 00215 // @@ TODO Some components can show up multiple times, others 00216 // can't find out and take appropiate action. 00217 CORBA::ULong l = this->components_.length (); 00218 this->components_.length (l + 1); 00219 this->components_[l].tag = component.tag; 00220 CORBA::ULong max = component.component_data.maximum (); 00221 CORBA::ULong len = component.component_data.length (); 00222 CORBA::Octet* buf = component.component_data.get_buffer (1); 00223 this->components_[l].component_data.replace (max, len, buf, 1); 00224 } |
|
Definition at line 227 of file Tagged_Components.cpp. References components_. Referenced by set_component(), and set_component_i().
00228 { 00229 // @@ TODO Some components can show up multiple times, others 00230 // can't find out and take appropiate action. 00231 CORBA::ULong l = this->components_.length (); 00232 this->components_.length (l + 1); 00233 this->components_[l] = component; 00234 } |
|
Read/Write access to the underlying MutipleComponentProfile. Added by request from Chris Hafey <chris@stentorsoft.com> Definition at line 77 of file Tagged_Components.inl. References components_. Referenced by TAO_IIOP_Profile::decode_endpoints().
00078 { 00079 return this->components_; 00080 } |
|
Definition at line 312 of file Tagged_Components.cpp. References code_sets_set_, components_, known_tag(), orb_type_set_, set_known_component_i(), and IOP::TaggedComponent::tag. Referenced by TAO_Profile::decode().
00313 { 00314 // Mark the well-known components as removed 00315 this->orb_type_set_ = 0; 00316 this->code_sets_set_ = 0; 00317 00318 if ((cdr >> this->components_) == 0) 00319 { 00320 return 0; 00321 } 00322 00323 CORBA::ULong const l = this->components_.length (); 00324 00325 for (CORBA::ULong i = 0; i != l; ++i) 00326 { 00327 const IOP::TaggedComponent &component = this->components_[i]; 00328 00329 if (this->known_tag (component.tag)) 00330 { 00331 this->set_known_component_i (component); 00332 } 00333 } 00334 00335 return 1; 00336 } |
|
Marshal and demarshal the list.
Definition at line 306 of file Tagged_Components.cpp. References components_. Referenced by TAO_IIOP_Profile::create_profile_body().
00307 { 00308 return (cdr << this->components_); 00309 } |
|
Gets a copy of the IOP::TAG_CODE_SETS component value, return 0 if the component is not present. Definition at line 39 of file Tagged_Components.inl. References code_sets_, and code_sets_set_.
00041 { 00042 if (this->code_sets_set_ == 1) 00043 { 00044 ci = this->code_sets_; 00045 } 00046 00047 return this->code_sets_set_; 00048 } |
|
Gets a reference of the IOP::TAG_CODE_SETS component value, return 0 if the component is not present. Definition at line 27 of file Tagged_Components.inl. References code_sets_, and code_sets_set_.
00029 { 00030 if (this->code_sets_set_ == 1) 00031 { 00032 ci = &this->code_sets_; 00033 } 00034 00035 return this->code_sets_set_; 00036 } |
|
Get a copy of the component identified by <component.tag>, return 0 if the component is not present. Definition at line 289 of file Tagged_Components.cpp. References components_, and IOP::TaggedComponent::tag. Referenced by TAO_IIOP_Profile::decode_endpoints(), and TAO_Profile::get_policies().
00290 { 00291 for (CORBA::ULong i = 0; i != this->components_.length (); ++i) 00292 { 00293 if (component.tag == this->components_[i].tag) 00294 { 00295 component = this->components_[i]; 00296 return 1; 00297 } 00298 } 00299 00300 return 0; 00301 } |
|
|
|
Helper methods to implement set_component().
|
|
Gets the IOP::TAG_ORB_TYPE component value, return 0 if the component is not present. Definition at line 16 of file Tagged_Components.inl. References orb_type_, and orb_type_set_.
00017 { 00018 if (this->orb_type_set_ == 1) 00019 { 00020 orb_type = this->orb_type_; 00021 } 00022 00023 return this->orb_type_set_; 00024 } |
|
Is a well-known component?
Definition at line 51 of file Tagged_Components.inl. References IOP::ComponentId. Referenced by decode(), remove_component(), and set_component().
00052 {
00053 return (tag == IOP::TAG_ORB_TYPE
00054 || tag == IOP::TAG_CODE_SETS);
00055 }
|
|
Remove a component, if present. Return number of components removed. Definition at line 237 of file Tagged_Components.cpp. References IOP::ComponentId, known_tag(), remove_component_i(), and remove_known_component_i().
00238 { 00239 if (this->known_tag (id)) 00240 { 00241 return this->remove_known_component_i (id); 00242 } 00243 else 00244 { 00245 return this->remove_component_i (id); 00246 } 00247 } |
|
Definition at line 270 of file Tagged_Components.cpp. References IOP::ComponentId, and components_. Referenced by remove_component().
00271 { 00272 CORBA::ULong src = 0, dest = 0; 00273 CORBA::ULong len = this->components_.length (); 00274 00275 for (;src != len;++src) 00276 { 00277 if ( tag != this->components_[src].tag) 00278 { 00279 this->components_[dest] = this->components_[src]; 00280 ++dest; 00281 } 00282 } 00283 00284 this->components_.length (dest); 00285 return src - dest; 00286 } |
|
Helper methods to implement remove_component().
Definition at line 250 of file Tagged_Components.cpp. References code_sets_set_, IOP::ComponentId, orb_type_, and orb_type_set_. Referenced by remove_component().
00251 { 00252 if (tag == IOP::TAG_ORB_TYPE) 00253 { 00254 this->orb_type_ = 0; 00255 this->orb_type_set_ = 0; 00256 return 1; 00257 } 00258 else if (tag == IOP::TAG_CODE_SETS) 00259 { 00260 this->code_sets_set_ = 0; 00261 return 1; 00262 } 00263 else 00264 { 00265 return 0; 00266 } 00267 } |
|
Definition at line 47 of file Tagged_Components.cpp. References code_sets_, code_sets_set_, CONV_FRAME::CodeSetComponentInfo::ForCharData, CONV_FRAME::CodeSetComponentInfo::ForWcharData, set_code_sets_i(), set_component_i(), and TAO_ENCAP_BYTE_ORDER.
00048 { 00049 this->set_code_sets_i (this->code_sets_.ForCharData, ci.ForCharData); 00050 this->set_code_sets_i (this->code_sets_.ForWcharData, ci.ForWcharData); 00051 this->code_sets_set_ = 1; 00052 00053 TAO_OutputCDR cdr; 00054 cdr << ACE_OutputCDR::from_boolean (TAO_ENCAP_BYTE_ORDER); 00055 cdr << this->code_sets_; 00056 00057 this->set_component_i (IOP::TAG_CODE_SETS, cdr); 00058 } |
|
The the IOP::TAG_CODE_SETS component value, the first version copies the data, the second version steal all the sequence buffers. Definition at line 33 of file Tagged_Components.cpp. References code_sets_, code_sets_set_, set_component_i(), and TAO_ENCAP_BYTE_ORDER.
00035 { 00036 this->code_sets_ = ci; 00037 this->code_sets_set_ = 1; 00038 00039 TAO_OutputCDR cdr; 00040 cdr << ACE_OutputCDR::from_boolean (TAO_ENCAP_BYTE_ORDER); 00041 cdr << this->code_sets_; 00042 00043 this->set_component_i (IOP::TAG_CODE_SETS, cdr); 00044 } |
|
Helper method to implement set_code_sets().
Definition at line 61 of file Tagged_Components.cpp. References CONV_FRAME::CodeSetId, CONV_FRAME::CodeSetComponent::conversion_code_sets, and CONV_FRAME::CodeSetComponent::native_code_set. Referenced by set_code_sets(), and set_known_component_i().
00064 { 00065 lhs.native_code_set = rhs.native_code_set; 00066 CORBA::ULong max = rhs.conversion_code_sets.maximum (); 00067 CORBA::ULong len = rhs.conversion_code_sets.length (); 00068 CONV_FRAME::CodeSetId *buffer = rhs.conversion_code_sets.get_buffer (1); 00069 lhs.conversion_code_sets.replace (max, len, buffer, 1); 00070 } |
|
Insert the component into the list, but efficiently stealing the contents of the octet sequence. Definition at line 116 of file Tagged_Components.cpp. References add_component_i(), known_tag(), set_component_i(), set_known_component_i(), IOP::TaggedComponent::tag, and unique_tag().
00117 { 00118 if (this->known_tag (component.tag)) 00119 { 00120 this->set_known_component_i (component); 00121 } 00122 00123 if (this->unique_tag (component.tag)) 00124 { 00125 this->set_component_i (component); 00126 } 00127 else 00128 { 00129 this->add_component_i (component); 00130 } 00131 } |
|
Insert the component into the list, making a copy of the octet sequence. Definition at line 98 of file Tagged_Components.cpp. References add_component_i(), known_tag(), set_component_i(), set_known_component_i(), IOP::TaggedComponent::tag, and unique_tag(). Referenced by TAO_Profile::add_tagged_component(), TAO_IIOP_Profile::encode_alternate_endpoints(), TAO_Profile::policies(), and TAO_Profile::set_tagged_components().
00099 { 00100 if (this->known_tag (component.tag)) 00101 { 00102 this->set_known_component_i (component); 00103 } 00104 00105 if (this->unique_tag (component.tag)) 00106 { 00107 this->set_component_i (component); 00108 } 00109 else 00110 { 00111 this->add_component_i (component); 00112 } 00113 } |
|
Definition at line 75 of file Tagged_Components.cpp. References ACE_OutputCDR::begin(), IOP::TaggedComponent::component_data, IOP::ComponentId, ACE_Message_Block::cont(), ACE_Message_Block::length(), ACE_OS::memcpy(), ACE_Message_Block::rd_ptr(), set_component_i(), IOP::TaggedComponent::tag, and ACE_OutputCDR::total_length().
00077 { 00078 IOP::TaggedComponent component; 00079 component.tag = tag; 00080 00081 // Make a *copy* of the CDR stream... 00082 size_t length = cdr.total_length (); 00083 component.component_data.length (static_cast<CORBA::ULong> (length)); 00084 CORBA::Octet *buf = component.component_data.get_buffer (); 00085 00086 for (const ACE_Message_Block *i = cdr.begin (); 00087 i != 0; 00088 i = i->cont ()) 00089 { 00090 ACE_OS::memcpy (buf, i->rd_ptr (), i->length ()); 00091 buf += i->length (); 00092 } 00093 00094 this->set_component_i (component); 00095 } |
|
Definition at line 195 of file Tagged_Components.cpp. References add_component_i(), IOP::TaggedComponent::component_data, components_, and IOP::TaggedComponent::tag.
00196 { 00197 for (CORBA::ULong i = 0; i != this->components_.length (); ++i) 00198 { 00199 if (component.tag == this->components_[i].tag) 00200 { 00201 CORBA::ULong max = component.component_data.maximum (); 00202 CORBA::ULong len = component.component_data.length (); 00203 CORBA::Octet* buf = component.component_data.get_buffer (1); 00204 this->components_[i].component_data.replace (max, len, buf, 1); 00205 return; 00206 } 00207 } 00208 00209 this->add_component_i (component); 00210 } |
|
Definition at line 178 of file Tagged_Components.cpp. References add_component_i(), components_, and IOP::TaggedComponent::tag. Referenced by set_code_sets(), set_component(), set_component_i(), and set_orb_type().
00179 { 00180 // @@ TODO Some components can show up multiple times, others 00181 // can't find out and take appropiate action. 00182 for (CORBA::ULong i = 0; i != this->components_.length (); ++i) 00183 { 00184 if (component.tag == this->components_[i].tag) 00185 { 00186 this->components_[i] = component; 00187 return; 00188 } 00189 } 00190 00191 this->add_component_i (component); 00192 } |
|
Helper methods to implement set_component().
Definition at line 134 of file Tagged_Components.cpp. References code_sets_set_, IOP::TaggedComponent::component_data, CONV_FRAME::CodeSetComponentInfo::ForCharData, CONV_FRAME::CodeSetComponentInfo::ForWcharData, orb_type_, orb_type_set_, ACE_InputCDR::reset_byte_order(), set_code_sets_i(), and IOP::TaggedComponent::tag. Referenced by decode(), and set_component().
00136 { 00137 TAO_InputCDR cdr (reinterpret_cast<const char*> ( 00138 component.component_data.get_buffer ()), 00139 component.component_data.length ()); 00140 00141 CORBA::Boolean byte_order; 00142 00143 if ((cdr >> ACE_InputCDR::to_boolean (byte_order)) == 0) 00144 { 00145 return; 00146 } 00147 00148 cdr.reset_byte_order (static_cast<int> (byte_order)); 00149 00150 if (component.tag == IOP::TAG_ORB_TYPE) 00151 { 00152 CORBA::ULong orb_type; 00153 00154 if ((cdr >> orb_type) == 0) 00155 { 00156 return; 00157 } 00158 00159 this->orb_type_ = orb_type; 00160 this->orb_type_set_ = 1; 00161 } 00162 else if (component.tag == IOP::TAG_CODE_SETS) 00163 { 00164 CONV_FRAME::CodeSetComponentInfo ci; 00165 00166 if ((cdr >> ci) == 0) 00167 { 00168 return; 00169 } 00170 00171 this->set_code_sets_i (this->code_sets_.ForCharData, ci.ForCharData); 00172 this->set_code_sets_i (this->code_sets_.ForWcharData, ci.ForWcharData); 00173 this->code_sets_set_ = 1; 00174 } 00175 } |
|
The the IOP::TAG_ORB_TYPE component value.
Definition at line 20 of file Tagged_Components.cpp. References orb_type_, orb_type_set_, set_component_i(), and TAO_ENCAP_BYTE_ORDER. Referenced by TAO_IIOP_Acceptor::create_new_profile(), and TAO_IIOP_Acceptor::create_shared_profile().
00021 { 00022 this->orb_type_ = orb_type; 00023 this->orb_type_set_ = 1; 00024 00025 TAO_OutputCDR cdr; 00026 cdr << ACE_OutputCDR::from_boolean (TAO_ENCAP_BYTE_ORDER); 00027 cdr << this->orb_type_; 00028 00029 this->set_component_i (IOP::TAG_ORB_TYPE, cdr); 00030 } |
|
Does show up only once?
Definition at line 59 of file Tagged_Components.inl. References IOP::ComponentId. Referenced by set_component().
00060 { 00061 return (tag == IOP::TAG_ORB_TYPE 00062 || tag == IOP::TAG_CODE_SETS 00063 || tag == IOP::TAG_POLICIES 00064 || tag == TAO_TAG_ENDPOINTS 00065 // || tag == IOP::TAG_ALTERNATE_IIOP_ADDRESS 00066 || tag == IOP::TAG_COMPLETE_OBJECT_KEY 00067 || tag == IOP::TAG_ENDPOINT_ID_POSITION 00068 || tag == IOP::TAG_LOCATION_POLICY 00069 || tag == IOP::TAG_FT_PRIMARY 00070 || tag == IOP::TAG_FT_GROUP 00071 || tag == IOP::TAG_DCE_STRING_BINDING 00072 || tag == IOP::TAG_DCE_BINDING_NAME 00073 || tag == IOP::TAG_DCE_NO_PIPES); 00074 } |
|
The ORB_TYPE component value.
Definition at line 150 of file Tagged_Components.h. Referenced by get_code_sets(), and set_code_sets(). |
|
Definition at line 158 of file Tagged_Components.h. Referenced by decode(), get_code_sets(), remove_known_component_i(), set_code_sets(), and set_known_component_i(). |
|
The rest of the components, to be compliant we cannot drop a bunch of them. Definition at line 154 of file Tagged_Components.h. Referenced by add_component_i(), components(), decode(), encode(), get_component(), remove_component_i(), and set_component_i(). |
|
The ORB_TYPE component value.
Definition at line 147 of file Tagged_Components.h. Referenced by get_orb_type(), remove_known_component_i(), set_known_component_i(), and set_orb_type(). |
|
Definition at line 157 of file Tagged_Components.h. Referenced by decode(), get_orb_type(), remove_known_component_i(), set_known_component_i(), and set_orb_type(). |