void LineSum::Compare (void) { int mode; Dtime time; Db_Header *fh; File_Itr file_itr; Sort_Key sort_key; Route_Data route_rec, *base_ptr, *alt_ptr; Route_Map_Itr route_itr, base_itr; Route_Map_Stat route_stat; Route_Map base_map, alt_map; //---- compare files ---- Show_Message ("Reading Base Route Files -- Record"); Set_Progress (); for (mode=1, file_itr = base_routes.begin (); file_itr != base_routes.end (); file_itr++, mode++) { fh = *file_itr; while (fh->Read ()) { Show_Progress (); sort_key.mode = (short) mode; //(short) fh->Get_Integer ("MODE"); sort_key.leg = (short) 1; sort_key.name = fh->Get_String ("NAME"); time = fh->Get_Time ("HEADWAY1"); route_rec.headway1 = (int) time.Minutes (); time = fh->Get_Time ("HEADWAY2"); route_rec.headway2 = (int) time.Minutes (); time = fh->Get_Time ("TTIME1"); route_rec.ttime1 = (int) time.Minutes (); time = fh->Get_Time ("TTIME2"); route_rec.ttime2 = (int) time.Minutes (); route_rec.nodes = fh->Get_Integer ("NODES"); route_rec.notes = fh->Get_String ("NOTES"); route_rec.match = 0; route_stat = base_map.insert (Route_Map_Data (sort_key, route_rec)); if (!route_stat.second) { sort_key.leg = (short) 2; route_stat = base_map.insert (Route_Map_Data (sort_key, route_rec)); } } } End_Progress (); //---- compare files ---- Show_Message ("Reading Alternative Route Files -- Record"); Set_Progress (); New_Page (); Header_Number (DIFFERENCE_REPORT); Compare_Header (); for (mode=1, file_itr = alt_routes.begin (); file_itr != alt_routes.end (); file_itr++, mode++) { fh = *file_itr; while (fh->Read ()) { Show_Progress (); sort_key.mode = (short) mode; //(short) fh->Get_Integer ("MODE"); sort_key.leg = (short) 1; sort_key.name = fh->Get_String ("NAME"); time = fh->Get_Time ("HEADWAY1"); route_rec.headway1 = (int) time.Minutes (); time = fh->Get_Time ("HEADWAY2"); route_rec.headway2 = (int) time.Minutes (); time = fh->Get_Time ("TTIME1"); route_rec.ttime1 = (int) time.Minutes (); time = fh->Get_Time ("TTIME2"); route_rec.ttime2 = (int) time.Minutes (); route_rec.nodes = fh->Get_Integer ("NODES"); route_rec.notes = fh->Get_String ("NOTES"); route_rec.match = 0; route_stat = alt_map.insert (Route_Map_Data (sort_key, route_rec)); if (!route_stat.second) { sort_key.leg = (short) 2; route_stat = alt_map.insert (Route_Map_Data (sort_key, route_rec)); } } } End_Progress (); for (route_itr = alt_map.begin (); route_itr != alt_map.end (); route_itr++) { sort_key = route_itr->first; alt_ptr = &route_itr->second; base_itr = base_map.find (route_itr->first); if (base_itr == base_map.end ()) { Print (1, String ("%3d %-12.12s") % sort_key.mode % sort_key.name); Print (0, String (" %6.1lf %6.1lf %6.1lf %6.1lf %5d %6.1lf %6.1lf %6.1lf %6.1lf %5d ") % 0 % 0 % 0 % 0 % 0 % alt_ptr->headway1 % alt_ptr->ttime1 % alt_ptr->headway2 % alt_ptr->ttime2 % alt_ptr->nodes); Print (0, alt_ptr->notes); } else { base_ptr = &base_itr->second; base_ptr->match = 1; if (base_ptr->headway1 != alt_ptr->headway1 || base_ptr->headway2 != alt_ptr->headway2 || base_ptr->ttime1 != alt_ptr->ttime1 || base_ptr->ttime2 != alt_ptr->ttime2 || base_ptr->nodes != alt_ptr->nodes) { Print (1, String ("%3d %-12.12s") % sort_key.mode % sort_key.name); Print (0, String (" %6.1lf %6.1lf %6.1lf %6.1lf %5d %6.1lf %6.1lf %6.1lf %6.1lf %5d ") % base_ptr->headway1 % base_ptr->ttime1 % base_ptr->headway2 % base_ptr->ttime2 % base_ptr->nodes % alt_ptr->headway1 % alt_ptr->ttime1 % alt_ptr->headway2 % alt_ptr->ttime2 % alt_ptr->nodes); Print (0, base_ptr->notes); } } } for (base_itr = base_map.begin (); base_itr != base_map.end (); base_itr++) { if (base_itr->second.match == 0) { sort_key = base_itr->first; base_ptr = &base_itr->second; Print (1, String ("%3d %-12.12s") % sort_key.mode % sort_key.name); Print (0, String (" %6.1lf %6.1lf %6.1lf %6.1lf %5d %6.1lf %6.1lf %6.1lf %6.1lf %5d ") % base_ptr->headway1 % base_ptr->ttime1 % base_ptr->headway2 % base_ptr->ttime2 % base_ptr->nodes % 0 % 0 % 0 % 0 % 0); Print (0, base_ptr->notes); } } Header_Number (0); }
void LineSum::Combine (int period, File_List &list, Db_Header &output) { int i, j, num_out, node, vol; String name, name_key; double freq; bool stat; Db_Header *fh; File_Itr file_itr; Sort_Key sort_key; Leg_Data leg_data; Line_Map_Stat map_stat; On_Off_Data on_off_data; Access_Key access_key; Access_Map_Stat access_stat; On_Off_Key on_off_key; On_Off_Map_Stat on_off_stat; Line_Map *map; Str_ID_Itr service_itr; if (list.size () == 0) return; if (period == 0) { name = "Peak"; map = &peak_map; } else if (period == 1) { name = "Offpeak"; map = &offpeak_map; } else { name = "Total"; map = 0; } Show_Message (String ("Reading %s Ridership Files -- Record") % name); Set_Progress (); num_out = 0; memset (&on_off_data, '\0', sizeof (on_off_data)); if (list.size () == 1) { fh = *list.begin (); while (fh->Read ()) { Show_Progress (); //---- copy fields to the output file ---- if (output.Is_Open ()) { output.Copy_Fields (*fh); output.Write (); } //---- save the data to the line map ---- if (map == 0) continue; name = fh->Get_String ("NAME"); name.Trim (); if (name.Ends_With ("-")) continue; if (name [0] == '*') { if (access_flag) { vol = fh->Get_Integer ("AB_VOL"); if (vol == 0) continue; access_key.stop = fh->Get_Integer ("A"); access_key.mode = fh->Get_Integer ("MODE"); access_key.node = fh->Get_Integer ("B"); access_stat = access_map.insert (Access_Map_Data (access_key, on_off_data)); if (period == 0) { access_stat.first->second.pk_off += vol; } else { access_stat.first->second.op_off += vol; } node = access_key.node; access_key.node = access_key.stop; access_key.stop = node; access_stat = access_map.insert (Access_Map_Data (access_key, on_off_data)); if (period == 0) { access_stat.first->second.pk_on += vol; } else { access_stat.first->second.op_on += vol; } } continue; } sort_key.mode = (short) fh->Get_Integer ("MODE"); sort_key.name = name; sort_key.leg = (short) fh->Get_Integer ("SEQ"); if (fh->Get_Integer ("STOP_A") == 0) { leg_data.a = -fh->Get_Integer ("A");; } else { leg_data.a = fh->Get_Integer ("A");; } if (fh->Get_Integer ("STOP_B") == 0) { leg_data.b = -fh->Get_Integer ("B");; } else { leg_data.b = fh->Get_Integer ("B");; } leg_data.time = (short) fh->Get_Integer ("TIME"); leg_data.dist = (short) fh->Get_Integer ("DIST"); freq = fh->Get_Double ("FREQ"); if (freq > 0.0) { leg_data.runs = 60.0 / freq; } else { leg_data.runs = 0.0; } leg_data.ab.ride = fh->Get_Integer ("AB_VOL"); leg_data.ab.on = fh->Get_Integer ("AB_BRDA"); leg_data.ab.off = fh->Get_Integer ("AB_XITB"); leg_data.ba.ride = fh->Get_Integer ("BA_VOL"); leg_data.ba.on = fh->Get_Integer ("BA_BRDB"); leg_data.ba.off = fh->Get_Integer ("BA_XITA"); if (service_flag && period < 2) { name_key = name; name_key.To_Upper (); service_itr = service_map.find (name_key); if (service_itr != service_map.end ()) { if (period == 0) { leg_data.service = service_itr->second >> 16; } else { leg_data.service = service_itr->second & 0xFFFF; } }