ClientList: don't use GLib
Use std::list instead of GList.
This commit is contained in:
parent
377a2b9e07
commit
2564f763d7
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue