Add a Target struct for mapfold_reduce_into call

This commit is contained in:
Simon Sapin 2019-12-03 01:00:17 +01:00
parent cfdd23ac16
commit 78bfa45eab

View file

@ -157,25 +157,29 @@ impl BlockContainer {
builder.end_ongoing_inline_formatting_context(); builder.end_ongoing_inline_formatting_context();
} }
let mut contains_floats = builder.contains_floats; type Intermediate<Node> = IntermediateBlockLevelBox<Node>;
#[derive(Default)]
struct Target {
contains_floats: ContainsFloats,
}
let mut target = Target {
contains_floats: builder.contains_floats,
};
let request_content_sizes = false; // FIXME let request_content_sizes = false; // FIXME
let container = BlockContainer::BlockLevelBoxes( let iter = builder.block_level_boxes.into_par_iter();
builder let iter = iter.mapfold_reduce_into(
.block_level_boxes &mut target,
.into_par_iter() |target, (intermediate, box_slot): (Intermediate<_>, BoxSlot<'_>)| {
.mapfold_reduce_into( let (block_level_box, box_contains_floats) =
&mut contains_floats, intermediate.finish(context, request_content_sizes);
|contains_floats, (intermediate, box_slot): (IntermediateBlockLevelBox<_>, BoxSlot<'_>)| { target.contains_floats |= box_contains_floats;
let (block_level_box, box_contains_floats) = intermediate.finish(context, request_content_sizes);
*contains_floats |= box_contains_floats;
box_slot.set(LayoutBox::BlockLevel(block_level_box.clone())); box_slot.set(LayoutBox::BlockLevel(block_level_box.clone()));
block_level_box block_level_box
}, },
|left, right| *left |= right, |left, right| left.contains_floats |= right.contains_floats,
)
.collect(),
); );
(container, contains_floats) let container = BlockContainer::BlockLevelBoxes(iter.collect());
(container, target.contains_floats)
} }
} }