1010#include < yoga/numeric/Comparison.h>
1111#include < yoga/style/StyleSizeLength.h>
1212#include < unordered_set>
13+ #include < unordered_map>
14+ #include < map>
1315
1416namespace facebook ::yoga {
1517
@@ -140,6 +142,8 @@ struct TrackSizing {
140142 // https://www.w3.org/TR/css-grid-1/#algo-spanning-items
141143 void accomodateSpanningItemsCrossingContentSizedTracks (Dimension dimension) {
142144 auto & tracks = dimension == Dimension::Width ? columnTracks : rowTracks;
145+ // https://en.cppreference.com/w/cpp/container/map.html
146+ // we use map here because we want to store span in increasing order, map keys are sorted automatically in ascending order
143147 std::map<size_t , std::vector<std::pair<GridItemArea, std::vector<GridTrackSize*>>>> itemsGroupedByIncreasingSpan;
144148 for (auto & item: gridItemAreas) {
145149 auto spannedTracks = getTracksSpannedByItem (item, tracks, dimension);
@@ -153,7 +157,6 @@ struct TrackSizing {
153157 auto containerSize = dimension == Dimension::Width ? containerInnerWidth : containerInnerHeight;
154158 auto sizingMode = dimension == Dimension::Width ? widthSizingMode : heightSizingMode;
155159
156- // we need to proceed in increasing order of span, keys are automatically sorted in std::map
157160 for (const auto & [span, itemsWithTracks] : itemsGroupedByIncreasingSpan) {
158161 for (const auto & [item, spannedTracks] : itemsWithTracks) {
159162 std::vector<GridTrackSize*> intrinsicMinimumSizingFunctionTracks;
@@ -248,8 +251,10 @@ struct TrackSizing {
248251 auto containerSize = dimension == Dimension::Width ? containerInnerWidth : containerInnerHeight;
249252
250253 // 1. Set planned increase to 0 for all affected tracks
251- std::map<GridTrackSize*, float > plannedIncrease;
252- std::map<GridTrackSize*, float > itemIncurredIncrease;
254+ std::unordered_map<GridTrackSize*, float > plannedIncrease;
255+ std::unordered_map<GridTrackSize*, float > itemIncurredIncrease;
256+ plannedIncrease.reserve (affectedTracks.size ());
257+ itemIncurredIncrease.reserve (affectedTracks.size ());
253258 for (auto & track: affectedTracks) {
254259 plannedIncrease[track] = 0 .0f ;
255260 itemIncurredIncrease[track] = 0 .0f ;
@@ -356,8 +361,10 @@ struct TrackSizing {
356361 auto containerSize = dimension == Dimension::Width ? containerInnerWidth : containerInnerHeight;
357362
358363 // 1. Set planned increase to 0 for all affected tracks
359- std::map<GridTrackSize*, float > plannedIncrease;
360- std::map<GridTrackSize*, float > itemIncurredIncrease;
364+ std::unordered_map<GridTrackSize*, float > plannedIncrease;
365+ std::unordered_map<GridTrackSize*, float > itemIncurredIncrease;
366+ plannedIncrease.reserve (affectedTracks.size ());
367+ itemIncurredIncrease.reserve (affectedTracks.size ());
361368 for (auto & track: affectedTracks) {
362369 plannedIncrease[track] = 0 .0f ;
363370 itemIncurredIncrease[track] = 0 .0f ;
0 commit comments