summaryrefslogtreecommitdiff
path: root/TAO/tao/DynamicAny/DynAnyUtils_T.h
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/tao/DynamicAny/DynAnyUtils_T.h')
-rw-r--r--TAO/tao/DynamicAny/DynAnyUtils_T.h200
1 files changed, 32 insertions, 168 deletions
diff --git a/TAO/tao/DynamicAny/DynAnyUtils_T.h b/TAO/tao/DynamicAny/DynAnyUtils_T.h
index 08742ad5d00..26b4fca2a0b 100644
--- a/TAO/tao/DynamicAny/DynAnyUtils_T.h
+++ b/TAO/tao/DynamicAny/DynAnyUtils_T.h
@@ -6,24 +6,29 @@
*
* $Id$
*
- * Collection of templatized common code used in Dynamic Any
+ * Declaration of templatized common code used in Dynamic Any
*
* @author Jeff Parsons <j.parsons@vanderbilt.edu>
*/
//=============================================================================
-#include "tao/DynamicAny/DynAny_i.h"
-#include "tao/DynamicAny/DynArray_i.h"
-#include "tao/DynamicAny/DynEnum_i.h"
-#include "tao/DynamicAny/DynSequence_i.h"
-#include "tao/DynamicAny/DynStruct_i.h"
-#include "tao/DynamicAny/DynUnion_i.h"
-#include "tao/DynamicAny/DynAnyFactory.h"
+#ifndef TAO_DYNANYUTILS_T_H
+#define TAO_DYNANYUTILS_T_H
+
+#include /**/ "ace/pre.h"
+
+#include "tao/DynamicAny/DynamicAny.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
#include "tao/AnyTypeCode/BasicTypeTraits.h"
TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+class TAO_DynCommon;
+
namespace TAO
{
// Encapsulates common code for inserting and extracting basic
@@ -38,66 +43,15 @@ namespace TAO
CORBA::SystemException,
DynamicAny::DynAny::TypeMismatch,
DynamicAny::DynAny::InvalidValue
- ))
- {
- if (the_dynany->destroyed ())
- {
- ACE_THROW (CORBA::OBJECT_NOT_EXIST ());
- }
-
- if (the_dynany->has_components ())
- {
- DynamicAny::DynAny_var cc = the_dynany->check_component ();
- TAO_DynCommon *dc = dynamic_cast<TAO_DynCommon *> (cc.in ());
- TAO::DynAnyBasicTypeUtils<T>::insert_value (val, dc);
- }
- else
- {
- the_dynany->check_type (TAO::BasicTypeTraits<T>::tc_value);
- CORBA::Any &my_any = the_dynany->the_any ();
- typedef typename TAO::BasicTypeTraits<T>::insert_type i_type;
- i_type insert_arg (val);
- my_any <<= insert_arg;
- }
- }
-
- static typename TAO::BasicTypeTraits<T>::return_type
+ ));
+
+ static typename BasicTypeTraits<T>::return_type
get_value (TAO_DynCommon *the_dynany)
ACE_THROW_SPEC ((
CORBA::SystemException,
DynamicAny::DynAny::TypeMismatch,
DynamicAny::DynAny::InvalidValue
- ))
- {
- if (the_dynany->destroyed ())
- {
- ACE_THROW_RETURN (CORBA::OBJECT_NOT_EXIST (),
- TAO::BasicTypeTraits<T>::return_type ());
- }
-
- if (the_dynany->has_components ())
- {
- DynamicAny::DynAny_var cc = the_dynany->check_component ();
- TAO_DynCommon *dc = dynamic_cast<TAO_DynCommon *> (cc.in ());
- return TAO::DynAnyBasicTypeUtils<T>::get_value (dc);
- }
- else
- {
- typedef typename TAO::BasicTypeTraits<T>::return_type ret_type;
- typedef typename TAO::BasicTypeTraits<T>::extract_type ext_type;
- ret_type retval = ret_type ();
- ext_type extval (retval);
- const CORBA::Any &my_any = the_dynany->the_any ();
-
- if (!(my_any >>= extval))
- {
- ACE_THROW_RETURN (DynamicAny::DynAny::TypeMismatch (),
- TAO::BasicTypeTraits<T>::return_type ());
- }
-
- return TAO::BasicTypeTraits<T>::convert (extval);
- }
- }
+ ));
};
// Encapsulates code that would otherwise be repeated in
@@ -111,19 +65,7 @@ namespace TAO
CORBA::Boolean destroying)
ACE_THROW_SPEC ((
CORBA::SystemException
- ))
- {
- T *tmp = T::_narrow (component);
-
- if (destroying)
- {
- tmp->container_is_destroying (true);
- }
- else
- {
- tmp->ref_to_component (true);
- }
- }
+ ));
};
// Used by MakeDynAnyUtils below, parameterized on the type of
@@ -132,18 +74,7 @@ namespace TAO
struct CreateDynAnyUtils
{
static DynamicAny::DynAny_ptr
- create_dyn_any_t (ANY_TC any_tc)
- {
- DA_IMPL *p = 0;
- ACE_NEW_THROW_EX (p,
- DA_IMPL,
- CORBA::NO_MEMORY ());
-
- ACE_Auto_Basic_Ptr<DA_IMPL> dp (p);
- p->init (any_tc);
-
- return dp.release ();
- }
+ create_dyn_any_t (ANY_TC any_tc);
};
// Code common to DynAnyFactory create_* calls, parameterized on
@@ -152,87 +83,20 @@ namespace TAO
struct MakeDynAnyUtils
{
static DynamicAny::DynAny_ptr
- make_dyn_any_t (CORBA::TypeCode_ptr tc, ANY_TC any_tc)
- {
- switch (TAO_DynAnyFactory::unalias (tc))
- {
- case CORBA::tk_null:
- case CORBA::tk_void:
- case CORBA::tk_short:
- case CORBA::tk_long:
- case CORBA::tk_ushort:
- case CORBA::tk_ulong:
- case CORBA::tk_float:
- case CORBA::tk_double:
- case CORBA::tk_longlong:
- case CORBA::tk_ulonglong:
- case CORBA::tk_boolean:
- case CORBA::tk_char:
- case CORBA::tk_wchar:
- case CORBA::tk_octet:
- case CORBA::tk_any:
- case CORBA::tk_TypeCode:
- case CORBA::tk_objref:
- case CORBA::tk_string:
- case CORBA::tk_wstring:
- return
- TAO::CreateDynAnyUtils<
- TAO_DynAny_i,
- ANY_TC>::create_dyn_any_t (any_tc);
- case CORBA::tk_struct:
- case CORBA::tk_except:
- return
- TAO::CreateDynAnyUtils<
- TAO_DynStruct_i,
- ANY_TC>::create_dyn_any_t (any_tc);
- case CORBA::tk_sequence:
- if (TAO_DynCommon::is_basic_type_seq (tc))
- {
- return
- TAO::CreateDynAnyUtils<
- TAO_DynAny_i,
- ANY_TC>::create_dyn_any_t (any_tc);
- }
- else
- {
- return
- TAO::CreateDynAnyUtils<
- TAO_DynSequence_i,
- ANY_TC>::create_dyn_any_t (any_tc);
- }
- case CORBA::tk_union:
- return
- TAO::CreateDynAnyUtils<
- TAO_DynUnion_i,
- ANY_TC>::create_dyn_any_t (any_tc);
- case CORBA::tk_enum:
- return
- TAO::CreateDynAnyUtils<
- TAO_DynEnum_i,
- ANY_TC>::create_dyn_any_t (any_tc);
- case CORBA::tk_array:
- return
- TAO::CreateDynAnyUtils<
- TAO_DynArray_i,
- ANY_TC>::create_dyn_any_t (any_tc);
- case CORBA::tk_fixed:
- case CORBA::tk_value:
- case CORBA::tk_value_box:
- case CORBA::tk_abstract_interface:
- case CORBA::tk_component:
- case CORBA::tk_home:
- ACE_THROW_RETURN (CORBA::NO_IMPLEMENT (),
- DynamicAny::DynAny::_nil ());
- case CORBA::tk_native:
- ACE_THROW_RETURN (DynamicAny::DynAnyFactory::InconsistentTypeCode (),
- DynamicAny::DynAny::_nil ());
- default:
- break;
- }
-
- return DynamicAny::DynAny::_nil ();
- }
+ make_dyn_any_t (CORBA::TypeCode_ptr tc, ANY_TC any_tc);
};
}
TAO_END_VERSIONED_NAMESPACE_DECL
+
+#if defined (ACE_TEMPLATES_REQUIRE_SOURCE)
+#include "tao/DynamicAny/DynanyUtils_T.cpp"
+#endif /* ACE_TEMPLATES_REQUIRE_SOURCE */
+
+#if defined (ACE_TEMPLATES_REQUIRE_PRAGMA)
+#pragma implementation ("tao/DynamicAny/DynAnyUtils_T.cpp")
+#endif /* ACE_TEMPLATES_REQUIRE_PRAGMA */
+
+#include /**/ "ace/post.h"
+
+#endif /* TAO_DYNANYUTILS_T_H */ \ No newline at end of file