예제 #1
0
int Data_Service::Put_Connect_Data (Connect_File &file, Connect_Data &data)
{
    Dir_Data *dir_ptr;
    Link_Data *link_ptr;

    dir_ptr = &dir_array [data.Dir_Index ()];
    link_ptr = &link_array [dir_ptr->Link ()];

    file.Link (link_ptr->Link ());
    file.Dir (dir_ptr->Dir ());
    file.Lanes (Make_Lane_Range (dir_ptr, data.Low_Lane (), data.High_Lane ()));

    dir_ptr = &dir_array [data.To_Index ()];
    link_ptr = &link_array [dir_ptr->Link ()];

    file.To_Link (link_ptr->Link ());
    file.To_Lanes (Make_Lane_Range (dir_ptr, data.To_Low_Lane (), data.To_High_Lane ()));

    file.Type (data.Type ());
    file.Penalty (data.Penalty ());
    file.Speed (UnRound (data.Speed ()));
    file.Capacity (data.Capacity ());
    file.Notes (data.Notes ());

    if (!file.Write ()) {
        Error (String ("Writing %s") % file.File_Type ());
    }
    return (1);
}
예제 #2
0
int Data_Service::Put_Lane_Use_Data (Lane_Use_File &file, Lane_Use_Data &data)
{
	double rate, toll;

	Dir_Data *dir_ptr;
	Link_Data *link_ptr;
	Veh_Type_Data *veh_type_ptr;

	dir_ptr = &dir_array [data.Dir_Index ()];
	link_ptr = &link_array [dir_ptr->Link ()];

	file.Link (link_ptr->Link ());
	file.Dir (dir_ptr->Dir ());

	file.Lanes (Make_Lane_Range (dir_ptr, data.Low_Lane (), data.High_Lane ()));

	file.Use (data.Use ());
	file.Type (data.Type ());

	if (data.Min_Veh_Type () < 0) {
		file.Min_Veh_Type (0);
	} else if (veh_type_array.size () > 0) {
		veh_type_ptr = &veh_type_array [data.Min_Veh_Type ()];
		file.Min_Veh_Type (veh_type_ptr->Type ());
	} else {
		file.Min_Veh_Type (data.Min_Veh_Type ());
	}
	if (data.Max_Veh_Type () < 0) {
		file.Max_Veh_Type (0);
	} else if (veh_type_array.size () > 0) {
		veh_type_ptr = &veh_type_array [data.Max_Veh_Type ()];
		file.Max_Veh_Type (veh_type_ptr->Type ());
	} else {
		file.Max_Veh_Type (data.Max_Veh_Type ());
	}
	file.Min_Traveler (MAX (data.Min_Traveler (), 0)); 
	file.Max_Traveler (MAX (data.Max_Traveler (), 0));

	file.Start (data.Start ());
	file.End (data.End ());
	file.Length (UnRound (data.Length ()));
	file.Offset (UnRound (data.Offset ()));

	toll = UnRound (data.Toll ());
	rate = UnRound (data.Toll_Rate ());

	if (rate > 0) {
		if (Metric_Flag ()) {
			rate /= 1000.0;
		} else {
			rate /= MILETOFEET;
		}
		toll -= DTOI (rate * link_ptr->Length ());
	}
	file.Toll (DTOI (toll));
	file.Toll_Rate (rate);

	file.Min_Delay (UnRound (data.Min_Delay ()));
	file.Max_Delay (UnRound (data.Max_Delay ()));
	file.Speed (UnRound (data.Speed ()));
	file.Speed_Factor (UnRound (data.Spd_Fac ()) / 10.0);
	file.Capacity (data.Capacity ());
	file.Cap_Factor (UnRound (data.Cap_Fac ()) / 10.0);
	file.Notes (data.Notes ());

	if (!file.Write ()) {
		Error (String ("Writing %s") % file.File_Type ());
	}
	return (1);
}