From 2df2500b778db1893f46f364338e26bf344e6f37 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=A1clav=20P=C5=99ib=C3=ADk?= Date: Thu, 23 Oct 2025 21:19:32 +0200 Subject: [PATCH] impl: ldp find gaps fitting --- .../appointmentplanner/LocalDayPlanImpl.java | 26 +++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/assignment/src/main/java/appointmentplanner/LocalDayPlanImpl.java b/assignment/src/main/java/appointmentplanner/LocalDayPlanImpl.java index 9e929cc..fb0be1c 100644 --- a/assignment/src/main/java/appointmentplanner/LocalDayPlanImpl.java +++ b/assignment/src/main/java/appointmentplanner/LocalDayPlanImpl.java @@ -89,10 +89,32 @@ public class LocalDayPlanImpl implements LocalDayPlan { throw new UnsupportedOperationException("Unimplemented method 'findMatchingFreeSlotsOfDuration'"); } + private CustomLinkedList traverseGapsFitting(Duration toFind, CustomLinkedList goodSlots, + Instant startOfBefore, Iterator iterator) { + + boolean hasNext = iterator.hasNext(); + + Appointment nextAppointment = hasNext ? iterator.next() : null; + + TimeSlot possibleFittingSlot = new TimeSlotImpl(hasNext ? nextAppointment.end() : startOfDay(), + startOfBefore == null ? endOfDay() : startOfBefore); + + if (possibleFittingSlot.fits(toFind)) { + goodSlots.add(possibleFittingSlot); + } + + if (!hasNext) { + return goodSlots; + } + + return traverseGapsFitting(toFind, goodSlots, nextAppointment.start(), iterator); + + } + @Override public List findGapsFitting(Duration duration) { - // TODO Auto-generated method stub - throw new UnsupportedOperationException("Unimplemented method 'findGapsFitting'"); + return new CustomListToJavaBinding<>( + traverseGapsFitting(duration, new CustomLinkedListImpl<>(), null, timeline.iterator())); } @Override