Move Source/WebCore/rendering/ code to std::unique_ptr
[WebKit-https.git] / Source / WebCore / rendering / style / GridCoordinate.h
1 /*
2  * Copyright (C) 2013 Google Inc. All rights reserved.
3  * Copyright (C) 2013, 2014 Igalia S.L.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions are
7  * met:
8  *
9  *     * Redistributions of source code must retain the above copyright
10  * notice, this list of conditions and the following disclaimer.
11  *     * Redistributions in binary form must reproduce the above
12  * copyright notice, this list of conditions and the following disclaimer
13  * in the documentation and/or other materials provided with the
14  * distribution.
15  *     * Neither the name of Google Inc. nor the names of its
16  * contributors may be used to endorse or promote products derived from
17  * this software without specific prior written permission.
18  *
19  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
23  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30  */
31
32 #ifndef GridCoordinate_h
33 #define GridCoordinate_h
34
35 #if ENABLE(CSS_GRID_LAYOUT)
36
37 #include <wtf/HashMap.h>
38 #include <wtf/text/WTFString.h>
39
40 namespace WebCore {
41
42 // A span in a single direction (either rows or columns). Note that |initialPositionIndex|
43 // and |finalPositionIndex| are grid areas' indexes, NOT grid lines'. Iterating over the
44 // span should include both |initialPositionIndex| and |finalPositionIndex| to be correct.
45 class GridSpan {
46 public:
47     GridSpan(size_t initialPosition, size_t finalPosition)
48         : initialPositionIndex(initialPosition)
49         , finalPositionIndex(finalPosition)
50     {
51         ASSERT(initialPositionIndex <= finalPositionIndex);
52     }
53
54     bool operator==(const GridSpan& o) const
55     {
56         return initialPositionIndex == o.initialPositionIndex && finalPositionIndex == o.finalPositionIndex;
57     }
58
59     size_t initialPositionIndex;
60     size_t finalPositionIndex;
61 };
62
63 // This represents a grid area that spans in both rows' and columns' direction.
64 class GridCoordinate {
65 public:
66     // HashMap requires a default constuctor.
67     GridCoordinate()
68         : columns(0, 0)
69         , rows(0, 0)
70     {
71     }
72
73     GridCoordinate(const GridSpan& r, const GridSpan& c)
74         : columns(c)
75         , rows(r)
76     {
77     }
78
79     bool operator==(const GridCoordinate& o) const
80     {
81         return columns == o.columns && rows == o.rows;
82     }
83
84     bool operator!=(const GridCoordinate& o) const
85     {
86         return !(*this == o);
87     }
88
89     GridSpan columns;
90     GridSpan rows;
91 };
92
93 typedef HashMap<String, GridCoordinate> NamedGridAreaMap;
94
95 } // namespace WebCore
96
97 #endif /* ENABLE(CSS_GRID_LAYOUT) */
98
99 #endif // GridCoordinate_h