Chromium Code Reviews| Index: third_party/WebKit/Source/core/editing/markers/SpellingMarkerList.cpp |
| diff --git a/third_party/WebKit/Source/core/editing/markers/SpellingMarkerList.cpp b/third_party/WebKit/Source/core/editing/markers/SpellingMarkerList.cpp |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..20744a880562b542e4888b9ae433f7d605c0c70b |
| --- /dev/null |
| +++ b/third_party/WebKit/Source/core/editing/markers/SpellingMarkerList.cpp |
| @@ -0,0 +1,37 @@ |
| +// Copyright 2017 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +#include "core/editing/markers/SpellingMarkerList.h" |
| + |
| +#include <utility> |
| +#include "core/dom/Text.h" |
| + |
| +namespace blink { |
| + |
| +SpellingMarkerList::SpellingMarkerList( |
| + DocumentMarkerController* documentMarkerController) |
| + : EditingMarkerListThatMergesTouchingMarkers(documentMarkerController) {} |
| + |
| +DocumentMarker::MarkerType SpellingMarkerList::allowedMarkerType() const { |
| + return DocumentMarker::Spelling; |
| +} |
| + |
| +void SpellingMarkerList::removeMarkersForWords(const Text& textNode, |
| + const Vector<String>& words) { |
| + // Build a second vector and swap with m_markers to avoid O(n^2) performance |
|
Xiaocheng
2017/03/17 23:56:34
This is still quadratic running time: O(m_markers.
rlanday
2017/03/18 01:12:27
It's linear in m_markers.size() and words.size(),
Xiaocheng
2017/03/18 01:58:09
Using anything more complicated than a simple nest
|
| + HeapVector<Member<DocumentMarker>> newMarkerList; |
| + |
| + for (Member<DocumentMarker> marker : m_markers) { |
| + unsigned start = marker->startOffset(); |
| + unsigned length = marker->endOffset() - marker->startOffset(); |
| + |
| + String markerText = textNode.data().substring(start, length); |
| + if (!words.contains(markerText)) |
| + newMarkerList.push_back(marker); |
| + } |
| + |
| + std::swap(m_markers, newMarkerList); |
| +} |
| + |
| +} // namespace blink |