summaryrefslogtreecommitdiffstats
path: root/base/observer_list.h
diff options
context:
space:
mode:
authorasvitkine@chromium.org <asvitkine@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-10-25 18:00:02 +0000
committerasvitkine@chromium.org <asvitkine@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-10-25 18:00:02 +0000
commit339d80a241349ede01e274aa9544c155259fb1f8 (patch)
tree49e1ae89aa4c22045281fc697ab1cb71a7ab8301 /base/observer_list.h
parent7cc6e5639982a9f912c46572dafa4a42682fbd04 (diff)
downloadchromium_src-339d80a241349ede01e274aa9544c155259fb1f8.zip
chromium_src-339d80a241349ede01e274aa9544c155259fb1f8.tar.gz
chromium_src-339d80a241349ede01e274aa9544c155259fb1f8.tar.bz2
Change O(n^2) loop to O(n) in ObserverListBase::Compact().
BUG=none TEST=Time a short program having two versions of that code. Review URL: http://codereview.chromium.org/8391003 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@107153 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base/observer_list.h')
-rw-r--r--base/observer_list.h11
1 files changed, 3 insertions, 8 deletions
diff --git a/base/observer_list.h b/base/observer_list.h
index 22b9ed2..22babe8 100644
--- a/base/observer_list.h
+++ b/base/observer_list.h
@@ -162,14 +162,9 @@ class ObserverListBase
protected:
void Compact() {
- typename ListType::iterator it = observers_.begin();
- while (it != observers_.end()) {
- if (*it) {
- ++it;
- } else {
- it = observers_.erase(it);
- }
- }
+ observers_.erase(
+ std::remove(observers_.begin(), observers_.end(),
+ static_cast<ObserverType*>(NULL)), observers_.end());
}
private: