diff options
Diffstat (limited to 'TAO/tao/DiffServPolicy/DiffServPolicy_Factory.cpp')
-rw-r--r-- | TAO/tao/DiffServPolicy/DiffServPolicy_Factory.cpp | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/TAO/tao/DiffServPolicy/DiffServPolicy_Factory.cpp b/TAO/tao/DiffServPolicy/DiffServPolicy_Factory.cpp new file mode 100644 index 00000000000..3fed4990ac9 --- /dev/null +++ b/TAO/tao/DiffServPolicy/DiffServPolicy_Factory.cpp @@ -0,0 +1,62 @@ +#include "tao/DiffServPolicy/DiffServPolicy_Factory.h" + +ACE_RCSID (DiffServPolicy, + DiffServPolicy_Factory, + "$Id$") + +#include "tao/DiffServPolicy/Client_Network_Priority_Policy.h" +#include "tao/DiffServPolicy/Server_Network_Priority_Policy.h" +#include "tao/PolicyC.h" +#include "tao/ORB_Constants.h" + +TAO_BEGIN_VERSIONED_NAMESPACE_DECL + +CORBA::Policy_ptr +TAO_DiffServ_PolicyFactory::create_policy ( + CORBA::PolicyType type, + const CORBA::Any &value) +{ + if (type == TAO::CLIENT_NETWORK_PRIORITY_TYPE) + return TAO_Client_Network_Priority_Policy::create (value); + + if (type == TAO::NETWORK_PRIORITY_TYPE) + return TAO_Server_Network_Priority_Policy::create (value); + + throw ::CORBA::PolicyError (CORBA::BAD_POLICY_TYPE); +} + +CORBA::Policy_ptr +TAO_DiffServ_PolicyFactory::_create_policy (CORBA::PolicyType type) +{ + CORBA::Policy_ptr policy = CORBA::Policy::_nil (); + + if (type == TAO::CLIENT_NETWORK_PRIORITY_TYPE) + { + ACE_NEW_THROW_EX (policy, + TAO_Client_Network_Priority_Policy (), + CORBA::NO_MEMORY ( + CORBA::SystemException::_tao_minor_code ( + TAO::VMCID, + ENOMEM), + CORBA::COMPLETED_NO)); + + return policy; + } + + if (type == TAO::NETWORK_PRIORITY_TYPE) + { + ACE_NEW_THROW_EX (policy, + TAO_Server_Network_Priority_Policy (), + CORBA::NO_MEMORY ( + CORBA::SystemException::_tao_minor_code ( + TAO::VMCID, + ENOMEM), + CORBA::COMPLETED_NO)); + + return policy; + } + + throw ::CORBA::PolicyError (CORBA::BAD_POLICY_TYPE); +} + +TAO_END_VERSIONED_NAMESPACE_DECL |