53 lines
1.4 KiB
C#
53 lines
1.4 KiB
C#
namespace Buckets.Logic
|
|
{
|
|
public abstract class Container
|
|
{
|
|
private int content;
|
|
|
|
public delegate void FullEventHandler(Container container, EventArgs eventArgs);
|
|
public delegate void OverflowEventHandler(Container container, OverflowEventArgs eventArgs);
|
|
public event FullEventHandler? Full;
|
|
public event OverflowEventHandler? Overflowed;
|
|
|
|
public int Capacity { get; }
|
|
public int Content
|
|
{
|
|
get => content;
|
|
set
|
|
{
|
|
ArgumentOutOfRangeException.ThrowIfNegative(value, nameof(Content));
|
|
if (value == Capacity)
|
|
{
|
|
Full?.Invoke(this, new());
|
|
}
|
|
else if (value > Capacity)
|
|
{
|
|
Overflowed?.Invoke(this, new(value - Capacity));
|
|
}
|
|
content = Math.Min(value, Capacity);
|
|
}
|
|
}
|
|
|
|
public Container(int capacity, int content)
|
|
{
|
|
ArgumentOutOfRangeException.ThrowIfNegative(capacity, nameof(Capacity));
|
|
Capacity = capacity;
|
|
Content = content;
|
|
}
|
|
|
|
public void Fill(int amount)
|
|
{
|
|
Content += amount;
|
|
}
|
|
|
|
public void Empty(int amount)
|
|
{
|
|
Content -= amount;
|
|
}
|
|
|
|
public void Empty()
|
|
{
|
|
Content = 0;
|
|
}
|
|
}
|
|
} |