00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 #ifndef TAO_CORBA_LOCALOBJECT_H
00021 #define TAO_CORBA_LOCALOBJECT_H
00022 
00023 #include  "ace/pre.h"
00024 
00025 #include "ace/Thread_Mutex.h"
00026 #include "ace/Atomic_Op.h"
00027 
00028 #if !defined (ACE_LACKS_PRAGMA_ONCE)
00029 # pragma once
00030 #endif 
00031 
00032 #include "tao/Object.h"
00033 
00034 TAO_BEGIN_VERSIONED_NAMESPACE_DECL
00035 
00036 namespace CORBA
00037 {
00038   class LocalObject;
00039   typedef LocalObject *LocalObject_ptr;
00040   typedef TAO_Pseudo_Var_T<LocalObject> LocalObject_var;
00041   typedef TAO_Pseudo_Out_T<LocalObject> LocalObject_out;
00042 
00043 
00044 
00045 
00046   class TAO_Export LocalObject : public virtual CORBA::Object
00047   {
00048   public:
00049 
00050 
00051     virtual ~LocalObject (void);
00052 
00053 
00054     static LocalObject_ptr _duplicate (LocalObject_ptr obj);
00055 
00056 
00057     static LocalObject_ptr _nil (void);
00058 
00059 
00060 
00061 
00062 
00063 
00064 
00065 
00066     static LocalObject_ptr _narrow (CORBA::Object_ptr obj
00067                                     ACE_ENV_ARG_DECL_WITH_DEFAULTS);
00068 
00069 #if (TAO_HAS_MINIMUM_CORBA == 0)
00070 
00071 
00072     virtual CORBA::Boolean _non_existent (
00073         ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS
00074       );
00075 
00076 
00077     virtual CORBA::ImplementationDef_ptr _get_implementation (
00078         ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS
00079       );
00080 
00081 
00082     virtual CORBA::InterfaceDef_ptr _get_interface (
00083         ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS
00084       );
00085 
00086 
00087     virtual CORBA::Object_ptr _get_component (
00088         ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS
00089       );
00090 
00091 
00092     virtual char * _repository_id (
00093         ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS
00094     );
00095 
00096     virtual void _create_request (CORBA::Context_ptr ctx,
00097                                   const char * operation,
00098                                   CORBA::NVList_ptr arg_list,
00099                                   CORBA::NamedValue_ptr result,
00100                                   CORBA::Request_ptr & request,
00101                                   CORBA::Flags req_flags
00102                                   ACE_ENV_ARG_DECL_WITH_DEFAULTS);
00103 
00104     virtual void _create_request (CORBA::Context_ptr ctx,
00105                                   const char * operation,
00106                                   CORBA::NVList_ptr arg_list,
00107                                   CORBA::NamedValue_ptr result,
00108                                   CORBA::ExceptionList_ptr exclist,
00109                                   CORBA::ContextList_ptr ctxtlist,
00110                                   CORBA::Request_ptr & request,
00111                                   CORBA::Flags req_flags
00112                                   ACE_ENV_ARG_DECL_WITH_DEFAULTS);
00113 
00114 
00115     virtual CORBA::Request_ptr _request (const char * operation
00116                                          ACE_ENV_ARG_DECL_WITH_DEFAULTS);
00117 
00118 #endif 
00119 
00120 #if (TAO_HAS_CORBA_MESSAGING == 1)
00121 
00122 
00123     CORBA::Policy_ptr _get_policy (CORBA::PolicyType type
00124                                    ACE_ENV_ARG_DECL_WITH_DEFAULTS);
00125 
00126 
00127     CORBA::Policy_ptr _get_cached_policy (TAO_Cached_Policy_Type type
00128                                           ACE_ENV_ARG_DECL_WITH_DEFAULTS);
00129 
00130 
00131     CORBA::Object_ptr _set_policy_overrides (
00132         const CORBA::PolicyList & policies,
00133         CORBA::SetOverrideType set_add
00134         ACE_ENV_ARG_DECL_WITH_DEFAULTS
00135       );
00136 
00137 
00138     CORBA::PolicyList * _get_policy_overrides (
00139         const CORBA::PolicyTypeSeq & types
00140         ACE_ENV_ARG_DECL_WITH_DEFAULTS
00141       );
00142 
00143 
00144     CORBA::Boolean _validate_connection (
00145         CORBA::PolicyList_out inconsistent_policies
00146         ACE_ENV_ARG_DECL_WITH_DEFAULTS
00147       );
00148 
00149 #endif 
00150 
00151 
00152 
00153 
00154 
00155 
00156     virtual CORBA::ULong _hash (CORBA::ULong maximum
00157                                 ACE_ENV_ARG_DECL_WITH_DEFAULTS);
00158 
00159 
00160 
00161 
00162 
00163 
00164 
00165 
00166     virtual CORBA::Boolean _is_equivalent (CORBA::Object_ptr other_obj
00167                                            ACE_ENV_ARG_DECL_WITH_DEFAULTS)
00168       ACE_THROW_SPEC (());
00169 
00170     
00171 
00172     virtual void _add_ref (void);
00173 
00174 
00175     virtual void _remove_ref (void);
00176 
00177     virtual CORBA::ORB_ptr _get_orb (
00178         ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS
00179       );
00180 
00181     
00182 
00183 
00184     virtual TAO::ObjectKey * _key (ACE_ENV_SINGLE_ARG_DECL);
00185 
00186 
00187     typedef LocalObject_ptr _ptr_type;
00188     typedef LocalObject_var _var_type;
00189     typedef LocalObject_out _out_type;
00190 
00191   protected:
00192 
00193 
00194 
00195 
00196 
00197     LocalObject (void);
00198 
00199   private:
00200 
00201 
00202 
00203 
00204 
00205     LocalObject (const LocalObject &);
00206     LocalObject & operator = (const LocalObject &);
00207 
00208 
00209   };
00210 }   
00211 
00212 
00213 
00214 
00215 
00216 
00217 
00218 
00219 
00220 
00221 class TAO_Export TAO_Local_RefCounted_Object
00222   : public virtual CORBA::LocalObject
00223 {
00224 public:
00225 
00226 
00227   virtual ~TAO_Local_RefCounted_Object (void);
00228 
00229 
00230   virtual void _add_ref (void);
00231 
00232 
00233   virtual void _remove_ref (void);
00234 
00235 protected:
00236 
00237   
00238 
00239 
00240 
00241   TAO_Local_RefCounted_Object (void);
00242 
00243 private:
00244 
00245 
00246 
00247 
00248 
00249   TAO_Local_RefCounted_Object (const TAO_Local_RefCounted_Object &);
00250   TAO_Local_RefCounted_Object & operator = (
00251       const TAO_Local_RefCounted_Object &
00252     );
00253 
00254 
00255 protected:
00256 
00257   ACE_Atomic_Op<TAO_SYNCH_MUTEX, CORBA::ULong> refcount_;
00258 };
00259 
00260 TAO_END_VERSIONED_NAMESPACE_DECL
00261 
00262 #if defined (__ACE_INLINE__)
00263 # include "tao/LocalObject.i"
00264 #endif 
00265 
00266 #include  "ace/post.h"
00267 
00268 #endif