<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[197400] trunk/Source/WebCore</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/197400">197400</a></dd>
<dt>Author</dt> <dd>rego@igalia.com</dd>
<dt>Date</dt> <dd>2016-03-01 08:54:19 -0800 (Tue, 01 Mar 2016)</dd>
</dl>

<h3>Log Message</h3>
<pre>[css-grid] Get rid of GridResolvedPosition
https://bugs.webkit.org/show_bug.cgi?id=154818

Reviewed by Darin Adler.

GridResolvedPosition was a small class just wrapping a unsigned.
In the future it should actually wrap an integer,
as we want to support implicit tracks before the explicit grid.

The class itself is not providing any benefit,
so we can get rid of it and store directly 2 unsigned in GridSpan.

This will make simpler future changes related to this task.

We keep the class just as a utility for the methods
that deal with the positions resolution.
But it should be renamed in a follow-up patch.

No new tests, no change of behavior.

* css/CSSGridTemplateAreasValue.cpp:
(WebCore::stringForPosition):
* css/CSSParser.cpp:
(WebCore::CSSParser::parseGridTemplateAreasRow):
* css/StyleBuilderConverter.h:
(WebCore::StyleBuilderConverter::createImplicitNamedGridLinesFromGridArea):
* rendering/RenderGrid.cpp:
(WebCore::RenderGrid::computeUsedBreadthOfGridTracks):
(WebCore::RenderGrid::findFlexFactorUnitSize):
(WebCore::RenderGrid::spanningItemCrossesFlexibleSizedTracks):
(WebCore::RenderGrid::resolveContentBasedTrackSizingFunctionsForNonSpanningItems):
(WebCore::RenderGrid::resolveContentBasedTrackSizingFunctionsForItems):
(WebCore::RenderGrid::insertItemIntoGrid):
(WebCore::RenderGrid::populateExplicitGridAndOrderIterator):
(WebCore::RenderGrid::createEmptyGridAreaAtSpecifiedPositionsOutsideGrid):
(WebCore::RenderGrid::placeSpecifiedMajorAxisItemsOnGrid):
(WebCore::RenderGrid::placeAutoMajorAxisItemOnGrid):
(WebCore::RenderGrid::offsetAndBreadthForPositionedChild):
(WebCore::RenderGrid::gridAreaBreadthForChild):
(WebCore::RenderGrid::gridAreaBreadthForChildIncludingAlignmentOffsets):
(WebCore::RenderGrid::columnAxisOffsetForChild):
(WebCore::RenderGrid::rowAxisOffsetForChild):
* rendering/style/GridCoordinate.h:
(WebCore::GridSpan::definiteGridSpan):
(WebCore::GridSpan::integerSpan):
(WebCore::GridSpan::resolvedInitialPosition):
(WebCore::GridSpan::resolvedFinalPosition):
(WebCore::GridSpan::GridSpanIterator::GridSpanIterator):
(WebCore::GridSpan::GridSpanIterator::operator*):
(WebCore::GridSpan::GridSpanIterator::operator++):
(WebCore::GridSpan::GridSpanIterator::operator!=):
(WebCore::GridSpan::begin):
(WebCore::GridSpan::end):
(WebCore::GridSpan::GridSpan):
* rendering/style/GridResolvedPosition.cpp:
(WebCore::resolveNamedGridLinePositionFromStyle):
(WebCore::resolveRowStartColumnStartNamedGridLinePositionAgainstOppositePosition):
(WebCore::resolveRowEndColumnEndNamedGridLinePositionAgainstOppositePosition):
(WebCore::resolveNamedGridLinePositionAgainstOppositePosition):
(WebCore::resolveGridPositionAgainstOppositePosition):
(WebCore::GridResolvedPosition::resolveGridPositionsFromAutoPlacementPosition):
(WebCore::resolveGridPositionFromStyle):
(WebCore::GridResolvedPosition::resolveGridPositionsFromStyle):
* rendering/style/GridResolvedPosition.h:
(WebCore::GridResolvedPosition::GridResolvedPosition): Deleted.
(WebCore::GridResolvedPosition::operator*): Deleted.
(WebCore::GridResolvedPosition::operator++): Deleted.
(WebCore::GridResolvedPosition::operator==): Deleted.
(WebCore::GridResolvedPosition::operator!=): Deleted.
(WebCore::GridResolvedPosition::operator&lt;): Deleted.
(WebCore::GridResolvedPosition::operator&gt;): Deleted.
(WebCore::GridResolvedPosition::operator&lt;=): Deleted.
(WebCore::GridResolvedPosition::operator&gt;=): Deleted.
(WebCore::GridResolvedPosition::toInt): Deleted.
(WebCore::GridResolvedPosition::next): Deleted.
(WebCore::GridResolvedPosition::prev): Deleted.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCorecssCSSGridTemplateAreasValuecpp">trunk/Source/WebCore/css/CSSGridTemplateAreasValue.cpp</a></li>
<li><a href="#trunkSourceWebCorecssCSSParsercpp">trunk/Source/WebCore/css/CSSParser.cpp</a></li>
<li><a href="#trunkSourceWebCorecssStyleBuilderConverterh">trunk/Source/WebCore/css/StyleBuilderConverter.h</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderGridcpp">trunk/Source/WebCore/rendering/RenderGrid.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingstyleGridCoordinateh">trunk/Source/WebCore/rendering/style/GridCoordinate.h</a></li>
<li><a href="#trunkSourceWebCorerenderingstyleGridResolvedPositioncpp">trunk/Source/WebCore/rendering/style/GridResolvedPosition.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingstyleGridResolvedPositionh">trunk/Source/WebCore/rendering/style/GridResolvedPosition.h</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (197399 => 197400)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2016-03-01 14:29:18 UTC (rev 197399)
+++ trunk/Source/WebCore/ChangeLog        2016-03-01 16:54:19 UTC (rev 197400)
</span><span class="lines">@@ -1,3 +1,82 @@
</span><ins>+2016-03-01  Manuel Rego Casasnovas  &lt;rego@igalia.com&gt;
+
+        [css-grid] Get rid of GridResolvedPosition
+        https://bugs.webkit.org/show_bug.cgi?id=154818
+
+        Reviewed by Darin Adler.
+
+        GridResolvedPosition was a small class just wrapping a unsigned.
+        In the future it should actually wrap an integer,
+        as we want to support implicit tracks before the explicit grid.
+
+        The class itself is not providing any benefit,
+        so we can get rid of it and store directly 2 unsigned in GridSpan.
+
+        This will make simpler future changes related to this task.
+
+        We keep the class just as a utility for the methods
+        that deal with the positions resolution.
+        But it should be renamed in a follow-up patch.
+
+        No new tests, no change of behavior.
+
+        * css/CSSGridTemplateAreasValue.cpp:
+        (WebCore::stringForPosition):
+        * css/CSSParser.cpp:
+        (WebCore::CSSParser::parseGridTemplateAreasRow):
+        * css/StyleBuilderConverter.h:
+        (WebCore::StyleBuilderConverter::createImplicitNamedGridLinesFromGridArea):
+        * rendering/RenderGrid.cpp:
+        (WebCore::RenderGrid::computeUsedBreadthOfGridTracks):
+        (WebCore::RenderGrid::findFlexFactorUnitSize):
+        (WebCore::RenderGrid::spanningItemCrossesFlexibleSizedTracks):
+        (WebCore::RenderGrid::resolveContentBasedTrackSizingFunctionsForNonSpanningItems):
+        (WebCore::RenderGrid::resolveContentBasedTrackSizingFunctionsForItems):
+        (WebCore::RenderGrid::insertItemIntoGrid):
+        (WebCore::RenderGrid::populateExplicitGridAndOrderIterator):
+        (WebCore::RenderGrid::createEmptyGridAreaAtSpecifiedPositionsOutsideGrid):
+        (WebCore::RenderGrid::placeSpecifiedMajorAxisItemsOnGrid):
+        (WebCore::RenderGrid::placeAutoMajorAxisItemOnGrid):
+        (WebCore::RenderGrid::offsetAndBreadthForPositionedChild):
+        (WebCore::RenderGrid::gridAreaBreadthForChild):
+        (WebCore::RenderGrid::gridAreaBreadthForChildIncludingAlignmentOffsets):
+        (WebCore::RenderGrid::columnAxisOffsetForChild):
+        (WebCore::RenderGrid::rowAxisOffsetForChild):
+        * rendering/style/GridCoordinate.h:
+        (WebCore::GridSpan::definiteGridSpan):
+        (WebCore::GridSpan::integerSpan):
+        (WebCore::GridSpan::resolvedInitialPosition):
+        (WebCore::GridSpan::resolvedFinalPosition):
+        (WebCore::GridSpan::GridSpanIterator::GridSpanIterator):
+        (WebCore::GridSpan::GridSpanIterator::operator*):
+        (WebCore::GridSpan::GridSpanIterator::operator++):
+        (WebCore::GridSpan::GridSpanIterator::operator!=):
+        (WebCore::GridSpan::begin):
+        (WebCore::GridSpan::end):
+        (WebCore::GridSpan::GridSpan):
+        * rendering/style/GridResolvedPosition.cpp:
+        (WebCore::resolveNamedGridLinePositionFromStyle):
+        (WebCore::resolveRowStartColumnStartNamedGridLinePositionAgainstOppositePosition):
+        (WebCore::resolveRowEndColumnEndNamedGridLinePositionAgainstOppositePosition):
+        (WebCore::resolveNamedGridLinePositionAgainstOppositePosition):
+        (WebCore::resolveGridPositionAgainstOppositePosition):
+        (WebCore::GridResolvedPosition::resolveGridPositionsFromAutoPlacementPosition):
+        (WebCore::resolveGridPositionFromStyle):
+        (WebCore::GridResolvedPosition::resolveGridPositionsFromStyle):
+        * rendering/style/GridResolvedPosition.h:
+        (WebCore::GridResolvedPosition::GridResolvedPosition): Deleted.
+        (WebCore::GridResolvedPosition::operator*): Deleted.
+        (WebCore::GridResolvedPosition::operator++): Deleted.
+        (WebCore::GridResolvedPosition::operator==): Deleted.
+        (WebCore::GridResolvedPosition::operator!=): Deleted.
+        (WebCore::GridResolvedPosition::operator&lt;): Deleted.
+        (WebCore::GridResolvedPosition::operator&gt;): Deleted.
+        (WebCore::GridResolvedPosition::operator&lt;=): Deleted.
+        (WebCore::GridResolvedPosition::operator&gt;=): Deleted.
+        (WebCore::GridResolvedPosition::toInt): Deleted.
+        (WebCore::GridResolvedPosition::next): Deleted.
+        (WebCore::GridResolvedPosition::prev): Deleted.
+
</ins><span class="cx"> 2016-03-01  Andreas Kling  &lt;akling@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         MemoryCache::forEachResource() should guard resources across function invocation.
</span></span></pre></div>
<a id="trunkSourceWebCorecssCSSGridTemplateAreasValuecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/CSSGridTemplateAreasValue.cpp (197399 => 197400)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/CSSGridTemplateAreasValue.cpp        2016-03-01 14:29:18 UTC (rev 197399)
+++ trunk/Source/WebCore/css/CSSGridTemplateAreasValue.cpp        2016-03-01 16:54:19 UTC (rev 197400)
</span><span class="lines">@@ -55,13 +55,13 @@
</span><span class="cx"> 
</span><span class="cx">     for (const auto&amp; it : gridAreaMap) {
</span><span class="cx">         const GridCoordinate&amp; coordinate = it.value;
</span><del>-        if (row &gt;= coordinate.rows.resolvedInitialPosition().toInt() &amp;&amp; row &lt; coordinate.rows.resolvedFinalPosition().toInt())
</del><ins>+        if (row &gt;= coordinate.rows.resolvedInitialPosition() &amp;&amp; row &lt; coordinate.rows.resolvedFinalPosition())
</ins><span class="cx">             candidates.append(it.key);
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     for (const auto&amp; it : gridAreaMap) {
</span><span class="cx">         const GridCoordinate&amp; coordinate = it.value;
</span><del>-        if (column &gt;= coordinate.columns.resolvedInitialPosition().toInt() &amp;&amp; column &lt; coordinate.columns.resolvedFinalPosition().toInt() &amp;&amp; candidates.contains(it.key))
</del><ins>+        if (column &gt;= coordinate.columns.resolvedInitialPosition() &amp;&amp; column &lt; coordinate.columns.resolvedFinalPosition() &amp;&amp; candidates.contains(it.key))
</ins><span class="cx">             return it.key;
</span><span class="cx">     }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorecssCSSParsercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/CSSParser.cpp (197399 => 197400)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/CSSParser.cpp        2016-03-01 14:29:18 UTC (rev 197399)
+++ trunk/Source/WebCore/css/CSSParser.cpp        2016-03-01 16:54:19 UTC (rev 197400)
</span><span class="lines">@@ -6245,18 +6245,18 @@
</span><span class="cx"> 
</span><span class="cx">             // The following checks test that the grid area is a single filled-in rectangle.
</span><span class="cx">             // 1. The new row is adjacent to the previously parsed row.
</span><del>-            if (rowCount != gridCoordinate.rows.resolvedFinalPosition().toInt())
</del><ins>+            if (rowCount != gridCoordinate.rows.resolvedFinalPosition())
</ins><span class="cx">                 return false;
</span><span class="cx"> 
</span><span class="cx">             // 2. The new area starts at the same position as the previously parsed area.
</span><del>-            if (currentColumn != gridCoordinate.columns.resolvedInitialPosition().toInt())
</del><ins>+            if (currentColumn != gridCoordinate.columns.resolvedInitialPosition())
</ins><span class="cx">                 return false;
</span><span class="cx"> 
</span><span class="cx">             // 3. The new area ends at the same position as the previously parsed area.
</span><del>-            if (lookAheadColumn != gridCoordinate.columns.resolvedFinalPosition().toInt())
</del><ins>+            if (lookAheadColumn != gridCoordinate.columns.resolvedFinalPosition())
</ins><span class="cx">                 return false;
</span><span class="cx"> 
</span><del>-            gridCoordinate.rows = GridSpan::definiteGridSpan(gridCoordinate.rows.resolvedInitialPosition(), gridCoordinate.rows.resolvedFinalPosition().next());
</del><ins>+            gridCoordinate.rows = GridSpan::definiteGridSpan(gridCoordinate.rows.resolvedInitialPosition(), gridCoordinate.rows.resolvedFinalPosition() + 1);
</ins><span class="cx">         }
</span><span class="cx">         currentColumn = lookAheadColumn - 1;
</span><span class="cx">     }
</span></span></pre></div>
<a id="trunkSourceWebCorecssStyleBuilderConverterh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/StyleBuilderConverter.h (197399 => 197400)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/StyleBuilderConverter.h        2016-03-01 14:29:18 UTC (rev 197399)
+++ trunk/Source/WebCore/css/StyleBuilderConverter.h        2016-03-01 16:54:19 UTC (rev 197400)
</span><span class="lines">@@ -886,12 +886,12 @@
</span><span class="cx">         GridSpan areaSpan = direction == ForRows ? area.value.rows : area.value.columns;
</span><span class="cx">         {
</span><span class="cx">             auto&amp; startVector = namedGridLines.add(area.key + &quot;-start&quot;, Vector&lt;unsigned&gt;()).iterator-&gt;value;
</span><del>-            startVector.append(areaSpan.resolvedInitialPosition().toInt());
</del><ins>+            startVector.append(areaSpan.resolvedInitialPosition());
</ins><span class="cx">             std::sort(startVector.begin(), startVector.end());
</span><span class="cx">         }
</span><span class="cx">         {
</span><span class="cx">             auto&amp; endVector = namedGridLines.add(area.key + &quot;-end&quot;, Vector&lt;unsigned&gt;()).iterator-&gt;value;
</span><del>-            endVector.append(areaSpan.resolvedFinalPosition().toInt());
</del><ins>+            endVector.append(areaSpan.resolvedFinalPosition());
</ins><span class="cx">             std::sort(endVector.begin(), endVector.end());
</span><span class="cx">         }
</span><span class="cx">     }
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderGridcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderGrid.cpp (197399 => 197400)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderGrid.cpp        2016-03-01 14:29:18 UTC (rev 197399)
+++ trunk/Source/WebCore/rendering/RenderGrid.cpp        2016-03-01 16:54:19 UTC (rev 197400)
</span><span class="lines">@@ -577,7 +577,7 @@
</span><span class="cx">                 const GridSpan span = cachedGridSpan(*gridItem, direction);
</span><span class="cx"> 
</span><span class="cx">                 // Do not include already processed items.
</span><del>-                if (i &gt; 0 &amp;&amp; span.resolvedInitialPosition().toInt() &lt;= flexibleSizedTracksIndex[i - 1])
</del><ins>+                if (i &gt; 0 &amp;&amp; span.resolvedInitialPosition() &lt;= flexibleSizedTracksIndex[i - 1])
</ins><span class="cx">                     continue;
</span><span class="cx"> 
</span><span class="cx">                 flexFraction = std::max(flexFraction, findFlexFactorUnitSize(tracks, span, direction, maxContentForChild(*gridItem, direction, sizingData.columnTracks)));
</span><span class="lines">@@ -661,8 +661,7 @@
</span><span class="cx"> 
</span><span class="cx">     double flexFactorSum = 0;
</span><span class="cx">     Vector&lt;unsigned, 8&gt; flexibleTracksIndexes;
</span><del>-    for (const auto&amp; resolvedPosition : tracksSpan) {
-        unsigned trackIndex = resolvedPosition.toInt();
</del><ins>+    for (auto trackIndex : tracksSpan) {
</ins><span class="cx">         GridTrackSize trackSize = gridTrackSize(direction, trackIndex);
</span><span class="cx">         if (!trackSize.maxTrackBreadth().isFlex())
</span><span class="cx">             leftOverSpace -= tracks[trackIndex].baseSize();
</span><span class="lines">@@ -811,7 +810,7 @@
</span><span class="cx"> bool RenderGrid::spanningItemCrossesFlexibleSizedTracks(const GridSpan&amp; itemSpan, GridTrackSizingDirection direction) const
</span><span class="cx"> {
</span><span class="cx">     for (auto trackPosition : itemSpan) {
</span><del>-        const GridTrackSize&amp; trackSize = gridTrackSize(direction, trackPosition.toInt());
</del><ins>+        const GridTrackSize&amp; trackSize = gridTrackSize(direction, trackPosition);
</ins><span class="cx">         if (trackSize.minTrackBreadth().isFlex() || trackSize.maxTrackBreadth().isFlex())
</span><span class="cx">             return true;
</span><span class="cx">     }
</span><span class="lines">@@ -865,8 +864,8 @@
</span><span class="cx"> 
</span><span class="cx"> void RenderGrid::resolveContentBasedTrackSizingFunctionsForNonSpanningItems(GridTrackSizingDirection direction, const GridSpan&amp; span, RenderBox&amp; gridItem, GridTrack&amp; track, Vector&lt;GridTrack&gt;&amp; columnTracks)
</span><span class="cx"> {
</span><del>-    const GridResolvedPosition trackPosition = span.resolvedInitialPosition();
-    GridTrackSize trackSize = gridTrackSize(direction, trackPosition.toInt());
</del><ins>+    unsigned trackPosition = span.resolvedInitialPosition();
+    GridTrackSize trackSize = gridTrackSize(direction, trackPosition);
</ins><span class="cx"> 
</span><span class="cx">     if (trackSize.hasMinContentMinTrackBreadth())
</span><span class="cx">         track.setBaseSize(std::max(track.baseSize(), minContentForChild(gridItem, direction, columnTracks)));
</span><span class="lines">@@ -1020,9 +1019,9 @@
</span><span class="cx">         sizingData.filteredTracks.shrink(0);
</span><span class="cx">         sizingData.growBeyondGrowthLimitsTracks.shrink(0);
</span><span class="cx">         LayoutUnit spanningTracksSize;
</span><del>-        for (auto&amp; trackPosition : itemSpan) {
-            const GridTrackSize&amp; trackSize = gridTrackSize(direction, trackPosition.toInt());
-            GridTrack&amp; track = (direction == ForColumns) ? sizingData.columnTracks[trackPosition.toInt()] : sizingData.rowTracks[trackPosition.toInt()];
</del><ins>+        for (auto trackPosition : itemSpan) {
+            const GridTrackSize&amp; trackSize = gridTrackSize(direction, trackPosition);
+            GridTrack&amp; track = (direction == ForColumns) ? sizingData.columnTracks[trackPosition] : sizingData.rowTracks[trackPosition];
</ins><span class="cx">             spanningTracksSize += trackSizeForTrackSizeComputationPhase(phase, track, ForbidInfinity);
</span><span class="cx">             if (!shouldProcessTrackForTrackSizeComputationPhase(phase, trackSize))
</span><span class="cx">                 continue;
</span><span class="lines">@@ -1139,11 +1138,11 @@
</span><span class="cx"> void RenderGrid::insertItemIntoGrid(RenderBox&amp; child, const GridCoordinate&amp; coordinate)
</span><span class="cx"> {
</span><span class="cx">     ASSERT(coordinate.rows.isDefinite() &amp;&amp; coordinate.columns.isDefinite());
</span><del>-    ensureGridSize(coordinate.rows.resolvedFinalPosition().toInt(), coordinate.columns.resolvedFinalPosition().toInt());
</del><ins>+    ensureGridSize(coordinate.rows.resolvedFinalPosition(), coordinate.columns.resolvedFinalPosition());
</ins><span class="cx"> 
</span><del>-    for (auto&amp; row : coordinate.rows) {
-        for (auto&amp; column : coordinate.columns)
-            m_grid[row.toInt()][column.toInt()].append(&amp;child);
</del><ins>+    for (auto row : coordinate.rows) {
+        for (auto column : coordinate.columns)
+            m_grid[row][column].append(&amp;child);
</ins><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -1205,20 +1204,20 @@
</span><span class="cx"> 
</span><span class="cx">         GridSpan rowPositions = GridResolvedPosition::resolveGridPositionsFromStyle(style(), *child, ForRows);
</span><span class="cx">         if (rowPositions.isDefinite()) {
</span><del>-            maximumRowIndex = std::max(maximumRowIndex, rowPositions.resolvedFinalPosition().toInt());
</del><ins>+            maximumRowIndex = std::max(maximumRowIndex, rowPositions.resolvedFinalPosition());
</ins><span class="cx">         } else {
</span><span class="cx">             // Grow the grid for items with a definite row span, getting the largest such span.
</span><del>-            GridSpan positions = GridResolvedPosition::resolveGridPositionsFromAutoPlacementPosition(style(), *child, ForRows, GridResolvedPosition(0));
-            maximumRowIndex = std::max(maximumRowIndex, positions.resolvedFinalPosition().toInt());
</del><ins>+            GridSpan positions = GridResolvedPosition::resolveGridPositionsFromAutoPlacementPosition(style(), *child, ForRows, 0);
+            maximumRowIndex = std::max(maximumRowIndex, positions.resolvedFinalPosition());
</ins><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         GridSpan columnPositions = GridResolvedPosition::resolveGridPositionsFromStyle(style(), *child, ForColumns);
</span><span class="cx">         if (columnPositions.isDefinite()) {
</span><del>-            maximumColumnIndex = std::max(maximumColumnIndex, columnPositions.resolvedFinalPosition().toInt());
</del><ins>+            maximumColumnIndex = std::max(maximumColumnIndex, columnPositions.resolvedFinalPosition());
</ins><span class="cx">         } else {
</span><span class="cx">             // Grow the grid for items with a definite column span, getting the largest such span.
</span><del>-            GridSpan positions = GridResolvedPosition::resolveGridPositionsFromAutoPlacementPosition(style(), *child, ForColumns, GridResolvedPosition(0));
-            maximumColumnIndex = std::max(maximumColumnIndex, positions.resolvedFinalPosition().toInt());
</del><ins>+            GridSpan positions = GridResolvedPosition::resolveGridPositionsFromAutoPlacementPosition(style(), *child, ForColumns, 0);
+            maximumColumnIndex = std::max(maximumColumnIndex, positions.resolvedFinalPosition());
</ins><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         m_gridItemCoordinate.set(child, GridCoordinate(rowPositions, columnPositions));
</span><span class="lines">@@ -1233,7 +1232,7 @@
</span><span class="cx"> {
</span><span class="cx">     GridTrackSizingDirection crossDirection = specifiedDirection == ForColumns ? ForRows : ForColumns;
</span><span class="cx">     const unsigned endOfCrossDirection = crossDirection == ForColumns ? gridColumnCount() : gridRowCount();
</span><del>-    GridSpan crossDirectionPositions = GridResolvedPosition::resolveGridPositionsFromAutoPlacementPosition(style(), gridItem, crossDirection, GridResolvedPosition(endOfCrossDirection));
</del><ins>+    GridSpan crossDirectionPositions = GridResolvedPosition::resolveGridPositionsFromAutoPlacementPosition(style(), gridItem, crossDirection, endOfCrossDirection);
</ins><span class="cx">     return std::make_unique&lt;GridCoordinate&gt;(specifiedDirection == ForColumns ? crossDirectionPositions : specifiedPositions, specifiedDirection == ForColumns ? specifiedPositions : crossDirectionPositions);
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -1251,10 +1250,10 @@
</span><span class="cx">         GridSpan majorAxisPositions = cachedGridSpan(*autoGridItem, autoPlacementMajorAxisDirection());
</span><span class="cx">         ASSERT(majorAxisPositions.isDefinite());
</span><span class="cx">         ASSERT(!cachedGridSpan(*autoGridItem, autoPlacementMinorAxisDirection()).isDefinite());
</span><del>-        GridSpan minorAxisPositions = GridResolvedPosition::resolveGridPositionsFromAutoPlacementPosition(style(), *autoGridItem, autoPlacementMinorAxisDirection(), GridResolvedPosition(0));
-        unsigned majorAxisInitialPosition = majorAxisPositions.resolvedInitialPosition().toInt();
</del><ins>+        GridSpan minorAxisPositions = GridResolvedPosition::resolveGridPositionsFromAutoPlacementPosition(style(), *autoGridItem, autoPlacementMinorAxisDirection(), 0);
+        unsigned majorAxisInitialPosition = majorAxisPositions.resolvedInitialPosition();
</ins><span class="cx"> 
</span><del>-        GridIterator iterator(m_grid, autoPlacementMajorAxisDirection(), majorAxisPositions.resolvedInitialPosition().toInt(), isGridAutoFlowDense ? 0 : minorAxisCursors.get(majorAxisInitialPosition));
</del><ins>+        GridIterator iterator(m_grid, autoPlacementMajorAxisDirection(), majorAxisPositions.resolvedInitialPosition(), isGridAutoFlowDense ? 0 : minorAxisCursors.get(majorAxisInitialPosition));
</ins><span class="cx">         std::unique_ptr&lt;GridCoordinate&gt; emptyGridArea = iterator.nextEmptyGridArea(majorAxisPositions.integerSpan(), minorAxisPositions.integerSpan());
</span><span class="cx">         if (!emptyGridArea)
</span><span class="cx">             emptyGridArea = createEmptyGridAreaAtSpecifiedPositionsOutsideGrid(*autoGridItem, autoPlacementMajorAxisDirection(), majorAxisPositions);
</span><span class="lines">@@ -1263,7 +1262,7 @@
</span><span class="cx">         insertItemIntoGrid(*autoGridItem, *emptyGridArea);
</span><span class="cx"> 
</span><span class="cx">         if (!isGridAutoFlowDense)
</span><del>-            minorAxisCursors.set(majorAxisInitialPosition, isForColumns ? emptyGridArea-&gt;rows.resolvedInitialPosition().toInt() : emptyGridArea-&gt;columns.resolvedInitialPosition().toInt());
</del><ins>+            minorAxisCursors.set(majorAxisInitialPosition, isForColumns ? emptyGridArea-&gt;rows.resolvedInitialPosition() : emptyGridArea-&gt;columns.resolvedInitialPosition());
</ins><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -1285,7 +1284,7 @@
</span><span class="cx"> void RenderGrid::placeAutoMajorAxisItemOnGrid(RenderBox&amp; gridItem, AutoPlacementCursor&amp; autoPlacementCursor)
</span><span class="cx"> {
</span><span class="cx">     ASSERT(!cachedGridSpan(gridItem, autoPlacementMajorAxisDirection()).isDefinite());
</span><del>-    GridSpan majorAxisPositions = GridResolvedPosition::resolveGridPositionsFromAutoPlacementPosition(style(), gridItem, autoPlacementMajorAxisDirection(), GridResolvedPosition(0));
</del><ins>+    GridSpan majorAxisPositions = GridResolvedPosition::resolveGridPositionsFromAutoPlacementPosition(style(), gridItem, autoPlacementMajorAxisDirection(), 0);
</ins><span class="cx"> 
</span><span class="cx">     const unsigned endOfMajorAxis = (autoPlacementMajorAxisDirection() == ForColumns) ? gridColumnCount() : gridRowCount();
</span><span class="cx">     unsigned majorAxisAutoPlacementCursor = autoPlacementMajorAxisDirection() == ForColumns ? autoPlacementCursor.second : autoPlacementCursor.first;
</span><span class="lines">@@ -1295,18 +1294,18 @@
</span><span class="cx">     GridSpan minorAxisPositions = cachedGridSpan(gridItem, autoPlacementMinorAxisDirection());
</span><span class="cx">     if (minorAxisPositions.isDefinite()) {
</span><span class="cx">         // Move to the next track in major axis if initial position in minor axis is before auto-placement cursor.
</span><del>-        if (minorAxisPositions.resolvedInitialPosition().toInt() &lt; minorAxisAutoPlacementCursor)
</del><ins>+        if (minorAxisPositions.resolvedInitialPosition() &lt; minorAxisAutoPlacementCursor)
</ins><span class="cx">             majorAxisAutoPlacementCursor++;
</span><span class="cx"> 
</span><span class="cx">         if (majorAxisAutoPlacementCursor &lt; endOfMajorAxis) {
</span><del>-            GridIterator iterator(m_grid, autoPlacementMinorAxisDirection(), minorAxisPositions.resolvedInitialPosition().toInt(), majorAxisAutoPlacementCursor);
</del><ins>+            GridIterator iterator(m_grid, autoPlacementMinorAxisDirection(), minorAxisPositions.resolvedInitialPosition(), majorAxisAutoPlacementCursor);
</ins><span class="cx">             emptyGridArea = iterator.nextEmptyGridArea(minorAxisPositions.integerSpan(), majorAxisPositions.integerSpan());
</span><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         if (!emptyGridArea)
</span><span class="cx">             emptyGridArea = createEmptyGridAreaAtSpecifiedPositionsOutsideGrid(gridItem, autoPlacementMinorAxisDirection(), minorAxisPositions);
</span><span class="cx">     } else {
</span><del>-        GridSpan minorAxisPositions = GridResolvedPosition::resolveGridPositionsFromAutoPlacementPosition(style(), gridItem, autoPlacementMinorAxisDirection(), GridResolvedPosition(0));
</del><ins>+        GridSpan minorAxisPositions = GridResolvedPosition::resolveGridPositionsFromAutoPlacementPosition(style(), gridItem, autoPlacementMinorAxisDirection(), 0);
</ins><span class="cx"> 
</span><span class="cx">         for (unsigned majorAxisIndex = majorAxisAutoPlacementCursor; majorAxisIndex &lt; endOfMajorAxis; ++majorAxisIndex) {
</span><span class="cx">             GridIterator iterator(m_grid, autoPlacementMajorAxisDirection(), majorAxisIndex, minorAxisAutoPlacementCursor);
</span><span class="lines">@@ -1314,9 +1313,9 @@
</span><span class="cx"> 
</span><span class="cx">             if (emptyGridArea) {
</span><span class="cx">                 // Check that it fits in the minor axis direction, as we shouldn't grow in that direction here (it was already managed in populateExplicitGridAndOrderIterator()).
</span><del>-                GridResolvedPosition minorAxisFinalPositionIndex = autoPlacementMinorAxisDirection() == ForColumns ? emptyGridArea-&gt;columns.resolvedFinalPosition() : emptyGridArea-&gt;rows.resolvedFinalPosition();
</del><ins>+                unsigned minorAxisFinalPositionIndex = autoPlacementMinorAxisDirection() == ForColumns ? emptyGridArea-&gt;columns.resolvedFinalPosition() : emptyGridArea-&gt;rows.resolvedFinalPosition();
</ins><span class="cx">                 const unsigned endOfMinorAxis = autoPlacementMinorAxisDirection() == ForColumns ? gridColumnCount() : gridRowCount();
</span><del>-                if (minorAxisFinalPositionIndex.toInt() &lt;= endOfMinorAxis)
</del><ins>+                if (minorAxisFinalPositionIndex &lt;= endOfMinorAxis)
</ins><span class="cx">                     break;
</span><span class="cx"> 
</span><span class="cx">                 // Discard empty grid area as it does not fit in the minor axis direction.
</span><span class="lines">@@ -1334,8 +1333,8 @@
</span><span class="cx"> 
</span><span class="cx">     m_gridItemCoordinate.set(&amp;gridItem, *emptyGridArea);
</span><span class="cx">     insertItemIntoGrid(gridItem, *emptyGridArea);
</span><del>-    autoPlacementCursor.first = emptyGridArea-&gt;rows.resolvedInitialPosition().toInt();
-    autoPlacementCursor.second = emptyGridArea-&gt;columns.resolvedInitialPosition().toInt();
</del><ins>+    autoPlacementCursor.first = emptyGridArea-&gt;rows.resolvedInitialPosition();
+    autoPlacementCursor.second = emptyGridArea-&gt;columns.resolvedInitialPosition();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> GridTrackSizingDirection RenderGrid::autoPlacementMajorAxisDirection() const
</span><span class="lines">@@ -1480,22 +1479,22 @@
</span><span class="cx"> 
</span><span class="cx">     bool startIsAuto = startPosition.isAuto()
</span><span class="cx">         || (startPosition.isNamedGridArea() &amp;&amp; GridResolvedPosition::isNonExistentNamedLineOrArea(startPosition.namedGridLine(), style(), (direction == ForColumns) ? ColumnStartSide : RowStartSide))
</span><del>-        || (positions.resolvedInitialPosition().toInt() &gt; lastTrackIndex);
</del><ins>+        || (positions.resolvedInitialPosition() &gt; lastTrackIndex);
</ins><span class="cx">     bool endIsAuto = endPosition.isAuto()
</span><span class="cx">         || (endPosition.isNamedGridArea() &amp;&amp; GridResolvedPosition::isNonExistentNamedLineOrArea(endPosition.namedGridLine(), style(), (direction == ForColumns) ? ColumnEndSide : RowEndSide))
</span><del>-        || (positions.resolvedFinalPosition().prev().toInt() &gt; lastTrackIndex);
</del><ins>+        || (positions.resolvedFinalPosition() - 1 &gt; lastTrackIndex);
</ins><span class="cx"> 
</span><del>-    GridResolvedPosition firstPosition = GridResolvedPosition(0);
-    GridResolvedPosition initialPosition = startIsAuto ? firstPosition : positions.resolvedInitialPosition();
-    GridResolvedPosition lastPosition = GridResolvedPosition(lastTrackIndex);
-    GridResolvedPosition finalPosition = endIsAuto ? lastPosition : positions.resolvedFinalPosition().prev();
</del><ins>+    unsigned firstPosition = 0;
+    unsigned initialPosition = startIsAuto ? firstPosition : positions.resolvedInitialPosition();
+    unsigned lastPosition = lastTrackIndex;
+    unsigned finalPosition = endIsAuto ? lastPosition : positions.resolvedFinalPosition() - 1;
</ins><span class="cx"> 
</span><span class="cx">     // Positioned children do not grow the grid, so we need to clamp the positions to avoid ending up outside of it.
</span><del>-    initialPosition = std::min&lt;GridResolvedPosition&gt;(initialPosition, lastPosition);
-    finalPosition = std::min&lt;GridResolvedPosition&gt;(finalPosition, lastPosition);
</del><ins>+    initialPosition = std::min(initialPosition, lastPosition);
+    finalPosition = std::min(finalPosition, lastPosition);
</ins><span class="cx"> 
</span><del>-    LayoutUnit start = startIsAuto ? LayoutUnit() : (direction == ForColumns) ?  m_columnPositions[initialPosition.toInt()] : m_rowPositions[initialPosition.toInt()];
-    LayoutUnit end = endIsAuto ? (direction == ForColumns) ? logicalWidth() : logicalHeight() : (direction == ForColumns) ?  m_columnPositions[finalPosition.next().toInt()] : m_rowPositions[finalPosition.next().toInt()];
</del><ins>+    LayoutUnit start = startIsAuto ? LayoutUnit() : (direction == ForColumns) ?  m_columnPositions[initialPosition] : m_rowPositions[initialPosition];
+    LayoutUnit end = endIsAuto ? (direction == ForColumns) ? logicalWidth() : logicalHeight() : (direction == ForColumns) ?  m_columnPositions[finalPosition + 1] : m_rowPositions[finalPosition + 1];
</ins><span class="cx"> 
</span><span class="cx">     breadth = end - start;
</span><span class="cx"> 
</span><span class="lines">@@ -1537,8 +1536,8 @@
</span><span class="cx"> {
</span><span class="cx">     const GridSpan&amp; span = cachedGridSpan(child, direction);
</span><span class="cx">     LayoutUnit gridAreaBreadth = 0;
</span><del>-    for (auto&amp; trackPosition : span)
-        gridAreaBreadth += tracks[trackPosition.toInt()].baseSize();
</del><ins>+    for (auto trackPosition : span)
+        gridAreaBreadth += tracks[trackPosition].baseSize();
</ins><span class="cx"> 
</span><span class="cx">     gridAreaBreadth += guttersSize(direction, span.integerSpan());
</span><span class="cx"> 
</span><span class="lines">@@ -1553,11 +1552,11 @@
</span><span class="cx">     const auto&amp; span = cachedGridSpan(child, direction);
</span><span class="cx">     const auto&amp; linePositions = (direction == ForColumns) ? m_columnPositions : m_rowPositions;
</span><span class="cx"> 
</span><del>-    LayoutUnit initialTrackPosition = linePositions[span.resolvedInitialPosition().toInt()];
-    LayoutUnit finalTrackPosition = linePositions[span.resolvedFinalPosition().prev().toInt()];
</del><ins>+    LayoutUnit initialTrackPosition = linePositions[span.resolvedInitialPosition()];
+    LayoutUnit finalTrackPosition = linePositions[span.resolvedFinalPosition() - 1];
</ins><span class="cx"> 
</span><span class="cx">     // Track Positions vector stores the 'start' grid line of each track, so we have to add last track's baseSize.
</span><del>-    return finalTrackPosition - initialTrackPosition + tracks[span.resolvedFinalPosition().prev().toInt()].baseSize();
</del><ins>+    return finalTrackPosition - initialTrackPosition + tracks[span.resolvedFinalPosition() - 1].baseSize();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void RenderGrid::populateGridPositions(GridSizingData&amp; sizingData)
</span><span class="lines">@@ -1836,7 +1835,7 @@
</span><span class="cx"> LayoutUnit RenderGrid::columnAxisOffsetForChild(const RenderBox&amp; child) const
</span><span class="cx"> {
</span><span class="cx">     const GridSpan&amp; rowsSpan = cachedGridSpan(child, ForRows);
</span><del>-    unsigned childStartLine = rowsSpan.resolvedInitialPosition().toInt();
</del><ins>+    unsigned childStartLine = rowsSpan.resolvedInitialPosition();
</ins><span class="cx">     LayoutUnit startOfRow = m_rowPositions[childStartLine];
</span><span class="cx">     LayoutUnit startPosition = startOfRow + marginBeforeForChild(child);
</span><span class="cx">     if (hasAutoMarginsInColumnAxis(child))
</span><span class="lines">@@ -1847,7 +1846,7 @@
</span><span class="cx">         return startPosition;
</span><span class="cx">     case GridAxisEnd:
</span><span class="cx">     case GridAxisCenter: {
</span><del>-        unsigned childEndLine = rowsSpan.resolvedFinalPosition().toInt();
</del><ins>+        unsigned childEndLine = rowsSpan.resolvedFinalPosition();
</ins><span class="cx">         LayoutUnit endOfRow = m_rowPositions[childEndLine];
</span><span class="cx">         // m_rowPositions include gutters so we need to substract them to get the actual end position for a given
</span><span class="cx">         // row (this does not have to be done for the last track as there are no more m_rowPositions after it)
</span><span class="lines">@@ -1870,7 +1869,7 @@
</span><span class="cx"> LayoutUnit RenderGrid::rowAxisOffsetForChild(const RenderBox&amp; child) const
</span><span class="cx"> {
</span><span class="cx">     const GridSpan&amp; columnsSpan = cachedGridSpan(child, ForColumns);
</span><del>-    unsigned childStartLine = columnsSpan.resolvedInitialPosition().toInt();
</del><ins>+    unsigned childStartLine = columnsSpan.resolvedInitialPosition();
</ins><span class="cx">     LayoutUnit startOfColumn = m_columnPositions[childStartLine];
</span><span class="cx">     LayoutUnit startPosition = startOfColumn + marginStartForChild(child);
</span><span class="cx">     if (hasAutoMarginsInRowAxis(child))
</span><span class="lines">@@ -1881,7 +1880,7 @@
</span><span class="cx">         return startPosition;
</span><span class="cx">     case GridAxisEnd:
</span><span class="cx">     case GridAxisCenter: {
</span><del>-        unsigned childEndLine = columnsSpan.resolvedFinalPosition().toInt();
</del><ins>+        unsigned childEndLine = columnsSpan.resolvedFinalPosition();
</ins><span class="cx">         LayoutUnit endOfColumn = m_columnPositions[childEndLine];
</span><span class="cx">         // m_columnPositions include gutters so we need to substract them to get the actual end position for a given
</span><span class="cx">         // column (this does not have to be done for the last track as there are no more m_columnPositions after it)
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingstyleGridCoordinateh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/style/GridCoordinate.h (197399 => 197400)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/style/GridCoordinate.h        2016-03-01 14:29:18 UTC (rev 197399)
+++ trunk/Source/WebCore/rendering/style/GridCoordinate.h        2016-03-01 16:54:19 UTC (rev 197400)
</span><span class="lines">@@ -49,7 +49,7 @@
</span><span class="cx"> class GridSpan {
</span><span class="cx"> public:
</span><span class="cx"> 
</span><del>-    static GridSpan definiteGridSpan(const GridResolvedPosition&amp; resolvedInitialPosition, const GridResolvedPosition&amp; resolvedFinalPosition)
</del><ins>+    static GridSpan definiteGridSpan(unsigned resolvedInitialPosition, unsigned resolvedFinalPosition)
</ins><span class="cx">     {
</span><span class="cx">         return GridSpan(resolvedInitialPosition, resolvedFinalPosition, Definite);
</span><span class="cx">     }
</span><span class="lines">@@ -67,30 +67,41 @@
</span><span class="cx">     unsigned integerSpan() const
</span><span class="cx">     {
</span><span class="cx">         ASSERT(isDefinite());
</span><del>-        return m_resolvedFinalPosition.toInt() - m_resolvedInitialPosition.toInt();
</del><ins>+        return m_resolvedFinalPosition - m_resolvedInitialPosition;
</ins><span class="cx">     }
</span><span class="cx"> 
</span><del>-    const GridResolvedPosition&amp; resolvedInitialPosition() const
</del><ins>+    unsigned resolvedInitialPosition() const
</ins><span class="cx">     {
</span><span class="cx">         ASSERT(isDefinite());
</span><span class="cx">         return m_resolvedInitialPosition;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    const GridResolvedPosition&amp; resolvedFinalPosition() const
</del><ins>+    unsigned resolvedFinalPosition() const
</ins><span class="cx">     {
</span><span class="cx">         ASSERT(isDefinite());
</span><ins>+        ASSERT(m_resolvedFinalPosition);
</ins><span class="cx">         return m_resolvedFinalPosition;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    typedef GridResolvedPosition iterator;
</del><ins>+    struct GridSpanIterator {
+        GridSpanIterator(unsigned value)
+            : value(value)
+        {
+        }
</ins><span class="cx"> 
</span><del>-    iterator begin() const
</del><ins>+        operator unsigned&amp;() { return value; }
+        unsigned operator*() const { return value; }
+
+        unsigned value;
+    };
+
+    GridSpanIterator begin() const
</ins><span class="cx">     {
</span><span class="cx">         ASSERT(isDefinite());
</span><span class="cx">         return m_resolvedInitialPosition;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    iterator end() const
</del><ins>+    GridSpanIterator end() const
</ins><span class="cx">     {
</span><span class="cx">         ASSERT(isDefinite());
</span><span class="cx">         return m_resolvedFinalPosition;
</span><span class="lines">@@ -105,16 +116,16 @@
</span><span class="cx"> 
</span><span class="cx">     enum GridSpanType {Definite, Indefinite};
</span><span class="cx"> 
</span><del>-    GridSpan(const GridResolvedPosition&amp; resolvedInitialPosition, const GridResolvedPosition&amp; resolvedFinalPosition, GridSpanType type)
-        : m_resolvedInitialPosition(std::min(resolvedInitialPosition.toInt(), kGridMaxTracks - 1))
-        , m_resolvedFinalPosition(std::min(resolvedFinalPosition.toInt(), kGridMaxTracks))
</del><ins>+    GridSpan(unsigned resolvedInitialPosition, unsigned resolvedFinalPosition, GridSpanType type)
+        : m_resolvedInitialPosition(std::min(resolvedInitialPosition, kGridMaxTracks - 1))
+        , m_resolvedFinalPosition(std::min(resolvedFinalPosition, kGridMaxTracks))
</ins><span class="cx">         , m_type(type)
</span><span class="cx">     {
</span><span class="cx">         ASSERT(resolvedInitialPosition &lt; resolvedFinalPosition);
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    GridResolvedPosition m_resolvedInitialPosition;
-    GridResolvedPosition m_resolvedFinalPosition;
</del><ins>+    unsigned m_resolvedInitialPosition;
+    unsigned m_resolvedFinalPosition;
</ins><span class="cx">     GridSpanType m_type;
</span><span class="cx"> 
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingstyleGridResolvedPositioncpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/style/GridResolvedPosition.cpp (197399 => 197400)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/style/GridResolvedPosition.cpp        2016-03-01 14:29:18 UTC (rev 197399)
+++ trunk/Source/WebCore/rendering/style/GridResolvedPosition.cpp        2016-03-01 16:54:19 UTC (rev 197400)
</span><span class="lines">@@ -116,7 +116,7 @@
</span><span class="cx">     return isColumnSide(side) ? GridResolvedPosition::explicitGridColumnCount(gridContainerStyle) : GridResolvedPosition::explicitGridRowCount(gridContainerStyle);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-static GridResolvedPosition resolveNamedGridLinePositionFromStyle(const RenderStyle&amp; gridContainerStyle, const GridPosition&amp; position, GridPositionSide side)
</del><ins>+static unsigned resolveNamedGridLinePositionFromStyle(const RenderStyle&amp; gridContainerStyle, const GridPosition&amp; position, GridPositionSide side)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(!position.namedGridLine().isNull());
</span><span class="cx"> 
</span><span class="lines">@@ -137,25 +137,25 @@
</span><span class="cx">     return it-&gt;value[namedGridLineIndex];
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-static GridSpan resolveRowStartColumnStartNamedGridLinePositionAgainstOppositePosition(const GridResolvedPosition&amp; resolvedOppositePosition, const GridPosition&amp; position, const Vector&lt;unsigned&gt;&amp; gridLines)
</del><ins>+static GridSpan resolveRowStartColumnStartNamedGridLinePositionAgainstOppositePosition(unsigned resolvedOppositePosition, const GridPosition&amp; position, const Vector&lt;unsigned&gt;&amp; gridLines)
</ins><span class="cx"> {
</span><del>-    if (!resolvedOppositePosition.toInt())
-        return GridSpan::definiteGridSpan(resolvedOppositePosition, resolvedOppositePosition.next());
</del><ins>+    if (!resolvedOppositePosition)
+        return GridSpan::definiteGridSpan(resolvedOppositePosition, resolvedOppositePosition + 1);
</ins><span class="cx"> 
</span><span class="cx">     unsigned firstLineBeforePositionIndex = 0;
</span><del>-    auto firstLineBeforePosition = std::lower_bound(gridLines.begin(), gridLines.end(), resolvedOppositePosition.toInt());
</del><ins>+    auto firstLineBeforePosition = std::lower_bound(gridLines.begin(), gridLines.end(), resolvedOppositePosition);
</ins><span class="cx">     if (firstLineBeforePosition != gridLines.end())
</span><span class="cx">         firstLineBeforePositionIndex = firstLineBeforePosition - gridLines.begin();
</span><span class="cx"> 
</span><span class="cx">     unsigned gridLineIndex = std::max&lt;int&gt;(0, firstLineBeforePositionIndex - position.spanPosition());
</span><span class="cx"> 
</span><del>-    GridResolvedPosition resolvedGridLinePosition = GridResolvedPosition(gridLines[gridLineIndex]);
</del><ins>+    unsigned resolvedGridLinePosition = gridLines[gridLineIndex];
</ins><span class="cx">     if (resolvedGridLinePosition &gt;= resolvedOppositePosition)
</span><del>-        resolvedGridLinePosition = resolvedOppositePosition.prev();
-    return GridSpan::definiteGridSpan(std::min&lt;GridResolvedPosition&gt;(resolvedGridLinePosition, resolvedOppositePosition), resolvedOppositePosition);
</del><ins>+        resolvedGridLinePosition = resolvedOppositePosition - 1;
+    return GridSpan::definiteGridSpan(std::min(resolvedGridLinePosition, resolvedOppositePosition), resolvedOppositePosition);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-static GridSpan resolveRowEndColumnEndNamedGridLinePositionAgainstOppositePosition(const GridResolvedPosition&amp; resolvedOppositePosition, const GridPosition&amp; position, const Vector&lt;unsigned&gt;&amp; gridLines)
</del><ins>+static GridSpan resolveRowEndColumnEndNamedGridLinePositionAgainstOppositePosition(unsigned resolvedOppositePosition, const GridPosition&amp; position, const Vector&lt;unsigned&gt;&amp; gridLines)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(gridLines.size());
</span><span class="cx">     unsigned firstLineAfterOppositePositionIndex = gridLines.size() - 1;
</span><span class="lines">@@ -164,13 +164,13 @@
</span><span class="cx">         firstLineAfterOppositePositionIndex = firstLineAfterOppositePosition - gridLines.begin();
</span><span class="cx"> 
</span><span class="cx">     unsigned gridLineIndex = std::min&lt;unsigned&gt;(gridLines.size() - 1, firstLineAfterOppositePositionIndex + position.spanPosition() - 1);
</span><del>-    GridResolvedPosition resolvedGridLinePosition = gridLines[gridLineIndex];
</del><ins>+    unsigned resolvedGridLinePosition = gridLines[gridLineIndex];
</ins><span class="cx">     if (resolvedGridLinePosition &lt;= resolvedOppositePosition)
</span><del>-        resolvedGridLinePosition = resolvedOppositePosition.next();
</del><ins>+        resolvedGridLinePosition = resolvedOppositePosition + 1;
</ins><span class="cx">     return GridSpan::definiteGridSpan(resolvedOppositePosition, resolvedGridLinePosition);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-static GridSpan resolveNamedGridLinePositionAgainstOppositePosition(const RenderStyle&amp; gridContainerStyle, const GridResolvedPosition&amp; resolvedOppositePosition, const GridPosition&amp; position, GridPositionSide side)
</del><ins>+static GridSpan resolveNamedGridLinePositionAgainstOppositePosition(const RenderStyle&amp; gridContainerStyle, unsigned resolvedOppositePosition, const GridPosition&amp; position, GridPositionSide side)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(position.isSpan());
</span><span class="cx">     ASSERT(!position.namedGridLine().isNull());
</span><span class="lines">@@ -183,9 +183,9 @@
</span><span class="cx">     // If there is no named grid line of that name, we resolve the position to 'auto' (which is equivalent to 'span 1' in this case).
</span><span class="cx">     // See http://lists.w3.org/Archives/Public/www-style/2013Jun/0394.html.
</span><span class="cx">     if (it == gridLinesNames.end()) {
</span><del>-        if (isStartSide(side) &amp;&amp; resolvedOppositePosition.toInt())
-            return GridSpan::definiteGridSpan(resolvedOppositePosition.prev(), resolvedOppositePosition);
-        return GridSpan::definiteGridSpan(resolvedOppositePosition, resolvedOppositePosition.next());
</del><ins>+        if (isStartSide(side) &amp;&amp; resolvedOppositePosition)
+            return GridSpan::definiteGridSpan(resolvedOppositePosition - 1, resolvedOppositePosition);
+        return GridSpan::definiteGridSpan(resolvedOppositePosition, resolvedOppositePosition + 1);
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     if (side == RowStartSide || side == ColumnStartSide)
</span><span class="lines">@@ -194,12 +194,12 @@
</span><span class="cx">     return resolveRowEndColumnEndNamedGridLinePositionAgainstOppositePosition(resolvedOppositePosition, position, it-&gt;value);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-static GridSpan resolveGridPositionAgainstOppositePosition(const RenderStyle&amp; gridContainerStyle, const GridResolvedPosition&amp; resolvedOppositePosition, const GridPosition&amp; position, GridPositionSide side)
</del><ins>+static GridSpan resolveGridPositionAgainstOppositePosition(const RenderStyle&amp; gridContainerStyle, unsigned resolvedOppositePosition, const GridPosition&amp; position, GridPositionSide side)
</ins><span class="cx"> {
</span><span class="cx">     if (position.isAuto()) {
</span><del>-        if (isStartSide(side) &amp;&amp; resolvedOppositePosition.toInt())
-            return GridSpan::definiteGridSpan(resolvedOppositePosition.prev(), resolvedOppositePosition);
-        return GridSpan::definiteGridSpan(resolvedOppositePosition, resolvedOppositePosition.next());
</del><ins>+        if (isStartSide(side) &amp;&amp; resolvedOppositePosition)
+            return GridSpan::definiteGridSpan(resolvedOppositePosition - 1, resolvedOppositePosition);
+        return GridSpan::definiteGridSpan(resolvedOppositePosition, resolvedOppositePosition + 1);
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     ASSERT(position.isSpan());
</span><span class="lines">@@ -214,17 +214,17 @@
</span><span class="cx">     // That's why the CSS span value is one more than the offset we apply.
</span><span class="cx">     unsigned positionOffset = position.spanPosition();
</span><span class="cx">     if (isStartSide(side)) {
</span><del>-        if (!resolvedOppositePosition.toInt())
-            return GridSpan::definiteGridSpan(resolvedOppositePosition, resolvedOppositePosition.next());
</del><ins>+        if (!resolvedOppositePosition)
+            return GridSpan::definiteGridSpan(resolvedOppositePosition, resolvedOppositePosition + 1);
</ins><span class="cx"> 
</span><del>-        unsigned initialResolvedPosition = std::max&lt;int&gt;(0, resolvedOppositePosition.toInt() - positionOffset);
</del><ins>+        unsigned initialResolvedPosition = std::max&lt;int&gt;(0, resolvedOppositePosition - positionOffset);
</ins><span class="cx">         return GridSpan::definiteGridSpan(initialResolvedPosition, resolvedOppositePosition);
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    return GridSpan::definiteGridSpan(resolvedOppositePosition, resolvedOppositePosition.toInt() + positionOffset);
</del><ins>+    return GridSpan::definiteGridSpan(resolvedOppositePosition, resolvedOppositePosition + positionOffset);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-GridSpan GridResolvedPosition::resolveGridPositionsFromAutoPlacementPosition(const RenderStyle&amp; gridContainerStyle, const RenderBox&amp; gridItem, GridTrackSizingDirection direction, const GridResolvedPosition&amp; resolvedInitialPosition)
</del><ins>+GridSpan GridResolvedPosition::resolveGridPositionsFromAutoPlacementPosition(const RenderStyle&amp; gridContainerStyle, const RenderBox&amp; gridItem, GridTrackSizingDirection direction, unsigned resolvedInitialPosition)
</ins><span class="cx"> {
</span><span class="cx">     GridPosition initialPosition, finalPosition;
</span><span class="cx">     adjustGridPositionsFromStyle(gridContainerStyle, gridItem, direction, initialPosition, finalPosition);
</span><span class="lines">@@ -233,7 +233,7 @@
</span><span class="cx">     // This method will only be used when both positions need to be resolved against the opposite one.
</span><span class="cx">     ASSERT(initialPosition.shouldBeResolvedAgainstOppositePosition() &amp;&amp; finalPosition.shouldBeResolvedAgainstOppositePosition());
</span><span class="cx"> 
</span><del>-    GridResolvedPosition resolvedFinalPosition = resolvedInitialPosition.next();
</del><ins>+    unsigned resolvedFinalPosition = resolvedInitialPosition + 1;
</ins><span class="cx"> 
</span><span class="cx">     if (initialPosition.isSpan())
</span><span class="cx">         return resolveGridPositionAgainstOppositePosition(gridContainerStyle, resolvedInitialPosition, initialPosition, finalSide);
</span><span class="lines">@@ -243,7 +243,7 @@
</span><span class="cx">     return GridSpan::definiteGridSpan(resolvedInitialPosition, resolvedFinalPosition);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-static GridResolvedPosition resolveGridPositionFromStyle(const RenderStyle&amp; gridContainerStyle, const GridPosition&amp; position, GridPositionSide side)
</del><ins>+static unsigned resolveGridPositionFromStyle(const RenderStyle&amp; gridContainerStyle, const GridPosition&amp; position, GridPositionSide side)
</ins><span class="cx"> {
</span><span class="cx">     switch (position.type()) {
</span><span class="cx">     case ExplicitPosition: {
</span><span class="lines">@@ -294,10 +294,10 @@
</span><span class="cx">     case SpanPosition:
</span><span class="cx">         // 'auto' and span depend on the opposite position for resolution (e.g. grid-row: auto / 1 or grid-column: span 3 / &quot;myHeader&quot;).
</span><span class="cx">         ASSERT_NOT_REACHED();
</span><del>-        return GridResolvedPosition(0);
</del><ins>+        return 0;
</ins><span class="cx">     }
</span><span class="cx">     ASSERT_NOT_REACHED();
</span><del>-    return GridResolvedPosition(0);
</del><ins>+    return 0;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> GridSpan GridResolvedPosition::resolveGridPositionsFromStyle(const RenderStyle&amp; gridContainerStyle, const RenderBox&amp; gridItem, GridTrackSizingDirection direction)
</span><span class="lines">@@ -324,13 +324,13 @@
</span><span class="cx">         return resolveGridPositionAgainstOppositePosition(gridContainerStyle, initialResolvedPosition, finalPosition, finalSide);
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    GridResolvedPosition resolvedInitialPosition = resolveGridPositionFromStyle(gridContainerStyle, initialPosition, initialSide);
-    GridResolvedPosition resolvedFinalPosition = resolveGridPositionFromStyle(gridContainerStyle, finalPosition, finalSide);
</del><ins>+    unsigned resolvedInitialPosition = resolveGridPositionFromStyle(gridContainerStyle, initialPosition, initialSide);
+    unsigned resolvedFinalPosition = resolveGridPositionFromStyle(gridContainerStyle, finalPosition, finalSide);
</ins><span class="cx"> 
</span><span class="cx">     if (resolvedInitialPosition &gt; resolvedFinalPosition)
</span><span class="cx">         std::swap(resolvedInitialPosition, resolvedFinalPosition);
</span><span class="cx">     else if (resolvedInitialPosition == resolvedFinalPosition)
</span><del>-        resolvedFinalPosition = resolvedInitialPosition.next();
</del><ins>+        resolvedFinalPosition = resolvedInitialPosition + 1;
</ins><span class="cx"> 
</span><span class="cx">     return GridSpan::definiteGridSpan(resolvedInitialPosition, std::max(resolvedInitialPosition, resolvedFinalPosition));
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingstyleGridResolvedPositionh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/style/GridResolvedPosition.h (197399 => 197400)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/style/GridResolvedPosition.h        2016-03-01 14:29:18 UTC (rev 197399)
+++ trunk/Source/WebCore/rendering/style/GridResolvedPosition.h        2016-03-01 16:54:19 UTC (rev 197400)
</span><span class="lines">@@ -46,79 +46,15 @@
</span><span class="cx">     ForRows
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-// This class represents a line index into one of the dimensions of the grid array.
-// Wraps an unsigned integer just for the purpose of knowing what we manipulate in the grid code.
</del><ins>+// Class with all the code related to grid items positions resolution.
+// TODO(rego): Rename class to GridPositionsResolver.
</ins><span class="cx"> class GridResolvedPosition {
</span><span class="cx"> public:
</span><del>-    GridResolvedPosition(unsigned position)
-        : m_integerPosition(position)
-    {
-    }
-
-    GridResolvedPosition&amp; operator*()
-    {
-        return *this;
-    }
-
-    GridResolvedPosition&amp; operator++()
-    {
-        m_integerPosition++;
-        return *this;
-    }
-
-    bool operator==(const GridResolvedPosition&amp; other) const
-    {
-        return m_integerPosition == other.m_integerPosition;
-    }
-
-    bool operator!=(const GridResolvedPosition&amp; other) const
-    {
-        return m_integerPosition != other.m_integerPosition;
-    }
-
-    bool operator&lt;(const GridResolvedPosition&amp; other) const
-    {
-        return m_integerPosition &lt; other.m_integerPosition;
-    }
-
-    bool operator&gt;(const GridResolvedPosition&amp; other) const
-    {
-        return m_integerPosition &gt; other.m_integerPosition;
-    }
-
-    bool operator&lt;=(const GridResolvedPosition&amp; other) const
-    {
-        return m_integerPosition &lt;= other.m_integerPosition;
-    }
-
-    bool operator&gt;=(const GridResolvedPosition&amp; other) const
-    {
-        return m_integerPosition &gt;= other.m_integerPosition;
-    }
-
-    unsigned toInt() const
-    {
-        return m_integerPosition;
-    }
-
-    GridResolvedPosition next() const
-    {
-        return GridResolvedPosition(m_integerPosition + 1);
-    }
-
-    GridResolvedPosition prev() const
-    {
-        return m_integerPosition ? m_integerPosition - 1 : 0;
-    }
-
-    static GridSpan resolveGridPositionsFromAutoPlacementPosition(const RenderStyle&amp;, const RenderBox&amp;, GridTrackSizingDirection, const GridResolvedPosition&amp;);
</del><ins>+    static GridSpan resolveGridPositionsFromAutoPlacementPosition(const RenderStyle&amp;, const RenderBox&amp;, GridTrackSizingDirection, unsigned);
</ins><span class="cx">     static GridSpan resolveGridPositionsFromStyle(const RenderStyle&amp;, const RenderBox&amp;, GridTrackSizingDirection);
</span><span class="cx">     static unsigned explicitGridColumnCount(const RenderStyle&amp;);
</span><span class="cx">     static unsigned explicitGridRowCount(const RenderStyle&amp;);
</span><span class="cx">     static bool isNonExistentNamedLineOrArea(const String&amp; lineName, const RenderStyle&amp;, GridPositionSide);
</span><del>-
-private:
-    unsigned m_integerPosition;
</del><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> } // namespace WebCore
</span></span></pre>
</div>
</div>

</body>
</html>