예제 #1
0
bool Data_Service::Get_Timing_Data (Timing_File &file, Timing_Record &timing_rec)
{
	int signal;
	Int_Map_Itr map_itr;

	Timing_Data *timing_ptr = &(timing_rec.timing_data);

	//---- process the header record ----
	
	if (!file.Nested ()) {
		timing_ptr->Timing (file.Timing ());
		if (timing_ptr->Timing () == 0) return (false);

		timing_ptr->Type (file.Type ());
		timing_ptr->Cycle (file.Cycle ());
		timing_ptr->Offset (file.Offset ());
		timing_ptr->Notes (file.Notes ());

		if (file.Version () > 40) {
			signal = file.Signal ();
			if (signal == 0) return (false);

			map_itr = signal_map.find (signal);
			if (map_itr == signal_map.end ()) {
				Warning (String ("Timing Signal %d was Not Found") % signal);
				return (false);
			}
			timing_rec.Signal (map_itr->second);
			return (true);
		}
	}
	Timing_Phase phase_rec;

	phase_rec.Phase (file.Phase ());
	phase_rec.Barrier (file.Barrier ());
	phase_rec.Ring (file.Ring ());
	phase_rec.Position (file.Position ());
	phase_rec.Min_Green (file.Min_Green ());
	phase_rec.Max_Green (file.Max_Green ());
	phase_rec.Extension (file.Extension ());
	phase_rec.Yellow (file.Yellow ());
	phase_rec.All_Red (file.All_Red ());

	if (phase_rec.Max_Green () == 0) phase_rec.Max_Green (phase_rec.Min_Green () + phase_rec.Extension ());

	timing_ptr->push_back (phase_rec);
	return (timing_rec.Signal () >= 0 || file.Version () <= 40);
}
예제 #2
0
bool SubareaNet::Get_Timing_Data (Timing_File &file, Timing_Record &data)
{
	//---- do standard processing ----

	if (Data_Service::Get_Timing_Data (file, data)) {

		//---- copy the fields to the subarea file ----

		Db_Header *new_file = System_File_Header (NEW_TIMING_PLAN);

		new_file->Copy_Fields (file);

		if (!new_file->Write (file.Nested ())) {
			Error (String ("Writing %s") % new_file->File_Type ());
		}
		ntiming++;
	}
	return (false);
}
예제 #3
0
int ArcNet::Get_Timing_Data (Timing_File &file, Timing_Data &timing_rec)
{
	int signal = Data_Service::Get_Timing_Data (file, timing_rec);

	if (signal >= 0) {
		timing_db.Copy_Fields (file);

		if (!file.Nested ()) {
			if (time_flag) {
				Signal_Data *signal_ptr = &signal_array [signal];

				Signal_Time_Itr itr;
				bool keep = false;

				for (itr = signal_ptr->begin (); itr != signal_ptr->end (); itr++) {
					if (itr->Timing () == timing_rec.Timing () && 
						itr->Start () <= time && time <= itr->End ()) {
						keep = true;
						break;
					}
				}
				if (!keep) {
					timing_rec.Timing (-1);
					return (-1);
				}
			}
			return (signal);
		}
		if (timing_rec.Timing () >= 0) {
			if (!timing_db.Add_Record ()) {
				Error ("Writing Timing Plan Database");
			}
			return (signal);
		}
	}
	return (-1);
}