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; |