int Data_Service::Put_Timing_Data (Timing_File &file, Signal_Data &data) { Int_Map_Itr map_itr; Timing_Itr timing_itr; Timing_Phase_Itr phase_itr; int i, num, count; Timing_Phase *phase_sort [20]; file.Signal (data.Signal ()); count = 0; for (timing_itr = data.timing_plan.begin (); timing_itr != data.timing_plan.end (); timing_itr++) { Show_Progress (); file.Timing (timing_itr->Timing ()); file.Type (timing_itr->Type ()); file.Cycle (timing_itr->Cycle ()); file.Offset (timing_itr->Offset ()); file.Phases ((int) timing_itr->size ()); file.Notes (timing_itr->Notes ()); if (!file.Write (false)) { Error (String ("Writing %s") % file.File_Type ()); } count++; num = 0; memset (phase_sort, '\0', sizeof (phase_sort)); for (phase_itr = timing_itr->begin (); phase_itr != timing_itr->end (); phase_itr++) { i = phase_itr->Phase (); if (i >= 20) continue; if (i > num) num = i; phase_sort [i] = &(*phase_itr); } for (i=1; i <= num; i++) { if (phase_sort [i] == 0) continue; file.Phase (phase_sort [i]->Phase ()); file.Barrier (phase_sort [i]->Barrier ()); file.Ring (phase_sort [i]->Ring ()); file.Position (phase_sort [i]->Position ()); file.Min_Green (phase_sort [i]->Min_Green ()); file.Max_Green (phase_sort [i]->Max_Green ()); file.Extension (phase_sort [i]->Extension ()); file.Yellow (phase_sort [i]->Yellow ()); file.All_Red (phase_sort [i]->All_Red ()); if (!file.Write (true)) { Error (String ("Writing %s") % file.File_Type ()); } count++; } } return (count); }
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); }