void Data_Service::Read_Events (void) { Event_File *file = (Event_File *) System_File_Handle (EVENT); int num; Event_Data event_rec; Event_Index event_index; Event_Map_Stat map_stat; //---- store the event data ---- Show_Message (String ("Reading %s -- Record") % file->File_Type ()); Set_Progress (); Initialize_Events (*file); while (file->Read ()) { Show_Progress (); event_rec.Clear (); if (Get_Event_Data (*file, event_rec)) { event_rec.Get_Event_Index (event_index); map_stat = event_map.insert (Event_Map_Data (event_index, (int) event_array.size ())); if (!map_stat.second) { Warning (String ("Duplicate Event Record = %d-%d-%d-%d-%d") % event_index.Household () % event_index.Person () % event_index.Tour () % event_index.Trip () % event_index.Event ()); continue; } else { event_array.push_back (event_rec); } } } End_Progress (); file->Close (); Print (2, String ("Number of %s Records = %d") % file->File_Type () % Progress_Count ()); num = (int) event_array.size (); if (num && num != Progress_Count ()) { Print (1, String ("Number of %d Data Records = %d") % file->File_ID () % num); } if (num > 0) System_Data_True (EVENT); }
void Data_Service::Initialize_Events (Event_File &file) { int percent = System_Data_Reserve (EVENT); if (event_array.capacity () == 0 && percent > 0) { int num = file.Num_Records (); if (percent != 100) { num = (int) ((double) num * percent / 100.0); } if (num > 1) { event_array.reserve (num); if (num > (int) event_array.capacity ()) Mem_Error (file.File_ID ()); } } }