forked from FaresAtef1/Shipping-Company
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathSpecialTruck.cpp
88 lines (76 loc) · 1.72 KB
/
SpecialTruck.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#include "SpecialTruck.h"
#include "Queue.h"
int SpecialTruck::TruckCapacity = 0;
int SpecialTruck::Speed = 0;
int SpecialTruck::CheckUpDuration = 0;
SpecialTruck::SpecialTruck(int DI) :Truck(DI)
{
}
SpecialTruck::SpecialTruck()
{
}
void SpecialTruck::SetStaticMembers(int TC, int S, int CUD)
{
TruckCapacity = TC;
Speed = S;
CheckUpDuration = CUD;
}
void SpecialTruck::SetDeliveryInterval()
{
int LoadHours = 0;
int FurthestDis;
Queue<Cargo*> CargosTemp;
Cargo* CTemp;
while (CargosQueue.Dequeue(CTemp))
{
LoadHours += CTemp->GetLoadUnloadTime();
CargosTemp.Enqueue(CTemp);
}
if (CTemp)
FurthestDis = CTemp->GetDeliveryDistance();
while (CargosTemp.Dequeue(CTemp))
{
CargosQueue.enqueue(CTemp, CTemp->CalcPrio());
}
DeliveryInterval = 2.0 * FurthestDis / Speed + LoadHours;
TruckActiveTime += FurthestDis / Speed + 2 * LoadHours;
ReturningHours = FurthestDis / Speed ;
}
int SpecialTruck::GetTruckCapacity()
{
return TruckCapacity;
}
int SpecialTruck::GetSpeed()
{
return Speed;
}
int SpecialTruck::GetCheckUpDuration()
{
return CheckUpDuration;
}
void SpecialTruck::SetEndOfCheckUp(Time EOCU)
{
EndOfCheckUp = EOCU.hour + EOCU.day * 24 + CheckUpDuration;
}
bool SpecialTruck::IsFull()
{
return (CargosQueue.GetCount() == TruckCapacity);
}
void SpecialTruck::SetCargosCDT()
{
Queue<Cargo*> TempQueue;
Cargo* Temp;
int SumOfUnloadTimes = 0;
int CDTHrs = 0;
while (CargosQueue.Dequeue(Temp))
{
TempQueue.Enqueue(Temp);
SumOfUnloadTimes += Temp->GetLoadUnloadTime();
CDTHrs = MovingTime.day * 24 + MovingTime.hour + Temp->GetDeliveryDistance() / Speed + SumOfUnloadTimes;
Temp->SetCDT(Time(CDTHrs % 24, CDTHrs / 24));
}
while (TempQueue.Dequeue(Temp))
{
CargosQueue.enqueue(Temp, Temp->CalcPrio());
}
}