| Index: third_party/WebKit/Source/core/layout/DepthOrderedLayoutObjectList.cpp
|
| diff --git a/third_party/WebKit/Source/core/layout/DepthOrderedLayoutObjectList.cpp b/third_party/WebKit/Source/core/layout/DepthOrderedLayoutObjectList.cpp
|
| index 7217ff76fc427fa2df879061fb10b6ab6c6404ef..3ebdd3b010cd779cfe2583e5b5a52954b4065c83 100644
|
| --- a/third_party/WebKit/Source/core/layout/DepthOrderedLayoutObjectList.cpp
|
| +++ b/third_party/WebKit/Source/core/layout/DepthOrderedLayoutObjectList.cpp
|
| @@ -10,27 +10,58 @@
|
|
|
| namespace blink {
|
|
|
| +struct DepthOrderedLayoutObjectListData {
|
| + // LayoutObjects sorted by depth (deepest first). This structure is only
|
| + // populated at the beginning of enumerations. See ordered().
|
| + Vector<DepthOrderedLayoutObjectList::LayoutObjectWithDepth> m_orderedObjects;
|
| +
|
| + // Outside of layout, LayoutObjects can be added and removed as needed such
|
| + // as when style was changed or destroyed. They're kept in this hashset to
|
| + // keep those operations fast.
|
| + HashSet<LayoutObject*> m_objects;
|
| +};
|
| +
|
| +DepthOrderedLayoutObjectList::DepthOrderedLayoutObjectList()
|
| + : m_data(new DepthOrderedLayoutObjectListData)
|
| +{
|
| +}
|
| +
|
| +DepthOrderedLayoutObjectList::~DepthOrderedLayoutObjectList()
|
| +{
|
| + delete m_data;
|
| +}
|
| +
|
| +int DepthOrderedLayoutObjectList::size() const
|
| +{
|
| + return m_data->m_objects.size();
|
| +}
|
| +
|
| +bool DepthOrderedLayoutObjectList::isEmpty() const
|
| +{
|
| + return m_data->m_objects.isEmpty();
|
| +}
|
| +
|
| void DepthOrderedLayoutObjectList::add(LayoutObject& object)
|
| {
|
| ASSERT(!object.frameView()->isInPerformLayout());
|
| - m_objects.add(&object);
|
| - m_orderedObjects.clear();
|
| + m_data->m_objects.add(&object);
|
| + m_data->m_orderedObjects.clear();
|
| }
|
|
|
| void DepthOrderedLayoutObjectList::remove(LayoutObject& object)
|
| {
|
| - auto it = m_objects.find(&object);
|
| - if (it == m_objects.end())
|
| + auto it = m_data->m_objects.find(&object);
|
| + if (it == m_data->m_objects.end())
|
| return;
|
| ASSERT(!object.frameView()->isInPerformLayout());
|
| - m_objects.remove(it);
|
| - m_orderedObjects.clear();
|
| + m_data->m_objects.remove(it);
|
| + m_data->m_orderedObjects.clear();
|
| }
|
|
|
| void DepthOrderedLayoutObjectList::clear()
|
| {
|
| - m_objects.clear();
|
| - m_orderedObjects.clear();
|
| + m_data->m_objects.clear();
|
| + m_data->m_orderedObjects.clear();
|
| }
|
|
|
| unsigned DepthOrderedLayoutObjectList::LayoutObjectWithDepth::determineDepth(LayoutObject* object)
|
| @@ -41,14 +72,19 @@ unsigned DepthOrderedLayoutObjectList::LayoutObjectWithDepth::determineDepth(Lay
|
| return depth;
|
| }
|
|
|
| +const HashSet<LayoutObject*>& DepthOrderedLayoutObjectList::unordered() const
|
| +{
|
| + return m_data->m_objects;
|
| +}
|
| +
|
| const Vector<DepthOrderedLayoutObjectList::LayoutObjectWithDepth>& DepthOrderedLayoutObjectList::ordered()
|
| {
|
| - if (m_objects.isEmpty() || !m_orderedObjects.isEmpty())
|
| - return m_orderedObjects;
|
| + if (m_data->m_objects.isEmpty() || !m_data->m_orderedObjects.isEmpty())
|
| + return m_data->m_orderedObjects;
|
|
|
| - copyToVector(m_objects, m_orderedObjects);
|
| - std::sort(m_orderedObjects.begin(), m_orderedObjects.end());
|
| - return m_orderedObjects;
|
| + copyToVector(m_data->m_objects, m_data->m_orderedObjects);
|
| + std::sort(m_data->m_orderedObjects.begin(), m_data->m_orderedObjects.end());
|
| + return m_data->m_orderedObjects;
|
| }
|
|
|
| } // namespace blink
|
|
|