#include "stdafx.h"
#include "general.h"
#include "math.h"
#include "SimulationParams.h"

IMPLEMENT_SERIAL(CSimulationParams, CObject, 1)



CSimulationParams::CSimulationParams():
    m_HighArrival(1),
	m_LowArrival(0.1),
	m_MediumArrival(0.5),
	m_HighDeparture(6),
	m_LowDeparture(0.4),
	m_MediumDeparture(2),
	m_NumOfCarsPow(1),
	m_WaitTimePow(1)
{
	for (int i = 0; i < NUM_OF_LANES; i++)
	{
		m_LaneArrivalArr  [i] = -1;
		m_LaneDepartureArr[i] = -1;
	}
}
void CSimulationParams::SetArrivalArray(int Rate, int PlaceInArray)
{
	switch (Rate)
	{
	case 0: m_LaneArrivalArr[PlaceInArray] = m_HighArrival;
			break;
	case 1: m_LaneArrivalArr[PlaceInArray] = m_MediumArrival;
			break;
	case 2: m_LaneArrivalArr[PlaceInArray] = m_LowArrival;
			break;
	
	}
}
void CSimulationParams::SetDepartureArray(int Rate, int PlaceInArray)
{
	switch (Rate)
	{
	case 0: m_LaneDepartureArr[PlaceInArray] = m_HighDeparture;
			break;
	case 1: m_LaneDepartureArr[PlaceInArray] = m_MediumDeparture;
			break;
	case 2: m_LaneDepartureArr[PlaceInArray] = m_LowDeparture;
			break;
	
	}
}

int    CSimulationParams::GetArrivalArray(int PlaceInArray)
{
	if (fabs(m_LaneArrivalArr[PlaceInArray] - m_HighArrival) < 0.00001 )
		return 0;
	if (fabs(m_LaneArrivalArr[PlaceInArray] - m_MediumArrival) < 0.00001 )
		return 1;
	if (fabs(m_LaneArrivalArr[PlaceInArray] - m_LowArrival) < 0.00001 )
		return 2;
	ASSERT(0);
	return -1;
}

int    CSimulationParams::GetDepartureArray( int PlaceInArray)
{
	if (fabs(m_LaneDepartureArr[PlaceInArray] - m_HighDeparture) < 0.00001 )
		return 0;
	if (fabs(m_LaneDepartureArr[PlaceInArray] - m_MediumDeparture) < 0.00001 )
		return 1;
	if (fabs(m_LaneDepartureArr[PlaceInArray] - m_LowDeparture) < 0.00001 )
		return 2;
	ASSERT(0);
	return -1;
}

void   CSimulationParams::Serialize( CArchive& archive )
{
	CObject::Serialize(archive);

    // now do the stuff for our specific class
    if( archive.IsStoring() )
    {    
		archive << m_HighArrival;
		archive << m_LowArrival;
		archive << m_MediumArrival;
		archive << m_HighDeparture;
		archive << m_LowDeparture;
		archive << m_MediumDeparture;
		for (int i = 0; i < NUM_OF_LANES; i++)
		{
			archive << m_LaneArrivalArr  [i];
			archive << m_LaneDepartureArr[i];
		}
	}
    else
	{
		archive >> m_HighArrival;
		archive >> m_LowArrival;
		archive >> m_MediumArrival;
		archive >> m_HighDeparture;
		archive >> m_LowDeparture;
		archive >> m_MediumDeparture;
		for (int i = 0; i < NUM_OF_LANES; i++)
		{
			archive >> m_LaneArrivalArr  [i];
			archive >> m_LaneDepartureArr[i];
		}
    }
	
}

