00001 // -*- C++ -*- 00002 00003 // DynArray_i.h,v 1.17 2006/03/10 07:19:08 jtc Exp 00004 00005 //============================================================================= 00006 /** 00007 * @file DynArray_i.h 00008 * 00009 * DynArray_i.h,v 1.17 2006/03/10 07:19:08 jtc Exp 00010 * 00011 * @author Jeff Parsons <parsons@cs.wustl.edu> 00012 */ 00013 //============================================================================= 00014 00015 00016 #ifndef TAO_DYNARRAY_I_H 00017 #define TAO_DYNARRAY_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 #include "ace/Containers.h" 00029 00030 #if defined (_MSC_VER) 00031 # pragma warning(push) 00032 # pragma warning (disable:4250) 00033 #endif /* _MSC_VER */ 00034 00035 TAO_BEGIN_VERSIONED_NAMESPACE_DECL 00036 00037 /** 00038 * @class TAO_DynArray_i 00039 * 00040 * Implementation of Dynamic Any type for arrays 00041 */ 00042 class TAO_DynamicAny_Export TAO_DynArray_i 00043 : public virtual DynamicAny::DynArray, 00044 public virtual TAO_DynCommon, 00045 public virtual TAO_Local_RefCounted_Object 00046 { 00047 public: 00048 /// Constructor. 00049 TAO_DynArray_i (void); 00050 00051 /// Destructor. 00052 ~TAO_DynArray_i (void); 00053 00054 /// Initialize using just a TypeCode. 00055 void init (CORBA::TypeCode_ptr tc 00056 ACE_ENV_ARG_DECL); 00057 00058 /// Initialize using an Any. 00059 void init (const CORBA::Any& any 00060 ACE_ENV_ARG_DECL); 00061 00062 // = LocalObject methods 00063 static TAO_DynArray_i *_narrow ( 00064 CORBA::Object_ptr obj 00065 ACE_ENV_ARG_DECL_WITH_DEFAULTS); 00066 00067 // = Functions specific to DynArray. 00068 00069 virtual DynamicAny::AnySeq * get_elements ( 00070 ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS) 00071 00072 ACE_THROW_SPEC (( 00073 CORBA::SystemException 00074 )); 00075 00076 virtual void set_elements ( 00077 const DynamicAny::AnySeq & value 00078 ACE_ENV_ARG_DECL_WITH_DEFAULTS) 00079 00080 ACE_THROW_SPEC (( 00081 CORBA::SystemException, 00082 DynamicAny::DynAny::TypeMismatch, 00083 DynamicAny::DynAny::InvalidValue 00084 )); 00085 00086 virtual DynamicAny::DynAnySeq * get_elements_as_dyn_any ( 00087 ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS) 00088 00089 ACE_THROW_SPEC (( 00090 CORBA::SystemException 00091 )); 00092 00093 virtual void set_elements_as_dyn_any ( 00094 const DynamicAny::DynAnySeq & value 00095 ACE_ENV_ARG_DECL_WITH_DEFAULTS) 00096 00097 ACE_THROW_SPEC (( 00098 CORBA::SystemException, 00099 DynamicAny::DynAny::TypeMismatch, 00100 DynamicAny::DynAny::InvalidValue 00101 )); 00102 00103 // = DynAny common functions not implemented in class TAO_DynCommon. 00104 00105 virtual void from_any ( 00106 const CORBA::Any & value 00107 ACE_ENV_ARG_DECL_WITH_DEFAULTS) 00108 00109 ACE_THROW_SPEC (( 00110 CORBA::SystemException, 00111 DynamicAny::DynAny::TypeMismatch, 00112 DynamicAny::DynAny::InvalidValue 00113 )); 00114 00115 virtual CORBA::Any * to_any ( 00116 ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS) 00117 00118 ACE_THROW_SPEC (( 00119 CORBA::SystemException 00120 )); 00121 00122 virtual CORBA::Boolean equal ( 00123 DynamicAny::DynAny_ptr dyn_any 00124 ACE_ENV_ARG_DECL_WITH_DEFAULTS) 00125 00126 ACE_THROW_SPEC (( 00127 CORBA::SystemException 00128 )); 00129 00130 virtual void destroy ( 00131 ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS) 00132 00133 ACE_THROW_SPEC (( 00134 CORBA::SystemException 00135 )); 00136 00137 virtual DynamicAny::DynAny_ptr current_component ( 00138 ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS) 00139 00140 ACE_THROW_SPEC (( 00141 CORBA::SystemException, 00142 DynamicAny::DynAny::TypeMismatch 00143 )); 00144 00145 private: 00146 /// Returns the type of elements contained in the array. 00147 CORBA::TypeCode_ptr get_element_type (ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS); 00148 00149 /// Gets the length of the array from the typecode. 00150 CORBA::ULong get_tc_length (CORBA::TypeCode_ptr tc 00151 ACE_ENV_ARG_DECL_WITH_DEFAULTS); 00152 00153 /// Called by both versions of init(). 00154 void init_common (void); 00155 00156 // Use copy() or assign() instead of these. 00157 TAO_DynArray_i (const TAO_DynArray_i &src); 00158 TAO_DynArray_i &operator= (const TAO_DynArray_i &src); 00159 00160 private: 00161 /// Each component is also a DynAny. 00162 ACE_Array_Base<DynamicAny::DynAny_var> da_members_; 00163 }; 00164 00165 TAO_END_VERSIONED_NAMESPACE_DECL 00166 00167 #if defined(_MSC_VER) 00168 # pragma warning(pop) 00169 #endif /* _MSC_VER */ 00170 00171 #include /**/ "ace/post.h" 00172 #endif /* TAO_DYNARRAY_I_H */