diff options
Diffstat (limited to 'modules/CIAO/tools/Config_Handlers/RT-CCM/PS_Handler.cpp')
-rw-r--r-- | modules/CIAO/tools/Config_Handlers/RT-CCM/PS_Handler.cpp | 114 |
1 files changed, 114 insertions, 0 deletions
diff --git a/modules/CIAO/tools/Config_Handlers/RT-CCM/PS_Handler.cpp b/modules/CIAO/tools/Config_Handlers/RT-CCM/PS_Handler.cpp new file mode 100644 index 00000000000..95c5bb76d9d --- /dev/null +++ b/modules/CIAO/tools/Config_Handlers/RT-CCM/PS_Handler.cpp @@ -0,0 +1,114 @@ +// $Id$ + +#include "PS_Handler.h" +#include "PM_Handler.h" +#include "CIAOServerResources.hpp" + +namespace CIAO +{ + namespace Config_Handlers + { + bool + PS_Handler::policy_set (const PolicySet &src, + ::CIAO::DAnCE::PolicySet &dest) + { + if (src.id_p ()) + dest.Id = CORBA::string_dup (src.id ().c_str ()); + + // Make room for all of the policies + CORBA::ULong len (dest.policies.length ()); + dest.policies.length (len + + src.count_priorityModel () + + src.count_threadpool () + + src.count_priorityBandedConnection ()); + + for (PolicySet::priorityModel_const_iterator i = src.begin_priorityModel (); + i != src.end_priorityModel (); + ++i) + { + ::CIAO::DAnCE::PriorityModelPolicyDef pmd; + + PM_Handler::priority_model_pd (*i, pmd); + + dest.policies[len++].PriorityModelDef (pmd); + } + + for (PolicySet::threadpool_const_iterator i = src.begin_threadpool (); + i != src.end_threadpool (); + ++i) + { + ::CIAO::DAnCE::ThreadpoolPolicyDef tpd; + + tpd.Id = CORBA::string_dup (i->id ().c_str ()); + + dest.policies[len++].ThreadpoolDef (tpd); + } + + + for (PolicySet::priorityBandedConnection_const_iterator i = src.begin_priorityBandedConnection (); + i != src.end_priorityBandedConnection (); + ++i) + { + ::CIAO::DAnCE::PriorityBandedConnectionPolicyDef pbc; + + pbc.Id = CORBA::string_dup (i->id ().c_str ()); + + dest.policies[len++].PriorityBandedConnectionDef (pbc); + } + + + + return true; + } + + + PolicySet + PS_Handler::policy_set (const ::CIAO::DAnCE::PolicySet &src) + { + PolicySet ps; + + if (src.Id.in ()) + ps.id (src.Id.in ()); + + for (CORBA::ULong i = 0; + i < src.policies.length (); + ++i) + { + ACE_ERROR ((LM_ERROR, + "Attempting switch for i = %d\n", + i)); + + switch (src.policies[i]._d ()) + { + case ::CIAO::DAnCE::PRIORITY_MODEL_POLICY_TYPE: + ps.add_priorityModel ( + PM_Handler::priority_model_pd (src.policies[i].PriorityModelDef ())); + break; + + case ::CIAO::DAnCE::THREADPOOL_POLICY_TYPE: + ps.add_threadpool (src.policies[i].ThreadpoolDef ().Id.in ()); + break; + + case ::CIAO::DAnCE::PRIORITY_BANDED_CONNECTION_POLICY_TYPE: + ps.add_priorityBandedConnection (src.policies[i].PriorityBandedConnectionDef ().Id.in ()); + break; + + case 0: + ACE_ERROR ((LM_ERROR, + "Skipping invalid policy.\n")); + break; + + default: + ACE_ERROR ((LM_ERROR, + "Bad policy stored in policy_set: %i\n", + src.policies[i]._d ())); + throw 1; + } + } + + return ps; + } + + } + +} |