00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef _gc_task_advocate_hh
00019 #define _gc_task_advocate_hh
00020
00021 #include "ExactTaskAdvocate.hh"
00022
00023 class GCInterval
00024 {
00025 public:
00026
00027 static const int TOLERANCE = 500;
00028
00029 CORBA::ULong i_Compute;
00030 unsigned int i_Length;
00031
00032 int match(CORBA::ULong ct)
00033 {
00034 int retval = 0;
00035
00036 if( (ct > (this->i_Compute - TOLERANCE)) &&
00037 (ct < (this->i_Compute + TOLERANCE)) )
00038 {
00039 retval = 0;
00040 }
00041 return( retval );
00042 };
00043 };
00044
00045
00046
00047
00048
00049 class GCTaskAdvocate : public ExactTaskAdvocate
00050 {
00051
00052 public:
00053
00054
00055 GCTaskAdvocate(const Broker::TaskParameters &tp)
00056 throw (CORBA::SystemException,
00057 Broker::DuplicateTaskParameter,
00058 Broker::InvalidTaskParameter,
00059 Broker::MissingTaskParameter);
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073 virtual CORBA::ULong ComputeAdvice(CORBA::ULong status)
00074 throw (CORBA::SystemException, Broker::InvalidStatus);
00075
00076 protected:
00077
00078 typedef enum {
00079 DETECT_MODE_OFF,
00080 DETECT_MODE_ON,
00081 } detect_mode_t;
00082
00083 detect_mode_t gta_Mode;
00084 GCInterval gta_Intervals[16];
00085 unsigned int gta_Index;
00086 unsigned int gta_Length;
00087 unsigned int gta_PeriodIndex;
00088
00089 };
00090
00091 #endif