DynAnyFactory.cpp

Go to the documentation of this file.
00001 //=============================================================================
00002 /**
00003  *  @file    DynAnyFactory.cpp
00004  *
00005  *  $Id: DynAnyFactory.cpp 76995 2007-02-11 12:51:42Z johnnyw $
00006  *
00007  *  @author Carlos O'Ryan <coryan@uci.edu>
00008  */
00009 //=============================================================================
00010 
00011 
00012 #include "tao/AnyTypeCode/AnyTypeCode_methods.h"
00013 
00014 #include "tao/DynamicAny/DynAnyFactory.h"
00015 
00016 #include "tao/DynamicAny/DynAny_i.h"
00017 #include "tao/DynamicAny/DynStruct_i.h"
00018 #include "tao/DynamicAny/DynSequence_i.h"
00019 #include "tao/DynamicAny/DynEnum_i.h"
00020 #include "tao/DynamicAny/DynArray_i.h"
00021 #include "tao/DynamicAny/DynUnion_i.h"
00022 #include "tao/DynamicAny/DynAnyUtils_T.h"
00023 
00024 #include "ace/Auto_Ptr.h"
00025 
00026 ACE_RCSID (DynamicAny,
00027            DynAnyFactory,
00028            "$Id: DynAnyFactory.cpp 76995 2007-02-11 12:51:42Z johnnyw $")
00029 
00030 TAO_BEGIN_VERSIONED_NAMESPACE_DECL
00031 
00032 // Constructor from typecode
00033 TAO_DynAnyFactory::TAO_DynAnyFactory (void)
00034 {
00035 }
00036 
00037 DynamicAny::DynAny_ptr
00038 TAO_DynAnyFactory::create_dyn_any (const CORBA::Any & value)
00039 {
00040   return
00041     TAO::MakeDynAnyUtils::make_dyn_any_t<const CORBA::Any&> (
00042       value._tao_get_typecode (),
00043       value);
00044 }
00045 
00046 DynamicAny::DynAny_ptr
00047 TAO_DynAnyFactory::create_dyn_any_from_type_code (CORBA::TypeCode_ptr type)
00048 {
00049   // Second arg is typed in the template parameter, repeating it
00050   // this way allows cleaner template code.
00051   return
00052     TAO::MakeDynAnyUtils::make_dyn_any_t<CORBA::TypeCode_ptr> (
00053       type,
00054       type);
00055 }
00056 
00057 DynamicAny::DynAny_ptr
00058 TAO_DynAnyFactory::create_dyn_any_without_truncation (
00059     const CORBA::Any & /* value */)
00060 {
00061   throw ::CORBA::NO_IMPLEMENT ();
00062 }
00063 
00064 DynamicAny::DynAnySeq *
00065 TAO_DynAnyFactory::create_multiple_dyn_anys (
00066     const DynamicAny::AnySeq & /* values */,
00067     ::CORBA::Boolean /* allow_truncate */)
00068 {
00069   throw ::CORBA::NO_IMPLEMENT ();
00070 }
00071 
00072 DynamicAny::AnySeq *
00073 TAO_DynAnyFactory::create_multiple_anys (
00074     const DynamicAny::DynAnySeq & /* values */)
00075 {
00076   throw ::CORBA::NO_IMPLEMENT ();
00077 }
00078 
00079 // Utility function called by all the DynAny classes
00080 // to extract the TCKind of possibly aliased types.
00081 CORBA::TCKind
00082 TAO_DynAnyFactory::unalias (CORBA::TypeCode_ptr tc)
00083 {
00084   CORBA::TCKind tck = tc->kind ();
00085 
00086   while (tck == CORBA::tk_alias)
00087     {
00088       CORBA::TypeCode_var temp = tc->content_type ();
00089 
00090       tck = TAO_DynAnyFactory::unalias (temp.in ());
00091     }
00092 
00093   return tck;
00094 }
00095 
00096 // Same as above, but returns the type code.
00097 CORBA::TypeCode_ptr
00098 TAO_DynAnyFactory::strip_alias (CORBA::TypeCode_ptr tc)
00099 {
00100   CORBA::TypeCode_var retval = CORBA::TypeCode::_duplicate (tc);
00101   CORBA::TCKind tck = retval->kind ();
00102 
00103   while (tck == CORBA::tk_alias)
00104     {
00105       retval = retval->content_type ();
00106 
00107       tck = retval->kind ();
00108     }
00109 
00110   return retval._retn ();
00111 }
00112 
00113 TAO_END_VERSIONED_NAMESPACE_DECL

Generated on Tue Feb 2 17:43:10 2010 for TAO_DynamicAny by  doxygen 1.4.7