public CompetitionRunTimings UpdateFinishTimeFrom(TimeSpanWithAccuracy?finishTime)
        {
            RecordedTime startTime = CreateBestPossibleStartTime();

            CompetitionRunTimings timings = Timings ?? new CompetitionRunTimings(startTime);

            timings = timings.ChangeFinishTime(TryCreateRecordedTime(startTime, finishTime));

            return(timings);
        }
        public CompetitionRunTimings UpdateTimingsFrom(TimeSpanWithAccuracy?intermediateTime1, TimeSpanWithAccuracy?intermediateTime2,
                                                       TimeSpanWithAccuracy?intermediateTime3, TimeSpanWithAccuracy?finishTime)
        {
            RecordedTime startTime = CreateBestPossibleStartTime();

            CompetitionRunTimings timings = Timings ?? new CompetitionRunTimings(startTime);

            // @formatter:keep_existing_linebreaks true

            timings = timings
                      .ChangeIntermediateTime1(TryCreateRecordedTime(startTime, intermediateTime1))
                      .ChangeIntermediateTime2(TryCreateRecordedTime(startTime, intermediateTime2))
                      .ChangeIntermediateTime3(TryCreateRecordedTime(startTime, intermediateTime3))
                      .ChangeFinishTime(TryCreateRecordedTime(startTime, finishTime));

            // @formatter:keep_existing_linebreaks restore

            return(timings);
        }
 private static bool FinishTimesAreEqual(CompetitionRunTimings firstTimings, CompetitionRunTimings secondTimings)
 {
     return(firstTimings.FinishTime == secondTimings.FinishTime);
 }