From: subversion c. n. <tra...@li...> - 2014-07-03 21:23:46
|
Revision: 1503 http://sourceforge.net/p/transims/code/1503 Author: davidroden Date: 2014-07-03 21:23:43 +0000 (Thu, 03 Jul 2014) Log Message: ----------- Added Paths: ----------- version6/branches/aecom/Transims60/IntControl/Read_Turn.cpp Removed Paths: ------------- version6/branches/aecom/Transims60/IntControl/Read_Turn.cpp Deleted: version6/branches/aecom/Transims60/IntControl/Read_Turn.cpp =================================================================== --- version6/branches/aecom/Transims60/IntControl/Read_Turn.cpp 2014-07-03 21:14:29 UTC (rev 1502) +++ version6/branches/aecom/Transims60/IntControl/Read_Turn.cpp 2014-07-03 21:23:43 UTC (rev 1503) @@ -1,122 +0,0 @@ -//********************************************************* -// Read_Turn.cpp - Read the Turn Movement File -//********************************************************* - -#include "IntControl.hpp" - -//--------------------------------------------------------- -// Read_Turn -//--------------------------------------------------------- - -void IntControl::Read_Turn (void) -{ - int i, link, n, node, dir, periods, num; - Dtime start, end; - - Link_Data *link_ptr; - Flow_Time_Array array_rec, *array_ptr; - Flow_Time_Data data_rec, *flow_ptr; - Int_Map_Itr map_itr; - Int2_Map_Itr map2_itr; - Int2_Key key; - - periods = sum_periods.Num_Periods (); - - if (turn_delay_array.size () == 0) { - num = (int) connect_array.size (); - - if (num > 0) { - turn_delay_array.assign (periods, array_rec); - - for (i=0; i < periods; i++) { - array_ptr = &turn_delay_array [i]; - array_ptr->assign (num, data_rec); - } - } - } - - //---- read the volume file ---- - - Show_Message (String ("Reading %s -- Record") % turn_file.File_Type ()); - Set_Progress (); - - while (turn_file.Read ()) { - Show_Progress (); - - node = turn_file.Node (); - if (node == 0) continue; - - map_itr = node_map.find (node); - if (map_itr == node_map.end ()) { - Error (String ("Turn Node %d was Not Found in the Node File") % node); - } - n = node; - node = map_itr->second; - - //---- identify the approach link ---- - - link = turn_file.Link (); - - map_itr = link_map.find (link); - if (map_itr == link_map.end ()) { - Error (String ("Turn Link %d was Not Found in the Link File") % link); - } - link_ptr = &link_array [map_itr->second]; - - if (link_ptr->Anode () == node) { - dir = link_ptr->BA_Dir (); - } else if (link_ptr->Bnode () == node) { - dir = link_ptr->AB_Dir (); - } else { - dir = -1; - } - if (dir < 0) { - Error (String ("Turn Link %d does Not Approach Node %d") % link_ptr->Link () % n); - } - key.first = dir; - - //---- identify the departure link ---- - - link = turn_file.To_Link (); - - map_itr = link_map.find (link); - if (map_itr == link_map.end ()) { - Error (String ("Turn Link %d was Not Found in the Link File") % link); - } - link_ptr = &link_array [map_itr->second]; - - if (link_ptr->Anode () == node) { - dir = link_ptr->AB_Dir (); - } else if (link_ptr->Bnode () == node) { - dir = link_ptr->BA_Dir (); - } else { - dir = -1; - } - if (dir < 0) { - Error (String ("Turn Link %d does Not Depart from Node %d") % link_ptr->Link () % n); - } - key.second = dir; - - //---- get the connection record ---- - - map2_itr = connect_map.find (key); - if (map2_itr == connect_map.end ()) { - Error (String ("No Connection between Link %d to %d") % turn_file.Link () % link); - } - - //---- save the volume data ---- - - start = turn_file.Start (); - end = turn_file.End (); - - i = sum_periods.Period ((start + end) / 2); - array_ptr = &turn_delay_array [i]; - flow_ptr = &array_ptr->at (map2_itr->second); - flow_ptr->Add_Flow (turn_file.Volume ()); - } - End_Progress (); - Print (2, String ("Number of %s Records = %d") % turn_file.File_Type () % Progress_Count ()); - - turn_file.Close (); -} - Added: version6/branches/aecom/Transims60/IntControl/Read_Turn.cpp =================================================================== --- version6/branches/aecom/Transims60/IntControl/Read_Turn.cpp (rev 0) +++ version6/branches/aecom/Transims60/IntControl/Read_Turn.cpp 2014-07-03 21:23:43 UTC (rev 1503) @@ -0,0 +1,134 @@ +//********************************************************* +// Read_Signals.cpp - read the signal file +//********************************************************* + +#include "IntControl.hpp" + +#include "Range_Data.hpp" + +//--------------------------------------------------------- +// Read_Signals +//--------------------------------------------------------- + +void IntControl::Read_Signal (void) +{ + int signal, node, num; + String buffer; + Strings nodes; + + Signal_Data signal_rec; + Int_Map_Itr map_itr; + Int_Map_Stat map_stat; + Int_Set_Stat set_stat; + Str_Itr str_itr; + Int_Itr node_itr; + Node_Data *node_ptr; + + //---- store the signal data ---- + + Show_Message (String ("Reading %s -- Record") % signal_file.File_Type ()); + Set_Progress (); + + num_new = num_update = 0; + + while (signal_file.Read (false)) { + Show_Progress (); + + //---- check the signal number ---- + + signal = signal_file.Signal (); + if (signal == 0) continue; + + map_itr = signal_map.find (signal); + if (map_itr != signal_map.end ()) { + if (update_flag) { + set_stat = update_signal.insert (signal); + if (!set_stat.second) { + Warning ("Duplicate Signal Number = ") << signal; + } + num_update++; + nsignal++; + } else { + Warning (String ("Signal %d Already Exists") % signal); + } + goto read_nest; + } + + //---- gather the warrant signal data ---- + + signal_rec.Clear (); + + signal_rec.Signal (signal); + signal_rec.Group (signal_file.Group ()); + + buffer = signal_file.Nodes (); + if (buffer.empty ()) goto read_nest; + + num = buffer.Parse (nodes, "|+/"); + if (num == 0) goto read_nest; + + signal_rec.nodes.reserve (num); + + for (str_itr = nodes.begin (); str_itr != nodes.end (); str_itr++) { + node = str_itr->Integer (); + if (node <= 0) break; + + map_itr = node_map.find (node); + if (map_itr == node_map.end ()) { + Warning (String ("Signal %d Node %d was Not Found") % signal_rec.Signal () % node); + continue; + } + node_ptr = &node_array [map_itr->second]; + + if (node_ptr->Control () >= 0 && signal_file.Version () > 40) { + Warning (String ("Node %d is assigned to multiple signals") % node); + continue; + } else if (node_ptr->Control () < -1) { + Warning (String ("Node %d has a Sign/Signal control conflict") % node); + continue; + } + signal_rec.nodes.push_back (map_itr->second); + } + if (signal_rec.nodes.size () == 0) goto read_nest; + + //---- insert the signal warrant ---- + + num = (int) signal_array.size (); + + map_stat = signal_map.insert (Int_Map_Data (signal, num)); + + if (!map_stat.second) { + Warning ("Duplicate Signal Number = ") << signal_rec.Signal (); + goto read_nest; + } + + //---- set the node controls ---- + + for (node_itr = signal_rec.nodes.begin (); node_itr != signal_rec.nodes.end (); node_itr++) { + node_ptr = &node_array [*node_itr]; + node_ptr->Control (num); + } + signal_array.push_back (signal_rec); + num_new++; + nsignal++; + +read_nest: + for (num = signal_file.Times (); num > 0; num--) { + if (!signal_file.Read (true)) { + Error (String ("Number of Time Records for Signal %d") % signal); + } + Show_Progress (); + } + } + End_Progress (); + + signal_file.Close (); + + Print (2, String ("Number of %s Records = %d") % signal_file.File_Type () % Progress_Count ()); + if (num_new > 0) { + Print (1, "Number of New Signal Records = ") << num_new; + } + if (num_update > 0) { + Print (1, "Number of Signal Updates = ") << num_update; + } +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |