Skip to main content

distribute_shrink

Function distribute_shrink 

Source
pub fn distribute_shrink(
    items: &[ShrinkItem],
    excess: i32,
) -> Result<Vec<i32>, FlexError>
Expand description

超過分 excess を各アイテムへ按分して縮小し、最終サイズを返す。

下限(min)に達したアイテムは凍結し、残りの超過分は まだ縮める余地のあるアイテムへ再配分する(不変条件 F-3)。 全アイテムが下限に達しても超過が残る場合は、それ以上縮めない。 コンテナからはみ出すのが正しい挙動(F-4)。

引数が不正(負値)なときは黙って戻らず、エラーログを出して Err を返す。 呼び出し側は縮小を行わない(=base のまま)方向へフォールバックすること。 計算量: O(I²) 最悪 — I はフレックスアイテム数。

自動最小サイズ(min-width:auto)で下限に張り付いたアイテムを 凍結して再分配するため、1 回の反復で最低 1 個は凍結される。 反復は最大 I 回、各回 O(I)。実用上のアイテム数(数個〜数十)では問題ない。