ClientList: don't use GLib

Use std::list instead of GList.
This commit is contained in:
Max Kellermann 2013-01-09 08:12:44 +01:00
parent 377a2b9e07
commit 2564f763d7
5 changed files with 19 additions and 20 deletions

View File

@ -41,10 +41,8 @@ client_set_expired(Client *client)
}
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)) {
g_debug("[%u] expired", client->num);
client_close(client);

View File

@ -70,9 +70,8 @@ client_idle_add(Client *client, unsigned flags)
}
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);
client_idle_add(client, flags);

View File

@ -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;
}

View File

@ -20,8 +20,6 @@
#ifndef MPD_CLIENT_LIST_HXX
#define MPD_CLIENT_LIST_HXX
#include <glib.h>
class Client;
bool
@ -37,7 +35,7 @@ void
client_list_add(Client *client);
void
client_list_foreach(GFunc func, gpointer user_data);
client_list_foreach(void (*callback)(Client *client, void *ctx), void *ctx);
void
client_list_remove(Client *client);

View File

@ -78,11 +78,10 @@ struct channels_context {
};
static void
collect_channels(gpointer data, gpointer user_data)
collect_channels(Client *client, gpointer user_data)
{
struct channels_context *context =
(struct channels_context *)user_data;
const Client *client = (const Client *)data;
context->channels.insert(client->subscriptions.begin(),
client->subscriptions.end());
@ -133,11 +132,10 @@ struct send_message_context {
};
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 *)user_data;
Client *client = (Client *)data;
if (client_push_message(client, context->msg))
context->sent = true;