Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(640)

Unified Diff: third_party/WebKit/Source/core/style/GridCoordinate.h

Issue 1459373002: [css-grid] Refactor GridSpan to avoid pointers (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Patch for landing Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/core/style/GridCoordinate.h
diff --git a/third_party/WebKit/Source/core/style/GridCoordinate.h b/third_party/WebKit/Source/core/style/GridCoordinate.h
index 3a1e5b62cf4d986fe31f295da21fc936c0034400..2573be64add41d41397694a569a622cf9ad9b9fc 100644
--- a/third_party/WebKit/Source/core/style/GridCoordinate.h
+++ b/third_party/WebKit/Source/core/style/GridCoordinate.h
@@ -49,37 +49,43 @@ const size_t kGridMaxTracks = 1000000;
struct GridSpan {
USING_FAST_MALLOC(GridSpan);
public:
- static PassOwnPtr<GridSpan> create(const GridResolvedPosition& resolvedInitialPosition, const GridResolvedPosition& resolvedFinalPosition)
+
+ static GridSpan definiteGridSpan(const GridResolvedPosition& resolvedInitialPosition, const GridResolvedPosition& resolvedFinalPosition)
+ {
+ return GridSpan(resolvedInitialPosition, resolvedFinalPosition, Definite);
+ }
+
+ static GridSpan indefiniteGridSpan()
{
- return adoptPtr(new GridSpan(resolvedInitialPosition, resolvedFinalPosition));
+ return GridSpan(0, 1, Indefinite);
}
- static PassOwnPtr<GridSpan> createWithSpanAgainstOpposite(const GridResolvedPosition& resolvedOppositePosition, const GridPosition& position, GridPositionSide side)
+ static GridSpan definiteGridSpanWithSpanAgainstOpposite(const GridResolvedPosition& resolvedOppositePosition, const GridPosition& position, GridPositionSide side)
{
size_t positionOffset = position.spanPosition();
if (side == ColumnStartSide || side == RowStartSide) {
if (resolvedOppositePosition == 0)
- return GridSpan::create(resolvedOppositePosition, resolvedOppositePosition.next());
+ return GridSpan::definiteGridSpan(resolvedOppositePosition, resolvedOppositePosition.next());
GridResolvedPosition initialResolvedPosition = GridResolvedPosition(std::max<int>(0, resolvedOppositePosition.toInt() - positionOffset));
- return GridSpan::create(initialResolvedPosition, resolvedOppositePosition);
+ return GridSpan::definiteGridSpan(initialResolvedPosition, resolvedOppositePosition);
}
- return GridSpan::create(resolvedOppositePosition, GridResolvedPosition(resolvedOppositePosition.toInt() + positionOffset));
+ return GridSpan::definiteGridSpan(resolvedOppositePosition, GridResolvedPosition(resolvedOppositePosition.toInt() + positionOffset));
}
- static PassOwnPtr<GridSpan> createWithNamedSpanAgainstOpposite(const GridResolvedPosition& resolvedOppositePosition, const GridPosition& position, GridPositionSide side, const Vector<size_t>& gridLines)
+ static GridSpan definiteGridSpanWithNamedSpanAgainstOpposite(const GridResolvedPosition& resolvedOppositePosition, const GridPosition& position, GridPositionSide side, const Vector<size_t>& gridLines)
{
if (side == RowStartSide || side == ColumnStartSide)
- return createWithInitialNamedSpanAgainstOpposite(resolvedOppositePosition, position, gridLines);
+ return definiteGridSpanWithInitialNamedSpanAgainstOpposite(resolvedOppositePosition, position, gridLines);
- return createWithFinalNamedSpanAgainstOpposite(resolvedOppositePosition, position, gridLines);
+ return definiteGridSpanWithFinalNamedSpanAgainstOpposite(resolvedOppositePosition, position, gridLines);
}
- static PassOwnPtr<GridSpan> createWithInitialNamedSpanAgainstOpposite(const GridResolvedPosition& resolvedOppositePosition, const GridPosition& position, const Vector<size_t>& gridLines)
+ static GridSpan definiteGridSpanWithInitialNamedSpanAgainstOpposite(const GridResolvedPosition& resolvedOppositePosition, const GridPosition& position, const Vector<size_t>& gridLines)
{
if (resolvedOppositePosition == 0)
- return GridSpan::create(resolvedOppositePosition, resolvedOppositePosition.next());
+ return GridSpan::definiteGridSpan(resolvedOppositePosition, resolvedOppositePosition.next());
size_t firstLineBeforeOppositePositionIndex = 0;
const size_t* firstLineBeforeOppositePosition = std::lower_bound(gridLines.begin(), gridLines.end(), resolvedOppositePosition.toInt());
@@ -89,10 +95,10 @@ public:
GridResolvedPosition resolvedGridLinePosition = GridResolvedPosition(gridLines[gridLineIndex]);
if (resolvedGridLinePosition >= resolvedOppositePosition)
resolvedGridLinePosition = resolvedOppositePosition.prev();
- return GridSpan::create(resolvedGridLinePosition, resolvedOppositePosition);
+ return GridSpan::definiteGridSpan(resolvedGridLinePosition, resolvedOppositePosition);
}
- static PassOwnPtr<GridSpan> createWithFinalNamedSpanAgainstOpposite(const GridResolvedPosition& resolvedOppositePosition, const GridPosition& position, const Vector<size_t>& gridLines)
+ static GridSpan definiteGridSpanWithFinalNamedSpanAgainstOpposite(const GridResolvedPosition& resolvedOppositePosition, const GridPosition& position, const Vector<size_t>& gridLines)
{
size_t firstLineAfterOppositePositionIndex = gridLines.size() - 1;
const size_t* firstLineAfterOppositePosition = std::upper_bound(gridLines.begin(), gridLines.end(), resolvedOppositePosition.toInt());
@@ -103,40 +109,66 @@ public:
if (resolvedGridLinePosition <= resolvedOppositePosition)
resolvedGridLinePosition = resolvedOppositePosition.next();
- return GridSpan::create(resolvedOppositePosition, resolvedGridLinePosition);
+ return GridSpan::definiteGridSpan(resolvedOppositePosition, resolvedGridLinePosition);
}
- GridSpan(const GridResolvedPosition& resolvedInitialPosition, const GridResolvedPosition& resolvedFinalPosition)
- : resolvedInitialPosition(std::min(resolvedInitialPosition.toInt(), kGridMaxTracks - 1))
- , resolvedFinalPosition(std::min(resolvedFinalPosition.toInt(), kGridMaxTracks))
+ bool operator==(const GridSpan& o) const
{
- ASSERT(resolvedInitialPosition < resolvedFinalPosition);
+ return m_type == o.m_type && m_resolvedInitialPosition == o.m_resolvedInitialPosition && m_resolvedFinalPosition == o.m_resolvedFinalPosition;
}
- bool operator==(const GridSpan& o) const
+ size_t integerSpan() const
{
- return resolvedInitialPosition == o.resolvedInitialPosition && resolvedFinalPosition == o.resolvedFinalPosition;
+ ASSERT(isDefinite());
+ return m_resolvedFinalPosition.toInt() - m_resolvedInitialPosition.toInt();
}
- size_t integerSpan() const
+ const GridResolvedPosition& resolvedInitialPosition() const
{
- return resolvedFinalPosition.toInt() - resolvedInitialPosition.toInt();
+ ASSERT(isDefinite());
+ return m_resolvedInitialPosition;
}
- GridResolvedPosition resolvedInitialPosition;
- GridResolvedPosition resolvedFinalPosition;
+ const GridResolvedPosition& resolvedFinalPosition() const
+ {
+ ASSERT(isDefinite());
+ return m_resolvedFinalPosition;
+ }
typedef GridResolvedPosition iterator;
iterator begin() const
{
- return resolvedInitialPosition;
+ ASSERT(isDefinite());
+ return m_resolvedInitialPosition;
}
iterator end() const
{
- return resolvedFinalPosition;
+ ASSERT(isDefinite());
+ return m_resolvedFinalPosition;
}
+
+ bool isDefinite() const
+ {
+ return m_type == Definite;
+ }
+
+private:
+
+ enum GridSpanType {Definite, Indefinite};
+
+ GridSpan(const GridResolvedPosition& resolvedInitialPosition, const GridResolvedPosition& resolvedFinalPosition, GridSpanType type)
+ : m_resolvedInitialPosition(std::min(resolvedInitialPosition.toInt(), kGridMaxTracks - 1))
+ , m_resolvedFinalPosition(std::min(resolvedFinalPosition.toInt(), kGridMaxTracks))
+ , m_type(type)
+ {
+ ASSERT(resolvedInitialPosition < resolvedFinalPosition);
+ }
+
+ GridResolvedPosition m_resolvedInitialPosition;
+ GridResolvedPosition m_resolvedFinalPosition;
+ GridSpanType m_type;
};
// This represents a grid area that spans in both rows' and columns' direction.
@@ -145,8 +177,8 @@ struct GridCoordinate {
public:
// HashMap requires a default constuctor.
GridCoordinate()
- : columns(0, 1)
- , rows(0, 1)
+ : columns(GridSpan::indefiniteGridSpan())
+ , rows(GridSpan::indefiniteGridSpan())
{
}
@@ -170,13 +202,13 @@ public:
{
switch (side) {
case ColumnStartSide:
- return columns.resolvedInitialPosition;
+ return columns.resolvedInitialPosition();
case ColumnEndSide:
- return columns.resolvedFinalPosition;
+ return columns.resolvedFinalPosition();
case RowStartSide:
- return rows.resolvedInitialPosition;
+ return rows.resolvedInitialPosition();
case RowEndSide:
- return rows.resolvedFinalPosition;
+ return rows.resolvedFinalPosition();
}
ASSERT_NOT_REACHED();
return 0;
« no previous file with comments | « third_party/WebKit/Source/core/paint/GridPainter.cpp ('k') | third_party/WebKit/Source/core/style/GridResolvedPosition.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698