// Copyright (C) 2024 Intro-Skipper contributors // SPDX-License-Identifier: GPL-3.0-only. using System; namespace IntroSkipper.Data; #pragma warning disable CA1036 // Override methods on comparable types /// /// Range of contiguous time. /// public class TimeRange : IComparable { /// /// Initializes a new instance of the class. /// public TimeRange() { Start = 0; End = 0; } /// /// Initializes a new instance of the class. /// /// Time range start. /// Time range end. public TimeRange(double start, double end) { Start = start; End = end; } /// /// Initializes a new instance of the class. /// /// Original TimeRange. public TimeRange(TimeRange original) { Start = original.Start; End = original.End; } /// /// Gets or sets the time range start (in seconds). /// public double Start { get; set; } /// /// Gets or sets the time range end (in seconds). /// public double End { get; set; } /// /// Gets the duration of this time range (in seconds). /// public double Duration => End - Start; /// /// Compare TimeRange durations. /// /// Object to compare with. /// int. public int CompareTo(object? obj) { if (obj is not TimeRange tr) { throw new ArgumentException("obj must be a TimeRange"); } return tr.Duration.CompareTo(Duration); } /// /// Tests if this TimeRange object intersects the provided TimeRange. /// /// Second TimeRange object to test. /// true if tr intersects the current TimeRange, false otherwise. public bool Intersects(TimeRange tr) { return (Start < tr.Start && tr.Start < End) || (Start < tr.End && tr.End < End); } }