#include <IORManipulation.h>


Definition at line 38 of file IORManipulation.h.
| TAO_IOR_Manipulation_impl::TAO_IOR_Manipulation_impl | ( | void | ) |
| TAO_IOR_Manipulation_impl::~TAO_IOR_Manipulation_impl | ( | void | ) | [protected] |
| CORBA::Object_ptr TAO_IOR_Manipulation_impl::add_profiles | ( | CORBA::Object_ptr | ior1, | |
| CORBA::Object_ptr | ior2 | |||
| ) | [virtual] |
Definition at line 118 of file IORManipulation.cpp.
{
// Get an estimate of the number of profiles
CORBA::Object_ptr buffer [2];
buffer [0] = ior1;
buffer [1] = ior2;
TAO_IOP::TAO_IOR_Manipulation::IORList iors (2, 2, buffer, 0);
return this->merge_iors (iors);
}
| CORBA::Object_ptr TAO_IOR_Manipulation_impl::get_primary | ( | TAO_IOP::TAO_IOR_Property_ptr | prop, | |
| CORBA::Object_ptr | group | |||
| ) | [virtual] |
Definition at line 246 of file IORManipulation.cpp.
{
// make sure we have some profiles in IOR
if (group->_stubobj ()->base_profiles ().profile_count () == 0)
throw TAO_IOP::NotFound ();
// @@ Bala: this was throwing TAO_IOP::Invalid_IOR, but it was not
// in the throw spec, that will result in a CORBA::UNKNOWN at
// run-time (if it does not crash). Any idea about what is going on
// here?
return prop->get_primary (group);
}
| CORBA::ULong TAO_IOR_Manipulation_impl::get_profile_count | ( | CORBA::Object_ptr | group | ) | [virtual] |
Definition at line 305 of file IORManipulation.cpp.
{
CORBA::ULong const count = group->_stubobj ()->base_profiles ().profile_count ();
if (count == 0)
throw TAO_IOP::EmptyProfileList ();
return count;
}
| CORBA::ULong TAO_IOR_Manipulation_impl::is_in_ior | ( | CORBA::Object_ptr | ior1, | |
| CORBA::Object_ptr | ior2 | |||
| ) | [virtual] |
Definition at line 278 of file IORManipulation.cpp.
{
CORBA::ULong count = 0;
TAO_Profile *pfile1 = 0, *pfile2 = 0;
auto_ptr<TAO_MProfile> tmp_pfiles1 (ior1->_stubobj ()->make_profiles ());
auto_ptr<TAO_MProfile> tmp_pfiles2 (ior2->_stubobj ()->make_profiles ());
tmp_pfiles1->rewind ();
while ((pfile1 = tmp_pfiles1->get_next ()) > 0)
{
tmp_pfiles2->rewind ();
while ((pfile2 = tmp_pfiles2->get_next ()) > 0)
{
if (pfile1->is_equivalent (pfile2))
++count;
}
}
if (count == 0)
throw TAO_IOP::NotFound ();
return count;
}
| CORBA::Boolean TAO_IOR_Manipulation_impl::is_primary_set | ( | TAO_IOP::TAO_IOR_Property_ptr | prop, | |
| CORBA::Object_ptr | group | |||
| ) | [virtual] |
Definition at line 262 of file IORManipulation.cpp.
{
return prop->is_primary_set (group);
}
| CORBA::Object_ptr TAO_IOR_Manipulation_impl::merge_iors | ( | const TAO_IOP::TAO_IOR_Manipulation::IORList & | iors | ) | [virtual] |
Definition at line 27 of file IORManipulation.cpp.
{
// we need to create a new CORBA::Object which has the union of the
// two profile lists. However, if any profiles are duplicates (i.e. in
// bott lisis) then an exception is raised.
// Deterinine how many profiles we have
// Get an estimate of the size - pfile count could change since we
// neither lock nor get a copy in this loop.
CORBA::ULong i, count=0;
for (i = 0; i < iors.length (); i++)
{
count += iors[i]->_stubobj ()->base_profiles ().profile_count ();
}
// make sure we have some profiles
if (count == 0)
throw TAO_IOP::EmptyProfileList ();
// initialize with estimated pfile count.
TAO_MProfile Merged_Profiles (count);
// get the profile lists, start by initialize the composite reference
// by using the first Object. Then for each subsequent Object verify
// they are the same type and they do not have duplicate profiles.
auto_ptr<TAO_MProfile> tmp_pfiles (iors[0]->_stubobj ()->make_profiles ());
if (Merged_Profiles.add_profiles (tmp_pfiles.get ())< 0)
throw TAO_IOP::Invalid_IOR ();
CORBA::String_var id =
CORBA::string_dup (iors[0]->_stubobj ()->type_id.in ());
for (i = 1; i < iors.length () ; i++)
{
// this gets a copy of the MProfile, hense the auto_ptr;
ACE_AUTO_PTR_RESET (tmp_pfiles,
iors[i]->_stubobj ()->make_profiles (),
TAO_MProfile);
// check to see if any of the profile in tmp_pfiles are already
// in Merged_Profiles. If so raise exception.
if (Merged_Profiles.is_equivalent (tmp_pfiles.get ()))
throw TAO_IOP::Duplicate ();
// If the object type_id's differ then raise an exception.
if (id.in () && iors[i]->_stubobj ()->type_id.in () &&
ACE_OS::strcmp (id.in (), iors[i]->_stubobj ()->type_id.in ()))
throw TAO_IOP::Invalid_IOR ();
// append profiles
if (Merged_Profiles.add_profiles (tmp_pfiles.get ()) < 0)
throw TAO_IOP::Invalid_IOR ();
}
// MS C++ knows nothing about reset!
// tmp_pfiles.reset (0); // get rid of last MProfile
TAO_ORB_Core *orb_core = TAO_ORB_Core_instance ();
TAO_Stub *stub = orb_core->create_stub (id.in (), // give the id string
Merged_Profiles);
// Make the stub memory allocation exception safe for the duration
// of this method.
TAO_Stub_Auto_Ptr safe_stub (stub);
// Create the CORBA level proxy
CORBA::Object_ptr temp_obj = CORBA::Object::_nil ();
ACE_NEW_THROW_EX (temp_obj,
CORBA::Object (safe_stub.get ()),
CORBA::NO_MEMORY ());
CORBA::Object_var new_obj = temp_obj;
// Clean up in case of errors.
if (CORBA::is_nil (new_obj.in ()))
{
throw TAO_IOP::Invalid_IOR ();
}
// Release ownership of the pointers protected by the auto_ptrs since they
// no longer need to be protected by this point.
stub = safe_stub.release ();
return new_obj._retn ();
}
| CORBA::Boolean TAO_IOR_Manipulation_impl::remove_primary_tag | ( | TAO_IOP::TAO_IOR_Property_ptr | prop, | |
| CORBA::Object_ptr | iogr | |||
| ) | [virtual] |
Definition at line 270 of file IORManipulation.cpp.
{
return prop->remove_primary_tag (group);
}
| CORBA::Object_ptr TAO_IOR_Manipulation_impl::remove_profiles | ( | CORBA::Object_ptr | group, | |
| CORBA::Object_ptr | ior2 | |||
| ) | [virtual] |
Definition at line 132 of file IORManipulation.cpp.
{
// First verify they are the same type!
CORBA::String_var id =
CORBA::string_dup (group->_stubobj ()->type_id.in ());
if (id.in () && ior2->_stubobj ()->type_id.in () &&
ACE_OS::strcmp (id.in (), ior2->_stubobj ()->type_id.in ()))
throw TAO_IOP::Invalid_IOR ();
// Since we are removing from group ...
CORBA::ULong count = group->_stubobj ()->base_profiles ().profile_count ();
// make sure we have some profiles
if (count == 0 ||
ior2->_stubobj ()->base_profiles ().profile_count () == 0)
throw TAO_IOP::EmptyProfileList ();
// initialize with estimated pfile count.
TAO_MProfile Diff_Profiles (count);
auto_ptr<TAO_MProfile> tmp_pfiles (group->_stubobj ()->make_profiles ());
if (Diff_Profiles.add_profiles (tmp_pfiles.get ()) < 0)
throw TAO_IOP::Invalid_IOR ();
// We are done with add_profiles.
// At this point, we don't do remove_profiles()
// immediately like before,
// because it could result in an
// Object Reference with 0 profile. And it would not pass
// the ::CORBA::is_nil() evaluation.
// Instead, we create the Object Reference right here, which is
// earlier than before.(Actually, I just moved some code
// from below up to here).
TAO_ORB_Core *orb_core = TAO_ORB_Core_instance ();
TAO_Stub *stub = orb_core->create_stub (id.in (), // give the id string
Diff_Profiles
);
// Make the stub memory allocation exception safe for the duration
// of this method.
TAO_Stub_Auto_Ptr safe_stub (stub);
// Create the CORBA level proxy
CORBA::Object_ptr temp_obj = CORBA::Object::_nil ();
ACE_NEW_THROW_EX (temp_obj,
CORBA::Object (safe_stub.get ()),
CORBA::NO_MEMORY ());
CORBA::Object_var new_obj = temp_obj;
// Exception safety is no longer an issue by this point so release
// the TAO_Stub from the TAO_Stub_Auto_Ptr.
stub = safe_stub.release ();
// Clean up in case of errors.
if (CORBA::is_nil (new_obj.in ()))
{
throw TAO_IOP::Invalid_IOR ();
}
// Now we can remove the profiles which we want to elimitate from
// the Object.
ACE_AUTO_PTR_RESET (tmp_pfiles,
ior2->_stubobj ()->make_profiles (),
TAO_MProfile);
TAO_MProfile& mp = stub -> base_profiles();
if (mp.remove_profiles (tmp_pfiles.get ()) < 0)
throw TAO_IOP::NotFound ();
// MS C++ knows nothing about reset!
// tmp_pfiles.reset (0); // get rid of last MProfile
return new_obj._retn ();
}
| CORBA::Boolean TAO_IOR_Manipulation_impl::set_primary | ( | TAO_IOP::TAO_IOR_Property_ptr | prop, | |
| CORBA::Object_ptr | new_primary, | |||
| CORBA::Object_ptr | group | |||
| ) | [virtual] |
Definition at line 227 of file IORManipulation.cpp.
{
// make sure we have some profiles in GROUP
if (group->_stubobj ()->base_profiles ().profile_count () == 0)
throw TAO_IOP::Invalid_IOR ();
// Make sure we have only one profile in new_primary
// @@ Will fail if the object has been
/*if (new_primary->_stubobj ()->base_profiles ().profile_count () > 1)
throw TAO_IOP::MultiProfileList ();*/
// Call the callback object to do the rest of the processing.
return prop->set_primary (new_primary, group);
}
| CORBA::Boolean TAO_IOR_Manipulation_impl::set_property | ( | TAO_IOP::TAO_IOR_Property_ptr | prop, | |
| CORBA::Object_ptr | group | |||
| ) | [virtual] |
Definition at line 213 of file IORManipulation.cpp.
{
// make sure we have some profiles
if (group->_stubobj ()->base_profiles ().profile_count () == 0)
throw TAO_IOP::Invalid_IOR ();
// Call the implementation object to
return prop->set_property (group);
}
1.7.0