diff options
author | asvitkine@chromium.org <asvitkine@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-10-25 18:00:02 +0000 |
---|---|---|
committer | asvitkine@chromium.org <asvitkine@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-10-25 18:00:02 +0000 |
commit | 339d80a241349ede01e274aa9544c155259fb1f8 (patch) | |
tree | 49e1ae89aa4c22045281fc697ab1cb71a7ab8301 /base/observer_list.h | |
parent | 7cc6e5639982a9f912c46572dafa4a42682fbd04 (diff) | |
download | chromium_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.h | 11 |
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: |