DynUnion_i.h

Go to the documentation of this file.
00001 // -*- C++ -*-
00002 //
00003 // DynUnion_i.h,v 1.20 2006/03/10 07:19:08 jtc Exp
00004 
00005 //=============================================================================
00006 /**
00007  *  @file    DynUnion_i.h
00008  *
00009  *  DynUnion_i.h,v 1.20 2006/03/10 07:19:08 jtc Exp
00010  *
00011  *  @author Jeff Parsons <parsons@cs.wustl.edu>
00012  */
00013 //=============================================================================
00014 
00015 
00016 #ifndef TAO_DYNUNION_I_H
00017 #define TAO_DYNUNION_I_H
00018 #include /**/ "ace/pre.h"
00019 
00020 #include "tao/DynamicAny/DynamicAny.h"
00021 
00022 #if !defined (ACE_LACKS_PRAGMA_ONCE)
00023 # pragma once
00024 #endif /* ACE_LACKS_PRAGMA_ONCE */
00025 
00026 #include "tao/DynamicAny/DynCommon.h"
00027 #include "tao/LocalObject.h"
00028 
00029 #if defined (_MSC_VER)
00030 # pragma warning(push)
00031 # pragma warning (disable:4250)
00032 #endif /* _MSC_VER */
00033 
00034 TAO_BEGIN_VERSIONED_NAMESPACE_DECL
00035 
00036 /**
00037  * @class TAO_DynUnion_i
00038  *
00039  * Implementation of Dynamic Any type for Unions.
00040  */
00041 class TAO_DynamicAny_Export TAO_DynUnion_i
00042   : public virtual DynamicAny::DynUnion,
00043     public virtual TAO_DynCommon,
00044     public virtual TAO_Local_RefCounted_Object
00045 {
00046 public:
00047   /// Constructor.
00048   TAO_DynUnion_i (void);
00049 
00050   /// Destructor.
00051   ~TAO_DynUnion_i (void);
00052 
00053   /// Constructor taking an Any argument.
00054   void init (const CORBA::Any& any ACE_ENV_ARG_DECL);
00055 
00056   /// Constructor taking a typecode argument.
00057   void init (CORBA::TypeCode_ptr tc ACE_ENV_ARG_DECL);
00058 
00059   // = LocalObject methods.
00060   static TAO_DynUnion_i *_narrow (
00061       CORBA::Object_ptr obj
00062       ACE_ENV_ARG_DECL_WITH_DEFAULTS);
00063 
00064   // = Functions specific to DynUnion.
00065 
00066   virtual DynamicAny::DynAny_ptr get_discriminator (
00067       ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
00068 
00069     ACE_THROW_SPEC ((
00070         CORBA::SystemException
00071       ));
00072 
00073   virtual void set_discriminator (
00074       DynamicAny::DynAny_ptr d
00075       ACE_ENV_ARG_DECL_WITH_DEFAULTS)
00076 
00077     ACE_THROW_SPEC ((
00078         CORBA::SystemException,
00079         DynamicAny::DynAny::TypeMismatch
00080       ));
00081 
00082   virtual void set_to_default_member (
00083       ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
00084 
00085     ACE_THROW_SPEC ((
00086         CORBA::SystemException,
00087         DynamicAny::DynAny::TypeMismatch
00088       ));
00089 
00090   virtual void set_to_no_active_member (
00091       ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
00092 
00093     ACE_THROW_SPEC ((
00094         CORBA::SystemException,
00095         DynamicAny::DynAny::TypeMismatch
00096       ));
00097 
00098   virtual CORBA::Boolean has_no_active_member (
00099       ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
00100 
00101     ACE_THROW_SPEC ((
00102         CORBA::SystemException
00103       ));
00104 
00105   virtual CORBA::TCKind discriminator_kind (
00106       ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
00107 
00108     ACE_THROW_SPEC ((
00109         CORBA::SystemException
00110       ));
00111 
00112   virtual DynamicAny::DynAny_ptr member (
00113       ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
00114 
00115     ACE_THROW_SPEC ((
00116         CORBA::SystemException,
00117         DynamicAny::DynAny::InvalidValue
00118       ));
00119 
00120   virtual char * member_name (
00121       ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
00122 
00123     ACE_THROW_SPEC ((
00124         CORBA::SystemException,
00125         DynamicAny::DynAny::InvalidValue
00126       ));
00127 
00128   virtual CORBA::TCKind member_kind (
00129       ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
00130 
00131     ACE_THROW_SPEC ((
00132         CORBA::SystemException,
00133         DynamicAny::DynAny::InvalidValue
00134       ));
00135 
00136   // = DynAny common functions not implemented in class TAO_DynCommon.
00137 
00138   virtual void from_any (
00139       const CORBA::Any & value
00140       ACE_ENV_ARG_DECL_WITH_DEFAULTS)
00141 
00142     ACE_THROW_SPEC ((
00143         CORBA::SystemException,
00144         DynamicAny::DynAny::TypeMismatch,
00145         DynamicAny::DynAny::InvalidValue
00146       ));
00147 
00148   virtual CORBA::Any * to_any (
00149       ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
00150 
00151     ACE_THROW_SPEC ((
00152         CORBA::SystemException
00153       ));
00154 
00155   virtual CORBA::Boolean equal (
00156       DynamicAny::DynAny_ptr dyn_any
00157       ACE_ENV_ARG_DECL_WITH_DEFAULTS)
00158 
00159     ACE_THROW_SPEC ((
00160         CORBA::SystemException
00161       ));
00162 
00163   virtual void destroy (
00164       ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
00165 
00166     ACE_THROW_SPEC ((
00167         CORBA::SystemException
00168       ));
00169 
00170   virtual DynamicAny::DynAny_ptr current_component (
00171       ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
00172 
00173     ACE_THROW_SPEC ((
00174         CORBA::SystemException,
00175         DynamicAny::DynAny::TypeMismatch
00176       ));
00177 
00178 private:
00179   /// Code common to the constructor from an Any arg and the member
00180   /// function from_any().
00181   void set_from_any (const CORBA::Any &any,
00182                      CORBA::Boolean from_factory
00183                      ACE_ENV_ARG_DECL_WITH_DEFAULTS)
00184     ACE_THROW_SPEC ((
00185         CORBA::SystemException,
00186         DynamicAny::DynAny::TypeMismatch,
00187         DynamicAny::DynAnyFactory::InconsistentTypeCode
00188       ));
00189 
00190   /// Called by both versions of init().
00191   void init_common (void);
00192 
00193   /// Iterative check for label value match.
00194   CORBA::Boolean label_match (const CORBA::Any &my_any,
00195                               const CORBA::Any &other_any
00196                               ACE_ENV_ARG_DECL_WITH_DEFAULTS)
00197     ACE_THROW_SPEC ((
00198         CORBA::SystemException
00199       ));
00200 
00201   /// Use copy() or assign() instead of these.
00202   TAO_DynUnion_i (const TAO_DynUnion_i &src);
00203   TAO_DynUnion_i &operator= (const TAO_DynUnion_i &src);
00204 
00205 private:
00206   /// Just two components.
00207   DynamicAny::DynAny_var member_;
00208   DynamicAny::DynAny_var discriminator_;
00209 
00210   /// The active member's slot in the union type code.
00211   CORBA::ULong member_slot_;
00212 };
00213 
00214 TAO_END_VERSIONED_NAMESPACE_DECL
00215 
00216 #if defined(_MSC_VER)
00217 # pragma warning(pop)
00218 #endif /* _MSC_VER */
00219 
00220 #include /**/ "ace/post.h"
00221 #endif /* TAO_DYNUNION_I_H */

Generated on Thu Nov 9 13:02:09 2006 for TAO_DynamicAny by doxygen 1.3.6