00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef TAO_CORBA_OBJECT_H
00019 #define TAO_CORBA_OBJECT_H
00020
00021 #include "ace/pre.h"
00022
00023 #include "tao/IOP_IORC.h"
00024
00025 #if !defined (ACE_LACKS_PRAGMA_ONCE)
00026 # pragma once
00027 #endif
00028
00029 #include "tao/CORBA_methods.h"
00030 #include "tao/Policy_ForwardC.h"
00031 #include "tao/Pseudo_VarOut_T.h"
00032 #include "tao/Object_Argument_T.h"
00033 #include "tao/Arg_Traits_T.h"
00034 #include "tao/Any_Insert_Policy_T.h"
00035
00036 #if defined (HPUX) && defined (IOR)
00037
00038
00039 # undef IOR
00040 #endif
00041
00042 ACE_BEGIN_VERSIONED_NAMESPACE_DECL
00043 class ACE_Lock;
00044 ACE_END_VERSIONED_NAMESPACE_DECL
00045
00046 TAO_BEGIN_VERSIONED_NAMESPACE_DECL
00047
00048 class TAO_Stub;
00049 class TAO_Abstract_ServantBase;
00050 class TAO_ORB_Core;
00051
00052 namespace TAO
00053 {
00054 class ObjectKey;
00055 class Object_Proxy_Broker;
00056 }
00057
00058 namespace CORBA
00059 {
00060 class InterfaceDef;
00061 typedef InterfaceDef *InterfaceDef_ptr;
00062
00063 class ImplementationDef;
00064 typedef ImplementationDef *ImplementationDef_ptr;
00065
00066 class Context;
00067 typedef Context *Context_ptr;
00068
00069 class Request;
00070 typedef Request *Request_ptr;
00071
00072 class NVList;
00073 typedef NVList *NVList_ptr;
00074
00075 class NamedValue;
00076 typedef NamedValue * NamedValue_ptr;
00077
00078 typedef ULong Flags;
00079
00080 class ExceptionList;
00081 typedef ExceptionList *ExceptionList_ptr;
00082
00083 class ContextList;
00084 typedef ContextList *ContextList_ptr;
00085
00086 class Object;
00087 typedef Object *Object_ptr;
00088 typedef TAO_Pseudo_Var_T<Object> Object_var;
00089 typedef TAO_Pseudo_Out_T<Object> Object_out;
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100 class TAO_Export Object
00101 {
00102 public:
00103
00104
00105 virtual ~Object (void);
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115 static CORBA::Object_ptr _duplicate (CORBA::Object_ptr obj);
00116
00117
00118 static CORBA::Object_ptr _nil (void);
00119
00120
00121 static CORBA::Object_ptr _narrow (CORBA::Object_ptr obj
00122 ACE_ENV_ARG_DECL_WITH_DEFAULTS);
00123
00124
00125
00126
00127
00128
00129
00130
00131 virtual CORBA::Boolean _is_a (const char *logical_type_id
00132 ACE_ENV_ARG_DECL_WITH_DEFAULTS);
00133
00134
00135
00136 virtual const char* _interface_repository_id (void) const;
00137
00138
00139
00140
00141
00142
00143
00144
00145
00146 virtual CORBA::ULong _hash (CORBA::ULong maximum
00147 ACE_ENV_ARG_DECL_WITH_DEFAULTS);
00148
00149
00150
00151
00152
00153
00154
00155 virtual CORBA::Boolean _is_equivalent (CORBA::Object_ptr other_obj
00156 ACE_ENV_ARG_DECL_WITH_DEFAULTS)
00157 ACE_THROW_SPEC (());
00158
00159 #if (TAO_HAS_MINIMUM_CORBA == 0)
00160
00161 virtual CORBA::Boolean _non_existent (
00162 ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS
00163 );
00164
00165
00166
00167 virtual CORBA::ImplementationDef_ptr _get_implementation (
00168 ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS
00169 );
00170
00171
00172 virtual InterfaceDef_ptr _get_interface (
00173 ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS
00174 );
00175
00176
00177 virtual CORBA::Object_ptr _get_component (
00178 ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS
00179 );
00180
00181
00182 virtual char * _repository_id (
00183 ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS
00184 );
00185
00186 #if ! defined (CORBA_E_COMPACT) && ! defined (CORBA_E_MICRO)
00187
00188
00189
00190
00191
00192
00193 virtual void _create_request (CORBA::Context_ptr ctx,
00194 const char *operation,
00195 CORBA::NVList_ptr arg_list,
00196 CORBA::NamedValue_ptr result,
00197 CORBA::Request_ptr &request,
00198 CORBA::Flags req_flags
00199 ACE_ENV_ARG_DECL_WITH_DEFAULTS);
00200
00201 virtual void _create_request (CORBA::Context_ptr ctx,
00202 const char *operation,
00203 CORBA::NVList_ptr arg_list,
00204 CORBA::NamedValue_ptr result,
00205 CORBA::ExceptionList_ptr exclist,
00206 CORBA::ContextList_ptr ctxtlist,
00207 CORBA::Request_ptr &request,
00208 CORBA::Flags req_flags
00209 ACE_ENV_ARG_DECL_WITH_DEFAULTS);
00210 #endif
00211
00212
00213
00214
00215
00216
00217
00218 virtual CORBA::Request_ptr _request (const char *operation
00219 ACE_ENV_ARG_DECL_WITH_DEFAULTS);
00220
00221 #endif
00222
00223 #if (TAO_HAS_CORBA_MESSAGING == 1)
00224
00225 CORBA::Policy_ptr _get_policy (CORBA::PolicyType type
00226 ACE_ENV_ARG_DECL_WITH_DEFAULTS);
00227
00228 CORBA::Policy_ptr _get_cached_policy (TAO_Cached_Policy_Type type
00229 ACE_ENV_ARG_DECL_WITH_DEFAULTS);
00230
00231 CORBA::Object_ptr _set_policy_overrides (
00232 const CORBA::PolicyList & policies,
00233 CORBA::SetOverrideType set_add
00234 ACE_ENV_ARG_DECL_WITH_DEFAULTS);
00235
00236 CORBA::PolicyList * _get_policy_overrides (
00237 const CORBA::PolicyTypeSeq & types
00238 ACE_ENV_ARG_DECL_WITH_DEFAULTS);
00239
00240 CORBA::Boolean _validate_connection (
00241 CORBA::PolicyList_out inconsistent_policies
00242 ACE_ENV_ARG_DECL_WITH_DEFAULTS);
00243
00244 #endif
00245
00246 virtual CORBA::ORB_ptr _get_orb (
00247 ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS
00248 );
00249
00250
00251
00252
00253
00254
00255
00256
00257
00258 virtual void _add_ref (void);
00259
00260
00261 virtual void _remove_ref (void);
00262
00263
00264
00265 typedef Object_ptr _ptr_type;
00266 typedef Object_var _var_type;
00267 typedef Object_out _out_type;
00268
00269
00270
00271
00272
00273
00274
00275
00276
00277
00278
00279
00280
00281
00282 static CORBA::Boolean marshal (const Object_ptr x,
00283 TAO_OutputCDR &cdr);
00284
00285
00286
00287 virtual TAO_Abstract_ServantBase *_servant (void) const;
00288
00289
00290
00291
00292 virtual CORBA::Boolean _is_collocated (void) const;
00293
00294
00295 virtual CORBA::Boolean _is_local (void) const;
00296
00297
00298 static void _tao_any_destructor (void*);
00299
00300
00301 static CORBA::Boolean is_nil_i (CORBA::Object_ptr obj);
00302
00303
00304 static void tao_object_initialize (Object *);
00305
00306
00307
00308 virtual TAO::ObjectKey *_key (ACE_ENV_SINGLE_ARG_DECL);
00309
00310
00311 Object (TAO_Stub *p,
00312 CORBA::Boolean collocated = 0,
00313 TAO_Abstract_ServantBase *servant = 0,
00314 TAO_ORB_Core *orb_core = 0);
00315
00316 Object (IOP::IOR *ior,
00317 TAO_ORB_Core *orb_core = 0);
00318
00319
00320 virtual TAO_Stub *_stubobj (void) const;
00321 virtual TAO_Stub *_stubobj (void);
00322
00323
00324 virtual void _proxy_broker (TAO::Object_Proxy_Broker *proxy_broker);
00325
00326 public:
00327
00328
00329 virtual CORBA::Boolean marshal (TAO_OutputCDR &cdr);
00330
00331
00332 CORBA::Boolean is_evaluated (void) const;
00333
00334
00335
00336
00337
00338
00339
00340
00341 void set_collocated_servant (TAO_Abstract_ServantBase *);
00342
00343
00344 TAO_ORB_Core *orb_core (void) const;
00345
00346
00347
00348
00349
00350
00351
00352 IOP::IOR *steal_ior (void);
00353
00354 const IOP::IOR &ior (void) const;
00355
00356
00357
00358 protected:
00359
00360
00361 Object (int dummy = 0);
00362
00363
00364
00365 TAO::Object_Proxy_Broker *proxy_broker () const;
00366
00367 private:
00368
00369
00370 Object (const Object &);
00371 Object &operator = (const Object &);
00372
00373 private:
00374
00375
00376 CORBA::Boolean is_local_;
00377
00378
00379 CORBA::Boolean is_evaluated_;
00380
00381
00382
00383 IOP::IOR_var ior_;
00384
00385
00386
00387
00388
00389
00390
00391
00392
00393
00394
00395
00396
00397
00398 TAO_ORB_Core * orb_core_;
00399
00400
00401
00402
00403
00404
00405
00406 TAO_Stub * protocol_proxy_;
00407
00408
00409 CORBA::ULong refcount_;
00410
00411
00412
00413
00414
00415
00416
00417
00418 ACE_Lock * refcount_lock_;
00419 };
00420 }
00421
00422 namespace TAO
00423 {
00424 template<>
00425 class TAO_Export Arg_Traits<CORBA::Object>
00426 : public Object_Arg_Traits_T<CORBA::Object_ptr,
00427 CORBA::Object_var,
00428 CORBA::Object_out,
00429 TAO::Objref_Traits<CORBA::Object>,
00430 TAO::Any_Insert_Policy_CORBA_Object <CORBA::Object_ptr> >
00431 {
00432 };
00433
00434 template<>
00435 struct TAO_Export Objref_Traits<CORBA::Object>
00436 {
00437 static CORBA::Object_ptr duplicate (CORBA::Object_ptr);
00438 static void release (CORBA::Object_ptr);
00439 static CORBA::Object_ptr nil (void);
00440 static CORBA::Boolean marshal (const CORBA::Object_ptr p,
00441 TAO_OutputCDR & cdr);
00442 };
00443 }
00444
00445
00446
00447 extern
00448 TAO_Export TAO::Object_Proxy_Broker *
00449 (*_TAO_Object_Proxy_Broker_Factory_function_pointer) (void);
00450
00451 TAO_Export CORBA::Boolean
00452 operator<< (TAO_OutputCDR&, const CORBA::Object*);
00453
00454 TAO_Export CORBA::Boolean
00455 operator>> (TAO_InputCDR&, CORBA::Object *&);
00456
00457 TAO_END_VERSIONED_NAMESPACE_DECL
00458
00459 #if defined (__ACE_INLINE__)
00460 # include "tao/Object.i"
00461 #endif
00462
00463 #include "ace/post.h"
00464 #endif