Virtual U.org
Get Personal Training on VU Today
    
Top shadow
 
 register/help
User Name:

Password:

Ofacures.cpp Source File
Main Page   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Namespace Members   Compound Members   File Members  

Ofacures.cpp

Go to the documentation of this file.
00001 //Filename    : OFACURES.CPP
00002 //Description : Faculty Resource object
00003 
00004 #include <OSYS.H>
00005 #include <OGAMESET.H>
00006 #include <OFACURES.H>
00007 
00008 //---------- #define constant ------------//
00009 
00010 #define FACULTY_TEMPLATE_DB   "FAC_TMPL"
00011 
00012 //------- Begin of function FacultyRes::FacultyRes -----------//
00013 #if(GAME_VERSION>=200)
00014 enum {
00015     REPORT_TYPE_DEPARTMENT_PROFILE1,
00016     REPORT_TYPE_DEPARTMENT_PROFILE2,
00017     REPORT_TYPE_DEPARTMENT_ACTIVITIES,
00018     REPORT_TYPE_DEPARTMENT_RESEARCH,
00019     REPORT_TYPE_DEPARTMENT_HIRING,
00020     REPORT_TYPE_DEPARTMENT_DIRECTORY,
00021     REPORT_TYPE_DEPARTMENT_TURNOVER,
00022     REPORT_TYPE_INSTITUTION_PROFILE1,
00023     REPORT_TYPE_INSTITUTION_PROFILE2,
00024     REPORT_TYPE_INSTITUTION_ACTIVITIES,
00025     REPORT_TYPE_INSTITUTION_RESEARCH,
00026     REPORT_TYPE_INSTITUTION_SALARY,
00027     REPORT_TYPE_INSTITUTION_PROMOTION,
00028     REPORT_TYPE_INSTITUTION_TURNOVER,
00029 };
00030 #else
00031 enum {
00032     REPORT_TYPE_DEPARTMENT_PROFILE1,
00033     REPORT_TYPE_DEPARTMENT_PROFILE2,
00034     REPORT_TYPE_DEPARTMENT_ACTIVITIES,
00035     REPORT_TYPE_DEPARTMENT_RESEARCH,
00036     REPORT_TYPE_DEPARTMENT_DIRECTORY,
00037     REPORT_TYPE_DEPARTMENT_HIRING,
00038     REPORT_TYPE_INSTITUTION_PROFILE1,
00039     REPORT_TYPE_INSTITUTION_PROFILE2,
00040     REPORT_TYPE_INSTITUTION_ACTIVITIES,
00041     REPORT_TYPE_INSTITUTION_RESEARCH,
00042     REPORT_TYPE_INSTITUTION_SALARY,
00043     REPORT_TYPE_INSTITUTION_PROMOTION,
00044 };
00045 #endif
00046 
00047 FacultyRes::FacultyRes() {
00048     memset( this, 0, sizeof(FacultyRes) );
00049 }
00050 
00051 //--------- End of function FacultyRes::FacultyRes -----------//
00052 
00053 //---------- Begin of function FacultyRes::init -----------//
00057 void FacultyRes::init() {
00058     deinit();
00059 
00060     //------- load database information --------//
00061 
00062     memset( this, 0, sizeof(FacultyRes) );
00063 
00064     load_template();
00065 
00066     init_flag=1;
00067     current_report_type=REPORT_TYPE_INSTITUTION_PROFILE1;
00068 }
00069 
00070 //---------- End of function FacultyRes::init -----------//
00071 
00072 //---------- Begin of function FacultyRes::deinit -----------//
00073 
00074 void FacultyRes::deinit() {
00075     if( init_flag ) {
00076         if( faculty_template_count > 0 )
00077             free_template();
00078 
00079         // ##### begin Gilbert 20/04/2001 #####///
00080         summary_report_deinit();                      // free memory allocated by faculty report
00081         // ##### end Gilbert 20/04/2001 #####///
00082         init_flag=0;
00083     }
00084 }
00085 
00086 //---------- End of function FacultyRes::deinit -----------//
00087 
00088 //------- Begin of function FacultyRes::load_template -------//
00090 void FacultyRes::load_template() {
00091     err_when( faculty_template_count != 0 );
00092 
00093     FacultyTemplateRec    *templateRec;
00094     FacultyTemplate       *templatePtr;
00095     Database        *dbTemplate = game_set.open_db(FACULTY_TEMPLATE_DB);
00096 
00097     faculty_template_count = (short) dbTemplate->rec_count();
00098 
00099     err_when( faculty_template_array );             // to prevent double allocations
00100 
00101     faculty_template_array = (FacultyTemplate*) mem_add( sizeof(FacultyTemplate)*faculty_template_count );
00102 
00103     //------ read in faculty information array -------//
00104 
00105     memset( faculty_template_array, 0, sizeof(FacultyTemplate) * faculty_template_count );
00106 
00107     for( int i=0 ; i<faculty_template_count ; i++ ) {
00108         templateRec  = (FacultyTemplateRec*) dbTemplate->read(i+1);
00109         templatePtr = faculty_template_array+i;
00110 
00111         //##### fred 0730 #####//
00112 
00113         templatePtr->template_code = templateRec->template_code[0];
00114 
00115         err_when( templatePtr->template_code < FIRST_TEMPLATE_CODE || templatePtr->template_code > 'E' );
00116 
00117         templatePtr->rank_age_group_id = (char) (m.atoi( templateRec->rank_age_group_id, 9 ) - 1);
00118 
00119         err_when( templatePtr->rank_age_group_id > LAST_RANK_AGE_GROUP || templatePtr->rank_age_group_id < FIRST_RANK_AGE_GROUP );
00120 
00121         //----- multipliers -----//
00122         templatePtr->rank_age_multiplier = (float) m.atof(templateRec->rank_age_multiplier, 9);
00123         templatePtr->female_multiplier= (float) m.atof(templateRec->female_multiplier, 9);
00124         templatePtr->minority_multiplier= (float) m.atof(templateRec->minority_multiplier, 9);
00125 
00126         templatePtr->overall_salary_multiplier = (float) m.atof(templateRec->overall_salary_multiplier, 9);
00127         templatePtr->female_salary_multiplier = (float) m.atof(templateRec->female_salary_multiplier, 9);
00128         templatePtr->minority_salary_multiplier = (float) m.atof(templateRec->minority_salary_multiplier, 9);
00129 
00130         templatePtr->talent_teaching_multiplier = (float) m.atof(templateRec->talent_teaching_multiplier, 9);
00131         templatePtr->talent_scholarship_multiplier = (float) m.atof(templateRec->talent_scholarship_multiplier, 9);
00132         templatePtr->talent_research_multiplier = (float) m.atof(templateRec->talent_research_multiplier, 9);
00133 
00134         templatePtr->normal_teaching_load_multiplier = (float) m.atof(templateRec->normal_teaching_load_multiplier, 9);
00135 
00136         for( int j=0 ; j<DISCRETIONARY_TYPE_COUNT ; j++ ) {
00137             templatePtr->discretionary_time_pref[j] = (char) (int) (m.atof(templateRec->discretionary_time_pref[j], 9) * 100);
00138 
00139             err_when(templatePtr->discretionary_time_pref[j] < 0);
00140         }
00141     }
00142 }
00143 
00144 //--------- End of function FacultyRes::load_template ---------//
00145 
00146 //------- Begin of function FacultyRes::free_template -------//
00148 void FacultyRes::free_template() {
00149     err_when( faculty_template_count == 0 );
00150 
00151     mem_del(faculty_template_array);
00152     faculty_template_count = 0;
00153 }
00154 
00155 //--------- End of function FacultyRes::free_template ---------//
00156 
00157 //------- Begin of function FacultyRes::get_faculty_template -------//
00167 FacultyTemplate* FacultyRes::get_faculty_template(char* templateCode, int rankAgeGroup) {
00168 #ifdef READ_OLD_DB
00169     static FacultyTemplate resultTemplate;
00170 
00171     //--- when two templates are given, the result is a combination of the two ----//
00172 
00173     if( templateCode[1] >= FIRST_TEMPLATE_CODE &&
00174         templateCode[1] < FIRST_TEMPLATE_CODE + MAX_RANK_AGE_GROUP ) {
00175         FacultyTemplate* facultyTemplate1 = faculty_template_array +
00176             (templateCode[0] - FIRST_TEMPLATE_CODE) * MAX_RANK_AGE_GROUP + rankAgeGroup;
00177 
00178         FacultyTemplate* facultyTemplate2 = faculty_template_array +
00179             (templateCode[1] - FIRST_TEMPLATE_CODE) * MAX_RANK_AGE_GROUP + rankAgeGroup;
00180 
00181         //------------------------------------------//
00182 
00183         float r = (float) m.random(100) / (float) 100;
00184 
00185         resultTemplate.rank_age_multiplier = (char) ( float(facultyTemplate1->rank_age_multiplier) * r / (float)1
00186                                                       + float(facultyTemplate2->rank_age_multiplier) * ((float)1-r) / (float)1 );
00187 
00188         resultTemplate.female_multiplier = facultyTemplate1->female_multiplier * r / (float)1
00189             + facultyTemplate2->female_multiplier * ((float)1-r) / (float)1;
00190 
00191         resultTemplate.minority_multiplier = facultyTemplate1->minority_multiplier * r / (float)1
00192             + facultyTemplate2->minority_multiplier * ((float)1-r) / (float)1;
00193 
00194         resultTemplate.overall_salary_multiplier = facultyTemplate1->overall_salary_multiplier * r / (float)1
00195             + facultyTemplate2->overall_salary_multiplier * ((float)1-r) / (float)1;
00196 
00197         resultTemplate.female_salary_multiplier = facultyTemplate1->female_salary_multiplier * r / (float)1
00198             + facultyTemplate2->female_salary_multiplier * ((float)1-r) / (float)1;
00199 
00200         resultTemplate.minority_salary_multiplier = facultyTemplate1->minority_salary_multiplier * r / (float)1
00201             + facultyTemplate2->minority_salary_multiplier * ((float)1-r) / (float)1;
00202 
00203         resultTemplate.talent_teaching_multiplier = facultyTemplate1->talent_teaching_multiplier * r / (float)1
00204             + facultyTemplate2->talent_teaching_multiplier * ((float)1-r) / (float)1;
00205 
00206         resultTemplate.talent_scholarship_multiplier = facultyTemplate1->talent_scholarship_multiplier * r / (float)1
00207             + facultyTemplate2->talent_scholarship_multiplier * ((float)1-r) / (float)1;
00208 
00209         resultTemplate.talent_research_multiplier = facultyTemplate1->talent_research_multiplier * r / (float)1
00210             + facultyTemplate2->talent_research_multiplier * ((float)1-r) / (float)1;
00211 
00212         resultTemplate.normal_teaching_load_multiplier= facultyTemplate1->normal_teaching_load_multiplier* r / (float)1
00213             + facultyTemplate2->normal_teaching_load * ((float)1-r) / (float)1;
00214 
00215         //-------------- discretionary time ---------------//
00216 
00217         for( int i=0 ; i<DISCRETIONARY_TYPE_COUNT ; i++ ) {
00218             resultTemplate.discretionary_time_pref[i] =
00219                 char( (float)facultyTemplate1->discretionary_time_pref[i] * r / (float)1
00220                       + (float)facultyTemplate2->discretionary_time_pref[i] * ((float)1-r) / (float)1 );
00221         }
00222 
00223         return &resultTemplate;
00224     }
00225     else                                            // there is just one template requested, return it now.
00226 #endif
00227 
00228         int offset = templateCode[0] - FIRST_TEMPLATE_CODE;
00229     err_when( offset < 0 || offset >= faculty_template_count );
00230     err_when( rankAgeGroup < 0 || rankAgeGroup >= MAX_RANK_AGE_GROUP );
00231 
00232     return faculty_template_array + offset * MAX_RANK_AGE_GROUP + rankAgeGroup;
00233 }
00234 
00235 //--------- End of function FacultyRes::get_faculty_template ---------//

Generated on Fri Aug 23 01:37:33 2002 for VirtualU by doxygen1.2.17