Skip to content

Commit a8e9d9b

Browse files
committed
Refactored garbage generators
More garbage generators Some more
1 parent c9abcd2 commit a8e9d9b

File tree

7 files changed

+76
-39
lines changed

7 files changed

+76
-39
lines changed

Source/Orts.Formats.Msts/SignalConfigurationFile.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -444,17 +444,22 @@ public class SignalFunction : IEquatable<SignalFunction>
444444

445445
public readonly string Name;
446446
public readonly MstsSignalFunction MstsFunction;
447+
readonly int HashCode;
447448

448449
public SignalFunction(MstsSignalFunction mstsFunction)
449450
{
450451
Name = mstsFunction.ToString();
451452
MstsFunction = mstsFunction;
453+
454+
HashCode = Name.GetHashCode() ^ MstsFunction.GetHashCode();
452455
}
453456

454457
public SignalFunction(string name, MstsSignalFunction mstsFunction)
455458
{
456459
Name = name;
457460
MstsFunction = mstsFunction;
461+
462+
HashCode = Name.GetHashCode() ^ MstsFunction.GetHashCode();
458463
}
459464

460465
public override string ToString()
@@ -505,7 +510,7 @@ public bool Equals(SignalFunction other)
505510

506511
public override int GetHashCode()
507512
{
508-
return Name.GetHashCode() ^ MstsFunction.GetHashCode();
513+
return HashCode;
509514
}
510515
}
511516
#endregion

Source/Orts.Simulation/Simulation/RollingStocks/SubSystems/TrainControlSystem.cs

Lines changed: 27 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,12 @@
2222
using System.Collections.Generic;
2323
using System.Diagnostics;
2424
using System.IO;
25-
using System.Linq;
2625
using Orts.Common;
2726
using Orts.Formats.Msts;
2827
using Orts.Parsers.Msts;
2928
using Orts.Simulation.Physics;
3029
using Orts.Simulation.RollingStocks.SubSystems.PowerSupplies;
30+
using Orts.Simulation.Signalling;
3131
using ORTS.Common;
3232
using ORTS.Scripting.Api;
3333
using ORTS.Scripting.Api.ETCS;
@@ -648,7 +648,6 @@ SignalFeatures NextGenericSignalFeatures(string signalFunctionTypeName, int item
648648
{
649649
case Train.TrainObjectItem.TRAINOBJECTTYPE.SIGNAL:
650650
case Train.TrainObjectItem.TRAINOBJECTTYPE.SPEED_SIGNAL:
651-
{
652651
var playerTrainSignalList = Locomotive.Train.PlayerTrainSignals[dir][function];
653652
if (itemSequenceIndex > playerTrainSignalList.Count - 1)
654653
goto Exit; // no n-th signal available
@@ -670,29 +669,37 @@ SignalFeatures NextGenericSignalFeatures(string signalFunctionTypeName, int item
670669
aspect = (Aspect)Locomotive.Train.signalRef.TranslateToTCSAspect(trainSignal.SignalObject.this_sig_lr(function));
671670
}
672671

673-
var functionHead = trainSignal.SignalObject.SignalHeads.Find(head => head.Function == function);
672+
var functionHead = default(SignalHead);
673+
foreach (var head in trainSignal.SignalObject.SignalHeads)
674+
if (head.Function == function)
675+
functionHead = head;
674676
signalTypeName = functionHead.SignalTypeName;
675-
if (functionHead.signalType.DrawStates.Any(d => d.Value.Index == functionHead.draw_state))
677+
foreach (var key in functionHead.signalType.DrawStates.Keys)
676678
{
677-
drawStateName = functionHead.signalType.DrawStates.First(d => d.Value.Index == functionHead.draw_state).Value.Name;
679+
if (functionHead.signalType.DrawStates[key].Index == functionHead.draw_state)
680+
drawStateName = functionHead.signalType.DrawStates[key].Name;
681+
break;
678682
}
679683
textAspect = functionHead?.TextSignalAspect ?? "";
680684
break;
681-
}
682685
case Train.TrainObjectItem.TRAINOBJECTTYPE.SPEEDPOST:
683-
{
684-
var playerTrainSpeedpostList = Locomotive.Train.PlayerTrainSpeedposts[dir].Where(x => !x.IsWarning).ToList();
685-
if (itemSequenceIndex > playerTrainSpeedpostList.Count - 1)
686-
goto Exit; // no n-th speedpost available
687-
var trainSpeedpost = playerTrainSpeedpostList[itemSequenceIndex];
688-
if (trainSpeedpost.DistanceToTrainM > maxDistanceM)
689-
goto Exit; // the requested speedpost is too distant
690-
691-
// All OK, we can retrieve the data for the required speedpost;
692-
distanceM = trainSpeedpost.DistanceToTrainM;
693-
speedLimitMpS = trainSpeedpost.AllowedSpeedMpS;
686+
var j = 0;
687+
for (var i = 0; i < Locomotive.Train.PlayerTrainSpeedposts[dir].Count; i++)
688+
{
689+
if (Locomotive.Train.PlayerTrainSpeedposts[dir][i].IsWarning)
690+
continue;
691+
if (itemSequenceIndex == j++)
692+
{
693+
var trainSpeedpost = Locomotive.Train.PlayerTrainSpeedposts[dir][i];
694+
if (trainSpeedpost.DistanceToTrainM <= maxDistanceM)
695+
{
696+
distanceM = trainSpeedpost.DistanceToTrainM;
697+
speedLimitMpS = trainSpeedpost.AllowedSpeedMpS;
698+
}
699+
break;
700+
}
701+
}
694702
break;
695-
}
696703
}
697704

698705
Exit:
@@ -1249,7 +1256,7 @@ private void UpdateETCSPlanning()
12491256
float maxDistanceAheadM = 0;
12501257
ETCSStatus.SpeedTargets.Clear();
12511258
ETCSStatus.SpeedTargets.Add(new PlanningTarget(0, CurrentSpeedLimitMpS));
1252-
foreach (int i in Enumerable.Range(0, 5))
1259+
for (int i = 0; i < 5; i++)
12531260
{
12541261
maxDistanceAheadM = NextSignalDistanceM(i);
12551262
if (NextSignalAspect(i) == Aspect.Stop || NextSignalAspect(i) == Aspect.None) break;
@@ -1258,7 +1265,7 @@ private void UpdateETCSPlanning()
12581265
}
12591266
float prevDist = 0;
12601267
float prevSpeed = 0;
1261-
foreach (int i in Enumerable.Range(0, 10))
1268+
for (int i = 0; i < 10; i++)
12621269
{
12631270
float distanceM = NextPostDistanceM(i);
12641271
if (distanceM >= maxDistanceAheadM) break;

Source/Orts.Simulation/Simulation/Signalling/SIGSCRfile.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -197,8 +197,9 @@ public bool SH_process_StatementBlock(SignalHead thisHead, ArrayList Statements,
197197

198198
// loop through all lines
199199

200-
foreach (object scriptstat in Statements)
200+
for (int i = 0; i < Statements.Count; i++)
201201
{
202+
object scriptstat = Statements[i];
202203

203204
// process statement lines
204205

@@ -1553,8 +1554,9 @@ public bool SH_processConditionStatement(SignalHead thisHead, ArrayList thisCSta
15531554
bool termnegate = false;
15541555
SignalScripts.SCRAndOr condstring = SignalScripts.SCRAndOr.NONE;
15551556

1556-
foreach (object thisCond in thisCStatList)
1557+
for (int i = 0; i < thisCStatList.Count; i++)
15571558
{
1559+
object thisCond = thisCStatList[i];
15581560

15591561
// single condition : process
15601562

Source/Orts.Simulation/Simulation/Signalling/SignalObject.cs

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -580,15 +580,21 @@ public void setSignalDefaultNextSignal()
580580
/// </summary>
581581
public bool isSignalNormal()
582582
{
583-
return SignalHeads.Any(sigHead => sigHead.Function == SignalFunction.NORMAL);
583+
for (int i = 0; i < SignalHeads.Count; i++)
584+
if (SignalHeads[i].Function == SignalFunction.NORMAL)
585+
return true;
586+
return false;
584587
}
585588

586589
/// <summary>
587590
/// isORTSSignalType : Returns true if at least one signal head is of required type
588591
/// </summary>
589592
public bool isORTSSignalType(SignalFunction function)
590593
{
591-
return SignalHeads.Any(sigHead => function == sigHead.Function);
594+
for (int i = 0; i < SignalHeads.Count; i++)
595+
if (SignalHeads[i].Function == function)
596+
return true;
597+
return false;
592598
}
593599

594600
/// <summary>
@@ -1791,15 +1797,17 @@ public void StateUpdate()
17911797
if (holdState == HoldState.ManualApproach || holdState == HoldState.ManualLock || holdState == HoldState.ManualPass) return;
17921798
}
17931799

1794-
foreach (SignalHead sigHead in SignalHeads.Where(sigHead => sigHead.Function == SignalFunction.NORMAL))
1800+
for (int i = 0; i < SignalHeads.Count; i++)
17951801
{
1796-
sigHead.Update();
1802+
if (SignalHeads[i].Function == SignalFunction.NORMAL)
1803+
SignalHeads[i].Update();
17971804
}
17981805

17991806
// next, update all other heads
1800-
foreach (SignalHead sigHead in SignalHeads.Where(sigHead => sigHead.Function != SignalFunction.NORMAL))
1807+
for (int i = 0; i < SignalHeads.Count; i++)
18011808
{
1802-
sigHead.Update();
1809+
if (SignalHeads[i].Function != SignalFunction.NORMAL)
1810+
SignalHeads[i].Update();
18031811
}
18041812

18051813
}

Source/RunActivity/Viewer3D/Materials.cs

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -205,8 +205,14 @@ public void Mark()
205205

206206
public void Mark(Texture2D texture)
207207
{
208-
if (Textures.ContainsValue(texture))
209-
TextureMarks[Textures.First(kvp => kvp.Value == texture).Key] = true;
208+
foreach (var key in Textures.Keys)
209+
{
210+
if (Textures[key] == texture)
211+
{
212+
TextureMarks[key] = true;
213+
break;
214+
}
215+
}
210216
}
211217

212218
public void Sweep()
@@ -425,12 +431,13 @@ public void Mark()
425431

426432
public void Mark(Material material)
427433
{
428-
foreach (var path in from kvp in Materials
429-
where kvp.Value == material
430-
select kvp.Key)
434+
foreach (var key in Materials.Keys)
431435
{
432-
MaterialMarks[path] = true;
433-
break;
436+
if (Materials[key] == material)
437+
{
438+
MaterialMarks[key] = true;
439+
break;
440+
}
434441
}
435442
}
436443

Source/RunActivity/Viewer3D/RenderFrame.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -658,8 +658,10 @@ public void Sort()
658658
var renderItemComparer = new RenderItem.Comparer(CameraLocation);
659659
foreach (var sequence in RenderItems)
660660
{
661-
foreach (var sequenceMaterial in sequence.Where(kvp => kvp.Value.Count > 0))
661+
foreach (var sequenceMaterial in sequence)
662662
{
663+
if (sequenceMaterial.Value.Count == 0)
664+
continue;
663665
if (sequenceMaterial.Key != DummyBlendedMaterial)
664666
continue;
665667
sequenceMaterial.Value.Sort(renderItemComparer);

Source/RunActivity/Viewer3D/Shapes.cs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -94,8 +94,14 @@ public void Mark()
9494

9595
public void Mark(SharedShape shape)
9696
{
97-
if (Shapes.ContainsValue(shape))
98-
ShapeMarks[Shapes.First(kvp => kvp.Value == shape).Key] = true;
97+
foreach (var key in Shapes.Keys)
98+
{
99+
if (Shapes[key] == shape)
100+
{
101+
ShapeMarks[key] = true;
102+
break;
103+
}
104+
}
99105
}
100106

101107
public void Sweep()

0 commit comments

Comments
 (0)