#include "tao/IOPC.h"
#include "tao/CORBA_methods.h"
#include "tao/Policy_ForwardC.h"
#include "tao/Pseudo_VarOut_T.h"
#include "tao/Object_Argument_T.h"
#include "tao/Arg_Traits_T.h"
#include "tao/Any_Insert_Policy_T.h"
#include "tao/Configurable_Refcount.h"
#include "tao/Object.inl"
Go to the source code of this file.
Classes | |
class | CORBA::Object |
Implementation of a CORBA object reference. More... | |
class | TAO::Arg_Traits< CORBA::Object > |
struct | TAO::Objref_Traits< CORBA::Object > |
struct | TAO::In_Object_Argument_Cloner_T< CORBA::InterfaceDef_ptr > |
Namespaces | |
namespace | TAO |
Define symbolic names for the ORB collocation strategies. | |
namespace | CORBA |
FUZZ: disable check_for_include/. | |
Functions | |
TAO_Export CORBA::Boolean | operator<< (TAO_OutputCDR &, const CORBA::Object *) |
TAO_Export CORBA::Boolean | operator>> (TAO_InputCDR &, CORBA::Object *&) |
Variables | |
TAO_Export TAO::Object_Proxy_Broker *(* | _TAO_Object_Proxy_Broker_Factory_function_pointer )(void) |
A "Object" is an entity that can be the target of an invocation using an ORB. All CORBA objects provide this functionality. See the CORBA 3.x specification for details.
Definition in file Object.h.
TAO_Export CORBA::Boolean operator<< | ( | TAO_OutputCDR & | , | |
const CORBA::Object * | ||||
) |
Definition at line 681 of file Object.cpp.
{ if (x == 0) { // NIL objrefs ... marshal as empty type hint, no elements. cdr.write_ulong (1); cdr.write_char ('\0'); cdr.write_ulong (0); return (CORBA::Boolean) cdr.good_bit (); } if (!x->is_evaluated ()) { // @@ This is too inefficient. Need to speed this up if this is // a bottle neck. cdr << const_cast<IOP::IOR &> (x->ior ()); return cdr.good_bit (); } TAO_Stub *stubobj = x->_stubobj (); if (stubobj == 0) return false; return (stubobj->marshal (cdr)); }
TAO_Export CORBA::Boolean operator>> | ( | TAO_InputCDR & | , | |
CORBA::Object *& | ||||
) |
Definition at line 811 of file Object.cpp.
{ bool lazy_strategy = false; TAO_ORB_Core *orb_core = cdr.orb_core (); if (orb_core == 0) { orb_core = TAO_ORB_Core_instance (); if (TAO_debug_level > 0) { ACE_DEBUG ((LM_WARNING, ACE_TEXT ("TAO (%P|%t) WARNING: extracting object from ") ACE_TEXT ("default ORB_Core\n"))); } } else { if (orb_core->resource_factory ()->resource_usage_strategy () == TAO_Resource_Factory::TAO_LAZY) { lazy_strategy = true; } } if (!lazy_strategy) { // If the user has set up a eager strategy.. CORBA::String_var type_hint; if (!(cdr >> type_hint.inout ())) return false; CORBA::ULong profile_count; if (!(cdr >> profile_count)) return false; if (profile_count == 0) { x = CORBA::Object::_nil (); return (CORBA::Boolean) cdr.good_bit (); } // get a profile container to store all profiles in the IOR. TAO_MProfile mp (profile_count); TAO_ORB_Core *orb_core = cdr.orb_core (); if (orb_core == 0) { orb_core = TAO_ORB_Core_instance (); if (TAO_debug_level > 0) { ACE_DEBUG ((LM_WARNING, ACE_TEXT ("TAO (%P|%t) - Object::tao_object_initialize ") ACE_TEXT ("WARNING: extracting object from ") ACE_TEXT ("default ORB_Core\n"))); } } // Ownership of type_hint is given to TAO_Stub // TAO_Stub will make a copy of mp! TAO_Stub *objdata = 0; try { TAO_Connector_Registry *connector_registry = orb_core->connector_registry (); for (CORBA::ULong i = 0; i != profile_count && cdr.good_bit (); ++i) { TAO_Profile *pfile = connector_registry->create_profile (cdr); if (pfile != 0) { mp.give_profile (pfile); } } // Make sure we got some profiles! if (mp.profile_count () != profile_count) { // @@ This occurs when profile creation fails when decoding the // profile from the IOR. ACE_ERROR_RETURN ((LM_ERROR, ACE_TEXT ("TAO (%P|%t) - ERROR: Could not create all ") ACE_TEXT ("profiles while extracting object [%d, %d]\n") ACE_TEXT ("TAO (%P|%t) - ERROR: reference from the ") ACE_TEXT ("CDR stream.\n"), mp.profile_count (), profile_count), false); } objdata = orb_core->create_stub (type_hint.in (), mp); } catch (const ::CORBA::Exception& ex) { if (TAO_debug_level > 0) ex._tao_print_exception ( ACE_TEXT ("TAO (%P|%t) - ERROR creating stub ") ACE_TEXT ("object when demarshaling object ") ACE_TEXT ("reference.\n")); return false; } TAO_Stub_Auto_Ptr safe_objdata (objdata); x = orb_core->create_object (safe_objdata.get ()); if (!x) { return false; } // Transfer ownership to the CORBA::Object (void) safe_objdata.release (); } else { // Lazy strategy! IOP::IOR *ior = 0; ACE_NEW_RETURN (ior, IOP::IOR (), false); if (!(cdr >> *ior)) { return false; } ACE_NEW_RETURN (x, CORBA::Object (ior, orb_core), false); } return (CORBA::Boolean) cdr.good_bit (); }
TAO_Export TAO::Object_Proxy_Broker*(* _TAO_Object_Proxy_Broker_Factory_function_pointer)(void) |
This function pointer is set only when the Portable server library is present.
Definition at line 1000 of file Object.cpp.