00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 #ifndef _partition_policy_impl_hh
00019 #define _partition_policy_impl_hh
00020 
00021 #include "BrokerC.h"
00022 #include "BrokerS.h"
00023 
00024 #include "StrictPolicyS.h"
00025 
00026 #include "listNode.h"
00027 
00028 
00029 
00030 
00031 class PartitionPolicyImpl : public virtual POA_BrokerPolicies::PartitionPolicy
00032 {
00033 
00034 public:
00035 
00036 
00037 
00038 
00039 
00040 
00041 
00042     PartitionPolicyImpl(const char *name);
00043 
00044 
00045 
00046 
00047     virtual ~PartitionPolicyImpl(void);
00048 
00049 
00050     virtual char *Name(void)
00051         throw (CORBA::SystemException);
00052     
00053 
00054     virtual void AddTask(Broker::Task_ptr new_task,
00055                          const Broker::ScheduleParameters &sp)
00056         throw (CORBA::SystemException,
00057                Broker::DuplicateScheduleParameter,
00058                Broker::InvalidScheduleParameter,
00059                Broker::MissingScheduleParameter);
00060 
00061     virtual void RemoveTask(Broker::Task_ptr added_task)
00062         throw (CORBA::SystemException);
00063     
00064 
00065     virtual Broker::TaskList *GetTaskList(void)
00066         throw (CORBA::SystemException);
00067 
00068 
00069     virtual void Activate(const Broker::TaskList &tasks)
00070         throw (CORBA::SystemException);
00071 
00072     virtual void Deactivate(void)
00073         throw (CORBA::SystemException);
00074     
00075 
00076     virtual Broker::CPUReserve ChangeTaskCPU(Broker::RealTimeTask_ptr task,
00077                                              const Broker::CPUReserve &advice)
00078         throw (CORBA::SystemException, Broker::InvalidState);
00079 
00080 
00081     virtual CORBA::Float GetMaxCPUAllocation(void)
00082         throw (CORBA::SystemException);
00083 
00084     virtual void SetMaxCPUAllocation(CORBA::Float amount)
00085         throw (CORBA::SystemException);
00086 
00087 
00088     virtual void DefaultPolicy(Broker::Policy_ptr policy)
00089         throw (CORBA::SystemException);
00090 
00091 
00092     virtual Broker::Policy_ptr DefaultPolicy(void)
00093         throw (CORBA::SystemException);
00094 
00095 
00096     virtual void SetTaskPolicy(Broker::Task_ptr task,
00097                                Broker::Policy_ptr bp)
00098         throw (CORBA::SystemException);
00099 
00100 
00101     virtual Broker::Policy_ptr GetTaskPolicy(Broker::Task_ptr task)
00102         throw (CORBA::SystemException);
00103 
00104 private:
00105 
00106 
00107 
00108 
00109     struct TaskData {
00110         struct lnMinNode td_Link;
00111         Broker::RealTimeTask_var td_Task;
00112         Broker::ScheduleParameters_var td_ScheduleParameters;
00113         Broker::Policy_var td_Policy;
00114     };
00115 
00116 
00117 
00118 
00119     void RepairTaskList(void);
00120 
00121 
00122 
00123 
00124 
00125 
00126 
00127 
00128 
00129     struct TaskData *FindTaskData(Broker::RealTimeTask_ptr task);
00130     
00131 
00132     float pp_MaxUsedCPU;
00133 
00134 
00135     CORBA::String_var pp_Name;
00136 
00137 
00138     Broker::Policy_var pp_DefaultPolicy;
00139 
00140 
00141     struct lnMinList pp_List;
00142     
00143 };
00144 
00145 #endif