aboutsummaryrefslogtreecommitdiffstats
path: root/src/ClientList.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'src/ClientList.cxx')
-rw-r--r--src/ClientList.cxx22
1 files changed, 14 insertions, 8 deletions
diff --git a/src/ClientList.cxx b/src/ClientList.cxx
index ffefc7c05..b45be34c3 100644
--- a/src/ClientList.cxx
+++ b/src/ClientList.cxx
@@ -21,9 +21,12 @@
#include "ClientList.hxx"
#include "ClientInternal.hxx"
+#include <list>
+#include <algorithm>
+
#include <assert.h>
-static GList *clients;
+static std::list<Client *> clients;
static unsigned num_clients;
bool
@@ -41,30 +44,33 @@ client_list_is_full(void)
Client *
client_list_get_first(void)
{
- assert(clients != NULL);
+ assert(!clients.empty());
- return (Client *)clients->data;
+ return clients.front();
}
void
client_list_add(Client *client)
{
- clients = g_list_prepend(clients, client);
+ clients.push_front(client);
++num_clients;
}
void
-client_list_foreach(GFunc func, gpointer user_data)
+client_list_foreach(void (*callback)(Client *client, void *ctx), void *ctx)
{
- g_list_foreach(clients, func, user_data);
+ for (Client *client : clients)
+ callback(client, ctx);
}
void
client_list_remove(Client *client)
{
assert(num_clients > 0);
- assert(clients != NULL);
+ assert(!clients.empty());
- clients = g_list_remove(clients, client);
+ auto i = std::find(clients.begin(), clients.end(), client);
+ assert(i != clients.end());
+ clients.erase(i);
--num_clients;
}