Refactor GridPlanner to improve slot fitting logic and enhance code clarity
Reintroduced the Fit method in the GridPlanner class with detailed documentation, clarifying the logic for determining slot duration based on available space. This change enhances the readability and maintainability of the code while ensuring accurate slot management during grid generation.
This commit is contained in:
@@ -360,6 +360,19 @@ public sealed class GridPlanner(
|
|||||||
PlanRun Run
|
PlanRun Run
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Длина слота: желаемая, но не больше свободного места. Остаток короче минимального слота
|
||||||
|
/// приклеивается к текущему — огрызок в сетке читается как ошибка, а не как решение. Остаток
|
||||||
|
/// побольше достанется следующему слоту, и под него подберут группу подходящей длины.
|
||||||
|
/// </summary>
|
||||||
|
private static int Fit(int wanted, int available)
|
||||||
|
{
|
||||||
|
var duration = Math.Min(Round(wanted), available);
|
||||||
|
return available - duration < MinSlotMinutes
|
||||||
|
? available
|
||||||
|
: Math.Max(duration, MinSlotMinutes);
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Длина слота и число единиц в нём. Блок из N единиц занимает ровно столько, сколько эти
|
/// Длина слота и число единиц в нём. Блок из N единиц занимает ровно столько, сколько эти
|
||||||
/// единицы идут, — округление до пяти минут; хвост короче минимального слота приклеивается
|
/// единицы идут, — округление до пяти минут; хвост короче минимального слота приклеивается
|
||||||
@@ -461,19 +474,6 @@ public sealed class GridPlanner(
|
|||||||
private static int RepeatMinutes(GridBand band) =>
|
private static int RepeatMinutes(GridBand band) =>
|
||||||
band.BlockMinutes > 0 ? band.BlockMinutes : 120;
|
band.BlockMinutes > 0 ? band.BlockMinutes : 120;
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Длина слота: желаемая, но не больше свободного места. Остаток короче минимального слота
|
|
||||||
/// приклеивается к текущему — огрызок в сетке читается как ошибка, а не как решение. Остаток
|
|
||||||
/// побольше достанется следующему слоту, и под него подберут группу подходящей длины.
|
|
||||||
/// </summary>
|
|
||||||
private static int Fit(int wanted, int available)
|
|
||||||
{
|
|
||||||
var duration = Math.Min(Round(wanted), available);
|
|
||||||
return available - duration < MinSlotMinutes
|
|
||||||
? available
|
|
||||||
: Math.Max(duration, MinSlotMinutes);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static int Round(int minutes) =>
|
private static int Round(int minutes) =>
|
||||||
Math.Max(SlotStepMinutes, minutes / SlotStepMinutes * SlotStepMinutes);
|
Math.Max(SlotStepMinutes, minutes / SlotStepMinutes * SlotStepMinutes);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user