Skip to content

Commit

Permalink
Merge pull request #24 from NiceOneFox/T19_Add_LIFO_BufferManager
Browse files Browse the repository at this point in the history
Close T19 Add Lifo buffer manager
  • Loading branch information
NiceOneFox authored Apr 30, 2022
2 parents d613254 + 7424331 commit b68e618
Show file tree
Hide file tree
Showing 8 changed files with 63 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ public InputParametersValidator()
RuleFor(p => p.LambdaForDevice).NotEmpty().ExclusiveBetween(0, 10000);
RuleFor(p => p.NumberOfSources).NotEmpty().ExclusiveBetween(0, 10000);
RuleFor(p => p.ModelingTime).NotEmpty().ExclusiveBetween(0, 10000);
RuleFor(p => p.SimulationType).IsInEnum();
RuleFor(p => p.BufferType).IsInEnum();
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,15 @@ public BufferManagerFactory(IServiceProvider serviceProvider)
_serviceProvider = serviceProvider;
}

public IBufferManager CreateBufferManager(SimulationType simulationType, int capacity)
public IBufferManager CreateBufferManager(BufferType bufferType, int capacity)
{
return simulationType switch
return bufferType switch
{
0 => new StandardBufferManager(_serviceProvider.GetRequiredService<IResults>(),
BufferType.FIFO => new StandardBufferManager(_serviceProvider.GetRequiredService<IResults>(),
_serviceProvider.GetRequiredService<ITimeProvider>(), capacity),
BufferType.LIFO => new LIFOBufferManager(_serviceProvider.GetRequiredService<IResults>(),
_serviceProvider.GetRequiredService<ITimeProvider>(), capacity),

_ => throw new NotImplementedException()
};
}
Expand Down
49 changes: 49 additions & 0 deletions backend/ServiceSimulation/Bll.Domain/Entities/LIFOBufferManager.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
using Bll.Domain.Interfaces;
using Bll.Domain.Models;

namespace Bll.Domain.Entities
{
public class LIFOBufferManager : IBufferManager
{
private readonly IResults _results;

private readonly ITimeProvider _time;

private readonly LinkedList<Request> _requests = new();

public readonly int Capacity = 4;

public LIFOBufferManager(IResults resultChannel, ITimeProvider time, int capacity)
{
_results = resultChannel;
_time = time;
Capacity = capacity;
}

public void Add(Request request)
{
if (_requests.Count >= Capacity)
{
var removedRequest = _requests.Last();
_requests.RemoveLast();

removedRequest.EndTime = _time.Now;
_results.Cancelled.Add(removedRequest);
}

_requests.AddFirst(request);
}

public Request Get()
{
if (IsFree()) throw new ArgumentNullException("Buffer was empty"); // TODO template string for Ex

var requestFromBuffer = _requests.First();
_requests.RemoveFirst();

return requestFromBuffer;
}

public bool IsFree() => _requests.Count == 0;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ public class StandardBufferManager : IBufferManager

private readonly LinkedList<Request> _requests = new();

public int Capacity = 4;
public readonly int Capacity = 4;

public StandardBufferManager(IResults resultChannel, ITimeProvider time, int capacity)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,5 @@ namespace Bll.Domain.Factories;

public interface IBufferManagerFactory
{
IBufferManager CreateBufferManager(SimulationType simulationType, int capacity);
IBufferManager CreateBufferManager(BufferType simulationType, int capacity);
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ public class InputParameters
public int BufferSize { get; set; } = 2;
public int AmountOfRequests { get; set; } = 40;
public double ModelingTime { get; set; } = double.MaxValue;
public SimulationType SimulationType { get; set; } = SimulationType.Standard;
public BufferType BufferType { get; set; } = BufferType.FIFO;
public double LambdaForRequests { get; set; } = 3;
public double LambdaForDevice { get; set; } = 3;
}
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ public void StartSimulation(InputParameters parameters)
});
}

var bufferManager = _bufferManagerFactory.CreateBufferManager(parameters.SimulationType, parameters.BufferSize);
var bufferManager = _bufferManagerFactory.CreateBufferManager(parameters.BufferType, parameters.BufferSize);

foreach (var source in sources) // Generate first requests that generated by sources.
{
Expand Down
5 changes: 3 additions & 2 deletions backend/ServiceSimulation/Bll.Domain/enums/SimulationType.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
namespace Api.enums;

public enum SimulationType
public enum BufferType
{
Standard = 0
FIFO = 0,
LIFO = 1
}

0 comments on commit b68e618

Please sign in to comment.