Commit 2564f763 authored by Max Kellermann's avatar Max Kellermann

ClientList: don't use GLib

Use std::list instead of GList.
parent 377a2b9e
...@@ -41,10 +41,8 @@ client_set_expired(Client *client) ...@@ -41,10 +41,8 @@ client_set_expired(Client *client)
} }
static void static void
client_check_expired_callback(gpointer data, G_GNUC_UNUSED gpointer user_data) client_check_expired_callback(Client *client, G_GNUC_UNUSED gpointer user_data)
{ {
Client *client = (Client *)data;
if (client_is_expired(client)) { if (client_is_expired(client)) {
g_debug("[%u] expired", client->num); g_debug("[%u] expired", client->num);
client_close(client); client_close(client);
......
...@@ -70,9 +70,8 @@ client_idle_add(Client *client, unsigned flags) ...@@ -70,9 +70,8 @@ client_idle_add(Client *client, unsigned flags)
} }
static void static void
client_idle_callback(gpointer data, gpointer user_data) client_idle_callback(Client *client, gpointer user_data)
{ {
Client *client = (Client *)data;
unsigned flags = GPOINTER_TO_UINT(user_data); unsigned flags = GPOINTER_TO_UINT(user_data);
client_idle_add(client, flags); client_idle_add(client, flags);
......
...@@ -21,9 +21,12 @@ ...@@ -21,9 +21,12 @@
#include "ClientList.hxx" #include "ClientList.hxx"
#include "ClientInternal.hxx" #include "ClientInternal.hxx"
#include <list>
#include <algorithm>
#include <assert.h> #include <assert.h>
static GList *clients; static std::list<Client *> clients;
static unsigned num_clients; static unsigned num_clients;
bool bool
...@@ -41,30 +44,33 @@ client_list_is_full(void) ...@@ -41,30 +44,33 @@ client_list_is_full(void)
Client * Client *
client_list_get_first(void) client_list_get_first(void)
{ {
assert(clients != NULL); assert(!clients.empty());
return (Client *)clients->data; return clients.front();
} }
void void
client_list_add(Client *client) client_list_add(Client *client)
{ {
clients = g_list_prepend(clients, client); clients.push_front(client);
++num_clients; ++num_clients;
} }
void 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 void
client_list_remove(Client *client) client_list_remove(Client *client)
{ {
assert(num_clients > 0); 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; --num_clients;
} }
...@@ -20,8 +20,6 @@ ...@@ -20,8 +20,6 @@
#ifndef MPD_CLIENT_LIST_HXX #ifndef MPD_CLIENT_LIST_HXX
#define MPD_CLIENT_LIST_HXX #define MPD_CLIENT_LIST_HXX
#include <glib.h>
class Client; class Client;
bool bool
...@@ -37,7 +35,7 @@ void ...@@ -37,7 +35,7 @@ void
client_list_add(Client *client); client_list_add(Client *client);
void void
client_list_foreach(GFunc func, gpointer user_data); client_list_foreach(void (*callback)(Client *client, void *ctx), void *ctx);
void void
client_list_remove(Client *client); client_list_remove(Client *client);
......
...@@ -78,11 +78,10 @@ struct channels_context { ...@@ -78,11 +78,10 @@ struct channels_context {
}; };
static void static void
collect_channels(gpointer data, gpointer user_data) collect_channels(Client *client, gpointer user_data)
{ {
struct channels_context *context = struct channels_context *context =
(struct channels_context *)user_data; (struct channels_context *)user_data;
const Client *client = (const Client *)data;
context->channels.insert(client->subscriptions.begin(), context->channels.insert(client->subscriptions.begin(),
client->subscriptions.end()); client->subscriptions.end());
...@@ -133,11 +132,10 @@ struct send_message_context { ...@@ -133,11 +132,10 @@ struct send_message_context {
}; };
static void static void
send_message(gpointer data, gpointer user_data) send_message(Client *client, gpointer user_data)
{ {
struct send_message_context *context = struct send_message_context *context =
(struct send_message_context *)user_data; (struct send_message_context *)user_data;
Client *client = (Client *)data;
if (client_push_message(client, context->msg)) if (client_push_message(client, context->msg))
context->sent = true; context->sent = true;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment