summaryrefslogtreecommitdiff
path: root/TAO/tao/IORManipulation/IORManipulation.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/tao/IORManipulation/IORManipulation.cpp')
-rw-r--r--TAO/tao/IORManipulation/IORManipulation.cpp420
1 files changed, 0 insertions, 420 deletions
diff --git a/TAO/tao/IORManipulation/IORManipulation.cpp b/TAO/tao/IORManipulation/IORManipulation.cpp
deleted file mode 100644
index 3fc401b8112..00000000000
--- a/TAO/tao/IORManipulation/IORManipulation.cpp
+++ /dev/null
@@ -1,420 +0,0 @@
-// -*- C++ -*-
-// $Id$
-
-// ============================================================================
-//
-// = LIBRARY
-// TAO
-//
-// = FILENAME
-// IORManipulation.cpp
-//
-// = DESCRIPTION
-//
-// = AUTHOR
-// Fred Kuhns <fredk@cs.wustl.edu>
-//
-// ============================================================================
-
-#include "IORManipulation.h"
-#include "tao/MProfile.h"
-#include "tao/Stub.h"
-#include "tao/ORB_Core.h"
-
-#include "ace/Auto_Ptr.h"
-
-ACE_RCSID(tao, IORManipulation, "$Id$")
-
-TAO_IOR_Manipulation_impl::TAO_IOR_Manipulation_impl (void)
-{
-}
-
-TAO_IOR_Manipulation_impl::~TAO_IOR_Manipulation_impl (void)
-{
-}
-
-void
-TAO_IOR_Manipulation_impl::_add_ref (void)
-{
- this->_incr_refcnt ();
- // This is a TAO specific implementation.
-}
-
-void
-TAO_IOR_Manipulation_impl::_remove_ref (void)
-{
- this->_decr_refcnt ();
- // This is a TAO specific implementation.
-}
-
-CORBA::Object_ptr
-TAO_IOR_Manipulation_impl::merge_iors (
- const TAO_IOP::TAO_IOR_Manipulation::IORList & iors,
- CORBA::Environment &ACE_TRY_ENV)
- ACE_THROW_SPEC ((CORBA::SystemException,
- TAO_IOP::EmptyProfileList,
- TAO_IOP::Duplicate,
- TAO_IOP::Invalid_IOR))
-{
- // 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)
- ACE_THROW_RETURN (TAO_IOP::EmptyProfileList (),
- CORBA::Object::_nil ());
-
- // 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)
- ACE_THROW_RETURN (TAO_IOP::Invalid_IOR (),
- CORBA::Object::_nil ());
- 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 ()))
- ACE_THROW_RETURN (TAO_IOP::Duplicate (),
- CORBA::Object::_nil ());
-
- // 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 ()))
- ACE_THROW_RETURN (TAO_IOP::Invalid_IOR (),
- CORBA::Object::_nil ());
-
- // append profiles
- if (Merged_Profiles.add_profiles (tmp_pfiles.get ()) < 0)
- ACE_THROW_RETURN (TAO_IOP::Invalid_IOR (),
- CORBA::Object::_nil ());
-
- }
-
- // 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 = 0;
- ACE_NEW_THROW_EX (stub,
- TAO_Stub (id._retn (), // give the id string to stub
- Merged_Profiles,
- orb_core),
- CORBA::NO_MEMORY ());
-
- ACE_CHECK_RETURN (CORBA::Object::_nil ());
-
- // 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;
-
- ACE_CHECK_RETURN (CORBA::Object::_nil ());
-
- // Clean up in case of errors.
- if (CORBA::is_nil (new_obj.in ()))
- {
- ACE_THROW_RETURN (TAO_IOP::Invalid_IOR (),
- CORBA::Object::_nil ());
- }
-
- // 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::Object_ptr
-TAO_IOR_Manipulation_impl::add_profiles (
- CORBA::Object_ptr ior1,
- CORBA::Object_ptr ior2,
- CORBA::Environment &ACE_TRY_ENV)
- ACE_THROW_SPEC ((
- CORBA::SystemException,
- TAO_IOP::EmptyProfileList,
- TAO_IOP::Duplicate,
- TAO_IOP::Invalid_IOR
- ))
-{
-
- // 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, ACE_TRY_ENV);
-}
-
-CORBA::Object_ptr
-TAO_IOR_Manipulation_impl::remove_profiles (
- CORBA::Object_ptr ior1,
- CORBA::Object_ptr ior2,
- CORBA::Environment &ACE_TRY_ENV)
- ACE_THROW_SPEC ((
- CORBA::SystemException,
- TAO_IOP::Invalid_IOR,
- TAO_IOP::EmptyProfileList,
- TAO_IOP::NotFound
- ))
-{
- // First verify they are the same type!
- CORBA::String_var id =
- CORBA::string_dup (ior1->_stubobj ()->type_id.in ());
- if (id.in () && ior2->_stubobj ()->type_id.in () &&
- ACE_OS::strcmp (id.in (), ior2->_stubobj ()->type_id.in ()))
- ACE_THROW_RETURN (TAO_IOP::Invalid_IOR (),
- CORBA::Object::_nil ());
-
- // Since we are removing from ior1 ...
- CORBA::ULong count = ior1->_stubobj ()->base_profiles ().profile_count ();
-
- // make sure we have some profiles
- if (count == 0 ||
- ior2->_stubobj ()->base_profiles ().profile_count () == 0)
- ACE_THROW_RETURN (TAO_IOP::EmptyProfileList (),
- CORBA::Object::_nil ());
-
- // initialize with estimated pfile count.
- TAO_MProfile Diff_Profiles (count);
-
- auto_ptr<TAO_MProfile> tmp_pfiles (ior1->_stubobj ()->make_profiles ());
- if (Diff_Profiles.add_profiles (tmp_pfiles.get ()) < 0)
- ACE_THROW_RETURN (TAO_IOP::Invalid_IOR (),
- CORBA::Object::_nil ());
-
- ACE_AUTO_PTR_RESET (tmp_pfiles,
- ior2->_stubobj ()->make_profiles (),
- TAO_MProfile);
-
- if (Diff_Profiles.remove_profiles (tmp_pfiles.get ()) < 0)
- ACE_THROW_RETURN (TAO_IOP::NotFound (),
- CORBA::Object::_nil ());
-
- // 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 = 0;
- ACE_NEW_THROW_EX (stub,
- TAO_Stub (id._retn (), // give id string to stub
- Diff_Profiles,
- orb_core),
- CORBA::NO_MEMORY ());
-
- ACE_CHECK_RETURN (CORBA::Object::_nil ());
-
- // 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;
-
- ACE_CHECK_RETURN (CORBA::Object::_nil ());
-
- // Clean up in case of errors.
- if (CORBA::is_nil (new_obj.in ()))
- {
- ACE_THROW_RETURN (TAO_IOP::Invalid_IOR (),
- CORBA::Object::_nil ());
- }
-
- // 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 ();
-
- return new_obj._retn ();
-}
-
-CORBA::Boolean
-TAO_IOR_Manipulation_impl::set_property (
- TAO_IOP::TAO_IOR_Property_ptr prop,
- CORBA::Object_ptr ior,
- CORBA::Environment &ACE_TRY_ENV
- )
- ACE_THROW_SPEC ((
- CORBA::SystemException,
- TAO_IOP::Invalid_IOR,
- TAO_IOP::Duplicate
- ))
-{
- // make sure we have some profiles
- if (ior->_stubobj ()->base_profiles ().profile_count () == 0)
- ACE_THROW_RETURN (TAO_IOP::Invalid_IOR (),
- 0);
-
- // Call the implementation object to
- return prop->set_property (ior,
- ACE_TRY_ENV);
-}
-
-CORBA::Boolean
-TAO_IOR_Manipulation_impl::set_primary (
- TAO_IOP::TAO_IOR_Property_ptr prop,
- CORBA::Object_ptr ior1,
- CORBA::Object_ptr ior2,
- CORBA::Environment &ACE_TRY_ENV
- )
- ACE_THROW_SPEC ((
- CORBA::SystemException,
- TAO_IOP::Invalid_IOR,
- TAO_IOP::Duplicate,
- TAO_IOP::MultiProfileList
- ))
-{
- // make sure we have some profiles in IOR2
- if (ior2->_stubobj ()->base_profiles ().profile_count () == 0)
- ACE_THROW_RETURN (TAO_IOP::Invalid_IOR (),
- 0);
-
- // Make sure we have only one profile in IOR1
- if (ior1->_stubobj ()->base_profiles ().profile_count () > 1)
- ACE_THROW_RETURN (TAO_IOP::MultiProfileList (),
- 0);
-
- // Call the callback object to do the rest of the processing.
- return prop->set_primary (ior1,
- ior2,
- ACE_TRY_ENV);
-}
-
-CORBA::Object_ptr
-TAO_IOR_Manipulation_impl::get_primary (
- TAO_IOP::TAO_IOR_Property_ptr prop,
- CORBA::Object_ptr ior,
- CORBA::Environment &ACE_TRY_ENV
- )
- ACE_THROW_SPEC ((
- CORBA::SystemException,
- TAO_IOP::NotFound
- ))
-{
- // make sure we have some profiles in IOR
- if (ior->_stubobj ()->base_profiles ().profile_count () == 0)
- ACE_THROW_RETURN (TAO_IOP::Invalid_IOR (),
- 0);
-
- return prop->get_primary (ior,
- ACE_TRY_ENV);
-}
-
-CORBA::Boolean
-TAO_IOR_Manipulation_impl::is_primary_set (
- TAO_IOP::TAO_IOR_Property_ptr prop,
- CORBA::Object_ptr ior,
- CORBA::Environment &ACE_TRY_ENV
- )
- ACE_THROW_SPEC ((
- CORBA::SystemException
- ))
-{
- return prop->is_primary_set (ior, ACE_TRY_ENV);
-}
-
-CORBA::ULong
-TAO_IOR_Manipulation_impl::is_in_ior (
- CORBA::Object_ptr ior1,
- CORBA::Object_ptr ior2,
- CORBA::Environment &ACE_TRY_ENV)
- ACE_THROW_SPEC ((
- CORBA::SystemException,
- TAO_IOP::NotFound
- ))
-{
- CORBA::ULong count=0;
- TAO_Profile *pfile1, *pfile2;
- 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)
- ACE_THROW_RETURN (TAO_IOP::NotFound (),
- 0);
-
- return count;
-}
-
-CORBA::ULong
-TAO_IOR_Manipulation_impl::get_profile_count (
- CORBA::Object_ptr ior,
- CORBA::Environment &ACE_TRY_ENV)
- ACE_THROW_SPEC ((
- CORBA::SystemException,
- TAO_IOP::EmptyProfileList
- ))
-{
- CORBA::ULong count;
- count = ior->_stubobj ()->base_profiles ().profile_count ();
-
- if (count == 0)
- ACE_THROW_RETURN (TAO_IOP::EmptyProfileList (),
- 0);
-
- return count;
-}
-
-#if defined (ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION)
-
-template class TAO_Object_Manager<CORBA_Object,CORBA_Object_var>;
-template class TAO_Unbounded_Object_Sequence<CORBA_Object,CORBA_Object_var>;
-
-template class auto_ptr<TAO_MProfile>;
-template class ACE_Auto_Basic_Ptr<TAO_MProfile>;
-
-#elif defined (ACE_HAS_TEMPLATE_INSTANTIATION_PRAGMA)
-
-#pragma instantiate TAO_Object_Manager<CORBA_Object,CORBA_Object_var>
-#pragma instantiate TAO_Unbounded_Object_Sequence<CORBA_Object,CORBA_Object_var>
-
-#pragma instantiate auto_ptr<TAO_MProfile>
-#pragma instantiate ACE_Auto_Basic_Ptr<TAO_MProfile>
-
-#endif /* ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION */