diff options
Diffstat (limited to 'ACE/TAO/tao/RTCORBA/RT_PolicyFactory.cpp')
-rw-r--r-- | ACE/TAO/tao/RTCORBA/RT_PolicyFactory.cpp | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/ACE/TAO/tao/RTCORBA/RT_PolicyFactory.cpp b/ACE/TAO/tao/RTCORBA/RT_PolicyFactory.cpp new file mode 100644 index 00000000000..9539b13cf22 --- /dev/null +++ b/ACE/TAO/tao/RTCORBA/RT_PolicyFactory.cpp @@ -0,0 +1,93 @@ +#include "tao/RTCORBA/RT_PolicyFactory.h" + +#if defined (TAO_HAS_CORBA_MESSAGING) && TAO_HAS_CORBA_MESSAGING != 0 + +ACE_RCSID (RTCORBA, + RT_PolicyFactory, + "$Id$") + +#include "tao/RTCORBA/RT_Policy_i.h" + +#include "tao/PolicyC.h" +#include "tao/ORB_Constants.h" + +TAO_BEGIN_VERSIONED_NAMESPACE_DECL + +CORBA::Policy_ptr +TAO_RT_PolicyFactory::create_policy ( + CORBA::PolicyType type, + const CORBA::Any &value) +{ + switch (type) + { + case RTCORBA::PRIORITY_MODEL_POLICY_TYPE : + return TAO_PriorityModelPolicy::create (value); + case RTCORBA::THREADPOOL_POLICY_TYPE : + return TAO_ThreadpoolPolicy::create (value); + case RTCORBA::SERVER_PROTOCOL_POLICY_TYPE : + return TAO_ServerProtocolPolicy::create (value); + case RTCORBA::CLIENT_PROTOCOL_POLICY_TYPE : + return TAO_ClientProtocolPolicy::create (value); + case RTCORBA::PRIVATE_CONNECTION_POLICY_TYPE : + return TAO_PrivateConnectionPolicy::create (value); + case RTCORBA::PRIORITY_BANDED_CONNECTION_POLICY_TYPE : + return TAO_PriorityBandedConnectionPolicy::create (value); + } + + throw ::CORBA::PolicyError (CORBA::BAD_POLICY_TYPE); +} + +CORBA::Policy_ptr +TAO_RT_PolicyFactory::_create_policy (CORBA::PolicyType type) +{ + CORBA::Policy_ptr policy = CORBA::Policy_ptr (); + + switch (type) + { + case RTCORBA::PRIORITY_MODEL_POLICY_TYPE : + { + ACE_NEW_THROW_EX (policy, + TAO_PriorityModelPolicy, + CORBA::NO_MEMORY ( + CORBA::SystemException::_tao_minor_code ( + TAO::VMCID, + ENOMEM), + CORBA::COMPLETED_NO)); + + return policy; + } + break; + case RTCORBA::PRIORITY_BANDED_CONNECTION_POLICY_TYPE : + { + ACE_NEW_THROW_EX (policy, + TAO_PriorityBandedConnectionPolicy, + CORBA::NO_MEMORY ( + CORBA::SystemException::_tao_minor_code ( + TAO::VMCID, + ENOMEM), + CORBA::COMPLETED_NO)); + + return policy; + } + break; + case RTCORBA::CLIENT_PROTOCOL_POLICY_TYPE : + { + ACE_NEW_THROW_EX (policy, + TAO_ClientProtocolPolicy, + CORBA::NO_MEMORY ( + CORBA::SystemException::_tao_minor_code ( + TAO::VMCID, + ENOMEM), + CORBA::COMPLETED_NO)); + + return policy; + } + break; + } + + throw ::CORBA::PolicyError (CORBA::BAD_POLICY_TYPE); +} + +TAO_END_VERSIONED_NAMESPACE_DECL + +#endif /* TAO_HAS_CORBA_MESSAGING && TAO_HAS_CORBA_MESSAGING != 0 */ |