📄 rrproj_prob.h
字号:
aipTime m_start_day; // derived
aipTime m_end_day; // derived
protected:
void derive_data();
public:
rppEmpOff () {}
rppEmpOff (long a_emp_id, long a_start_yyyymmdd, long a_end_yyyymmdd);
virtual ~rppEmpOff ();
virtual long num_keys (void) const { return 3; }
virtual long key1 (void) const { return m_emp_id; }
virtual long key2 (void) const { return m_start_yyyymmdd; }
virtual long key3 (void) const { return m_end_yyyymmdd; }
// returns 0 on failure
virtual int read_str (const char *x);
virtual int write_str (char *x) const;
long emp_id () const { return m_emp_id; }
long start_yyyymmdd () const { return m_start_yyyymmdd; }
long end_yyyymmdd () const { return m_end_yyyymmdd; }
aipTime start_day () const { return m_start_day; }
aipTime end_day () const { return m_end_day; }
};
//======================================================================
// rppPosEmp - Position and an Employee that can work it
class rppPosEmp : public aipDemon {
long m_pos_id;
long m_emp_id;
public:
rppPosEmp () {}
rppPosEmp (long a_pos_id, long a_emp_id);
virtual ~rppPosEmp ();
virtual long num_keys (void) const { return 2; }
virtual long key1 (void) const { return m_pos_id; }
virtual long key2 (void) const { return m_emp_id; }
// returns 0 on failure
virtual int read_str (const char *x);
virtual int write_str (char *x) const;
long pos_id () const { return m_pos_id; }
long emp_id () const { return m_emp_id; }
};
//======================================================================
// rppAssignment - Assignment of an emp to a pos for some day(s)
class rppAssignment : public aipDemon {
long m_proj_id;
long m_pos_id;
long m_emp_id;
long m_start_yyyymmdd;
long m_end_yyyymmdd;
public:
rppAssignment () {}
rppAssignment (long a_proj_id, long a_pos_id, long a_emp_id,
long a_start_yyyymmdd, long a_end_yyyymmdd);
virtual ~rppAssignment ();
virtual long num_keys (void) const { return 3; }
virtual long key1 (void) const { return m_emp_id; }
virtual long key2 (void) const { return m_pos_id; }
virtual long key3 (void) const { return m_start_yyyymmdd;}
// returns 0 on failure
virtual int read_str (const char *x);
virtual int write_str (char *x) const;
long proj_id () const { return m_proj_id; }
long pos_id () const { return m_pos_id; }
long emp_id () const { return m_emp_id; }
long start_yyyymmdd () const { return m_start_yyyymmdd; }
long end_yyyymmdd () const { return m_end_yyyymmdd; }
};
//======================================================================
// rppEmpDayPos - historic results of solving the problem
class rppEmpDayPos : public aipDemon {
long m_emp_id;
long m_yyyymmdd;
long m_proj_id;
long m_pos_id;
public:
rppEmpDayPos () {}
rppEmpDayPos (long a_emp_id, long a_yyyymmdd,
long a_proj_id, long a_pos_id);
virtual ~rppEmpDayPos ();
virtual long num_keys (void) const { return 4; }
virtual long key1 (void) const { return m_emp_id; }
virtual long key2 (void) const { return m_yyyymmdd; }
virtual long key3 (void) const { return m_proj_id; }
virtual long key4 (void) const { return m_pos_id; }
// returns 0 on failure
virtual int read_str (const char *x);
virtual int write_str (char *x) const;
long emp_id () const { return m_emp_id; }
long yyyymmdd () const { return m_yyyymmdd; }
long proj_id () const { return m_proj_id; }
long pos_id () const { return m_pos_id; }
};
//======================================================================
// rppPosDayEmp - normalized solution data
class rppPosDayEmp : public aipDemon {
long m_proj_id;
long m_pos_id;
long m_yyyymmdd;
long m_emp_id;
public:
rppPosDayEmp (long a_proj_id, long a_pos_id,
long a_yyyymmdd, long a_emp_id);
virtual ~rppPosDayEmp ();
virtual long num_keys (void) const { return 3; }
virtual long key1 (void) const { return m_proj_id; }
virtual long key2 (void) const { return m_pos_id; }
virtual long key3 (void) const { return m_yyyymmdd; }
virtual int write_hdr (char *x) const; // returns 0 on failure
virtual int write_str (char *x) const; // returns 0 on failure
long proj_id () const { return m_proj_id; }
long pos_id () const { return m_pos_id; }
long yyyymmdd () const { return m_yyyymmdd; }
long emp_id () const { return m_emp_id; }
};
//======================================================================
// rppProjWeekEmpDay - re-ordered normalized output with week-number
class rppProjWeekEmpDay : public aipDemon {
long m_proj_id;
long m_week_num;
long m_emp_id;
long m_week_pos; // 1 to 7
long m_yyyymmdd;
long m_pos_id;
public:
rppProjWeekEmpDay ();
virtual ~rppProjWeekEmpDay ();
virtual long num_keys (void) const { return 4; }
virtual long key1 (void) const { return m_proj_id; }
virtual long key2 (void) const { return m_week_num; }
virtual long key3 (void) const { return m_emp_id; }
virtual long key4 (void) const { return m_week_pos; }
void set (long a_proj_id, long a_week_num, long a_emp_id,
long a_week_pos, long a_yyyymmdd, long a_pos_id);
long proj_id () const { return m_proj_id; }
long week_num () const { return m_week_num; }
long emp_id () const { return m_emp_id; }
long week_pos () const { return m_week_pos; }
long yyyymmdd () const { return m_yyyymmdd; }
long pos_id () const { return m_pos_id; }
};
//======================================================================
// rppProjWeek - master for one week of the problem solution
class rppProjWeek : public aipDemon {
long m_proj_id;
long m_week_num;
long m_yyyymmdd[7]; // -1 = null = past end of problem
public:
rppProjWeek () { reset(); }
virtual ~rppProjWeek () {}
// currently not storing these objects in a pandemonium
virtual long num_keys (void) const { return 2; }
virtual long key1 (void) const { return m_proj_id; }
virtual long key2 (void) const { return m_week_num; }
void set_pw (long p, long w) { m_proj_id = p; m_week_num = w; }
void set_day (long iday, long a_yyyymmdd) {
m_yyyymmdd[iday-1] = a_yyyymmdd;
}
void reset ();
virtual int write_hdr (char *x) const; // returns 0 on failure
virtual int write_hdr (FILE *opf) const; // returns 0 on failure
virtual int write_str (char *x) const; // returns 0 on failure
virtual int write (FILE *ofp) const; // returns 0 on failure
long proj_id () const { return m_proj_id; }
long week_num () const { return m_week_num; }
long yyyymmdd (long iday) const {
if (iday < 1 || iday > 7) return -1;
return m_yyyymmdd[iday-1];
}
};
//======================================================================
// rppProjWeekEmp - details for one week of the problem solution
class rppProjWeekEmp : public aipDemon {
long m_proj_id;
long m_week_num;
long m_emp_id;
long m_pos_id[7]; // -1 = null = not working that day
public:
rppProjWeekEmp () { reset(); }
virtual ~rppProjWeekEmp () {}
// currently not storing these objects in a pandemonium
// virtual long num_keys (void) const { return 3; }
// virtual long key1 (void) const { return m_proj_id; }
// virtual long key2 (void) const { return m_week_num; }
// virtual long key3 (void) const { return m_emp_id; }
void set_pwe (long p, long w, long e) {
m_proj_id = p; m_week_num = w; m_emp_id = e;
}
void set_day (long iday, long a_pos_id) {
m_pos_id[iday-1] = a_pos_id ;
}
void reset ();
virtual int write_hdr (char *x) const; // returns 0 on failure
virtual int write_hdr (FILE *ofp) const; // returns 0 on failure
virtual int write_str (char *x) const; // returns 0 on failure
virtual int write (FILE *ofp) const; // returns 0 on failure
long proj_id () const { return m_proj_id; }
long week_num () const { return m_week_num; }
long emp_id () const { return m_emp_id; }
long pos_id (long iday) const {
if (iday < 1 || iday > 7) return -1;
return m_pos_id[iday-1];
}
};
//======================================================================
// rppProbWrite - Solution-Writer for a problem
//
// Calling write():
// - opens the output file
// - calls pre_proc()
// - iterates through the problem Pos-Day-Emps, and for each:
// - calls handle_pos_day_emp()
// - calls post_proc()
// - closes the output file
//
// This class may be used for its default behavior - writing the
// solution data in the normalized form - or as a base class.
class rppProbWrite : public aipBase {
const rppProblem * m_prob;
char m_out_file_name[Max_File_Name+1];
int m_any_pos_day_emp_written;
protected:
const rppProblem * prob () const { return m_prob; }
virtual int pre_proc (FILE *ofp);
virtual int handle_pos_day_emp (FILE *ofp,
const rppPosDayEmp *pde);
virtual int post_proc (FILE *ofp);
int write_blank_line (FILE *ofp);
public:
rppProbWrite (const rppProblem *x, const char *out_file_name);
virtual ~rppProbWrite ();
int write (); // return zero on error
};
//======================================================================
// rppProbWriteWeek1 - Week-based Solution-Writer number 1
//
// m_proj_week_emp_days is the re-ordered normalized-solution-data
// with a week-number.
class rppProbWriteWeek1 : public rppProbWrite {
aipTime m_week1_start_dt; // 1st, determine this
aipPandemonium * m_proj_week_emp_days; // 2nd, reorder the data
rppProjWeek * m_proj_week;
int m_any_week_data; // 0=no
rppProjWeekEmp * m_proj_week_emp;
int m_any_emp_data; // 0=no
protected:
int is_valid () const;
void reset ();
void set_week1_start_dt ();
virtual int week_dt (aipTime x,
long *week_num, long *week_pos) const;
virtual int handle_pos_day_emp (FILE *ofp,
const rppPosDayEmp *pde);
virtual int post_proc (FILE *ofp);
virtual int set_proj_week (rppProjWeekEmpDay *x);
virtual int add_to_proj_week_emp (rppProjWeekEmpDay *x);
rppProjWeekEmpDayItr projweekempday_iterator () const;
public:
rppProbWriteWeek1 (const rppProblem *x, const char *out_file_name);
virtual ~rppProbWriteWeek1 ();
// int write() from parent
};
//======================================================================
// rppPosDayItr - Iterator for Position-Days in a Problem
class rppPosDayItr : public aipDemonItr {
public:
rppPosDayItr (aipPandemonium *p) {
set_demon_itr(p,0);
}
rppPosDayItr (const rppPosDayItr& x) {
set_demon_itr (x.pandemonium(), x.current());
}
virtual ~rppPosDayItr () {}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -