示例#1
0
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);
}
示例#2
0
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 ());
		}
	}
}