ClientList: don't use GLib
Use std::list instead of GList.
This commit is contained in:
@@ -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)
|
|||||||
}
|
}
|
||||||
|
|
||||||
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 @@
|
|||||||
#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)
|
|||||||
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 @@
|
|||||||
#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
|
|||||||
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 {
|
|||||||
};
|
};
|
||||||
|
|
||||||
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 {
|
|||||||
};
|
};
|
||||||
|
|
||||||
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;
|
||||||
|
Reference in New Issue
Block a user