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)。実用上のアイテム数(数個〜数十)では問題ない。