PI_PolicyFactory.cpp

Go to the documentation of this file.
00001 #include "tao/PI/PI_PolicyFactory.h"
00002 
00003 #if TAO_HAS_INTERCEPTORS == 1
00004 
00005 #include "tao/PI/ProcessingModePolicy.h"
00006 #include "tao/ORB_Constants.h"
00007 
00008 TAO_BEGIN_VERSIONED_NAMESPACE_DECL
00009 
00010 ACE_RCSID (tao,
00011            PI_PolicyFactory,
00012            "PI_PolicyFactory.cpp,v 1.3 2005/12/29 15:44:15 elliott_c Exp")
00013 
00014 CORBA::Policy_ptr
00015 TAO_PI_PolicyFactory::create_policy (
00016     CORBA::PolicyType type,
00017     const CORBA::Any &value
00018     ACE_ENV_ARG_DECL)
00019   ACE_THROW_SPEC ((CORBA::SystemException,
00020                    CORBA::PolicyError))
00021 {
00022   if (type == PortableInterceptor::PROCESSING_MODE_POLICY_TYPE)
00023     {
00024       TAO_ProcessingModePolicy *processing_mode_policy = 0;
00025       PortableInterceptor::ProcessingMode policy_value;
00026 
00027       if ((value >>= policy_value) == 0)
00028         {
00029           ACE_THROW_RETURN (CORBA::PolicyError (CORBA::BAD_POLICY_VALUE),
00030                             CORBA::Policy::_nil ());
00031         }
00032 
00033       ACE_NEW_THROW_EX (processing_mode_policy,
00034                         TAO_ProcessingModePolicy (policy_value),
00035                         CORBA::NO_MEMORY (TAO::VMCID,
00036                                           CORBA::COMPLETED_NO));
00037       ACE_CHECK_RETURN (CORBA::Policy::_nil ());
00038 
00039       return processing_mode_policy;
00040     }
00041 
00042   ACE_THROW_RETURN (CORBA::PolicyError (CORBA::BAD_POLICY_TYPE),
00043                     CORBA::Policy::_nil ());
00044 }
00045 
00046 TAO_END_VERSIONED_NAMESPACE_DECL
00047 
00048 #endif  /* TAO_HAS_INTERCEPTORS == 1 */

Generated on Thu Nov 9 12:51:39 2006 for TAO_PI by doxygen 1.3.6