aboutsummaryrefslogtreecommitdiffstats
path: root/src/client/ClientList.cxx
diff options
context:
space:
mode:
authorMax Kellermann <max@duempel.org>2014-06-10 18:57:30 +0200
committerMax Kellermann <max@duempel.org>2014-06-11 09:27:17 +0200
commit3364c1b8939aaf2f758a9396d0b73298042516d9 (patch)
tree046eb528b1e79d8c4bcd55e9939d58bde9981c21 /src/client/ClientList.cxx
parent0801b3f495aac982bc7d009d7ae81d8e3041db0c (diff)
downloadmpd-3364c1b8939aaf2f758a9396d0b73298042516d9.tar.gz
mpd-3364c1b8939aaf2f758a9396d0b73298042516d9.tar.xz
mpd-3364c1b8939aaf2f758a9396d0b73298042516d9.zip
ClientList: use class boost::intrusive::list
Eliminate extra allocations for the std::list node instances.
Diffstat (limited to 'src/client/ClientList.cxx')
-rw-r--r--src/client/ClientList.cxx21
1 files changed, 4 insertions, 17 deletions
diff --git a/src/client/ClientList.cxx b/src/client/ClientList.cxx
index 101802479..a1f286928 100644
--- a/src/client/ClientList.cxx
+++ b/src/client/ClientList.cxx
@@ -28,28 +28,15 @@
void
ClientList::Remove(Client &client)
{
- assert(size > 0);
assert(!list.empty());
- auto i = std::find(list.begin(), list.end(), &client);
- assert(i != list.end());
- list.erase(i);
- --size;
+ list.erase(list.iterator_to(client));
}
void
ClientList::CloseAll()
{
- while (!list.empty()) {
- delete list.front();
- list.pop_front();
-
-#ifndef NDEBUG
- --size;
-#endif
- }
-
- assert(size == 0);
+ list.clear_and_dispose(Client::Disposer());
}
void
@@ -57,6 +44,6 @@ ClientList::IdleAdd(unsigned flags)
{
assert(flags != 0);
- for (const auto &client : list)
- client->IdleAdd(flags);
+ for (auto &client : list)
+ client.IdleAdd(flags);
}