Files
FileTime2/src/Core/FileTime.Core.Abstraction/Timeline/PointInTime.cs
2022-05-21 14:30:24 +02:00

41 lines
1.2 KiB
C#

namespace FileTime.Core.Timeline;
public class PointInTime
{
private readonly List<Difference> _differences;
public static readonly PointInTime Eternal = new PointInTime();
public static readonly PointInTime Present = new PointInTime();
public IReadOnlyList<Difference> Differences { get; }
private PointInTime() : this(new List<Difference>())
{
}
private PointInTime(IEnumerable<Difference> differences)
{
_differences = new List<Difference>(differences);
Differences = _differences.AsReadOnly();
}
private PointInTime(PointInTime previous, IEnumerable<Difference> differences)
: this(MergeDifferences(previous.Differences, differences))
{
}
public PointInTime WithDifferences(IEnumerable<Difference> differences) =>
new(this, differences);
private static List<Difference> MergeDifferences(IEnumerable<Difference> previouses,
IEnumerable<Difference> differences)
{
var merged = new List<Difference>();
merged.AddRange(previouses);
merged.AddRange(differences);
return merged;
}
public static PointInTime CreateEmpty() => new PointInTime();
}