From b5094fdf056da210c6f4f9514f338050dacf659e Mon Sep 17 00:00:00 2001 From: Michael Krisper <michael.krisper@tugraz.at> Date: Tue, 12 Jul 2016 15:51:09 +0200 Subject: [PATCH] added ExtensionMethods for PortProvider-Classes --- .../VectoCore/Utils/ProviderExtensions.cs | 71 +++++++++++++++++++ VectoCore/VectoCore/VectoCore.csproj | 1 + 2 files changed, 72 insertions(+) create mode 100644 VectoCore/VectoCore/Utils/ProviderExtensions.cs diff --git a/VectoCore/VectoCore/Utils/ProviderExtensions.cs b/VectoCore/VectoCore/Utils/ProviderExtensions.cs new file mode 100644 index 0000000000..6fe13a2cb5 --- /dev/null +++ b/VectoCore/VectoCore/Utils/ProviderExtensions.cs @@ -0,0 +1,71 @@ +using System; +using TUGraz.VectoCommon.Models; +using TUGraz.VectoCore.Models.Connector.Ports; +using TUGraz.VectoCore.Models.Simulation; +using TUGraz.VectoCore.Models.SimulationComponent; +using TUGraz.VectoCore.Models.SimulationComponent.Data; +using TUGraz.VectoCore.Models.SimulationComponent.Impl; + +namespace TUGraz.VectoCore.Utils +{ + public static class ProviderExtensions + { + public static IDriver AddComponent(this IDrivingCycleInProvider prev, IDriver next) + { + prev.InPort().Connect(next.OutPort()); + return next; + } + + public static IVehicle AddComponent(this IDriverDemandInProvider prev, IVehicle next) + { + prev.InPort().Connect(next.OutPort()); + return next; + } + + public static IWheels AddComponent(this IFvInProvider prev, IWheels next) + { + prev.InPort().Connect(next.OutPort()); + return next; + } + + public static IPowerTrainComponent AddComponent(this ITnInProvider prev, IPowerTrainComponent next) + { + prev.InPort().Connect(next.OutPort()); + return next; + } + + public static IPowerTrainComponent AddComponent(this IPowerTrainComponent prev, IPowerTrainComponent next) + { + prev.InPort().Connect(next.OutPort()); + return next; + } + + public static CombustionEngine AddComponent(this IPowerTrainComponent prev, CombustionEngine next) + { + prev.InPort().Connect(next.OutPort()); + + var clutch = prev as IClutch; + if (clutch != null) + next.IdleController.RequestPort = clutch.IdleControlPort; + return next; + } + + public static IPowerTrainComponent AddRetarderAndGearbox(this IPowerTrainComponent prev, RetarderData data, + IGearbox gearbox, + IVehicleContainer container) + { + switch (data.Type) { + case RetarderType.Primary: + return prev.AddComponent(new Retarder(container, data.LossMap, data.Ratio)).AddComponent(gearbox); + case RetarderType.Secondary: + return prev.AddComponent(gearbox).AddComponent(new Retarder(container, data.LossMap, data.Ratio)); + case RetarderType.None: + return prev.AddComponent(new DummyRetarder(container)).AddComponent(gearbox); + case RetarderType.LossesIncludedInTransmission: + return prev.AddComponent(new DummyRetarder(container)).AddComponent(gearbox); + default: + throw new ArgumentOutOfRangeException(); + } + } + } +} \ No newline at end of file diff --git a/VectoCore/VectoCore/VectoCore.csproj b/VectoCore/VectoCore/VectoCore.csproj index 914257afd0..c395834226 100644 --- a/VectoCore/VectoCore/VectoCore.csproj +++ b/VectoCore/VectoCore/VectoCore.csproj @@ -131,6 +131,7 @@ <Compile Include="Models\Connector\Ports\Impl\Response.cs" /> <Compile Include="Models\Connector\Ports\IFvPort.cs" /> <Compile Include="Models\Connector\Ports\ITnPort.cs" /> + <Compile Include="Utils\ProviderExtensions.cs" /> <Compile Include="Models\Declaration\AirDrag.cs" /> <Compile Include="Models\Declaration\Fan.cs" /> <Compile Include="Models\Declaration\HVAC.cs" /> -- GitLab