Commit a2297558 authored by Max Kellermann's avatar Max Kellermann

MessageCommands: use std::set instead of GHashTable

parent 84cdf0ca
...@@ -27,6 +27,9 @@ extern "C" { ...@@ -27,6 +27,9 @@ extern "C" {
#include "client_subscribe.h" #include "client_subscribe.h"
} }
#include <set>
#include <string>
#include <assert.h> #include <assert.h>
enum command_return enum command_return
...@@ -73,9 +76,7 @@ handle_unsubscribe(struct client *client, G_GNUC_UNUSED int argc, char *argv[]) ...@@ -73,9 +76,7 @@ handle_unsubscribe(struct client *client, G_GNUC_UNUSED int argc, char *argv[])
} }
struct channels_context { struct channels_context {
GStringChunk *chunk; std::set<std::string> channels;
GHashTable *channels;
}; };
static void static void
...@@ -89,41 +90,22 @@ collect_channels(gpointer data, gpointer user_data) ...@@ -89,41 +90,22 @@ collect_channels(gpointer data, gpointer user_data)
i = g_slist_next(i)) { i = g_slist_next(i)) {
const char *channel = (const char *)i->data; const char *channel = (const char *)i->data;
if (g_hash_table_lookup(context->channels, channel) == NULL) { context->channels.insert(channel);
char *channel2 = g_string_chunk_insert(context->chunk,
channel);
g_hash_table_insert(context->channels, channel2,
context);
}
} }
} }
static void
print_channel(gpointer key, G_GNUC_UNUSED gpointer value, gpointer user_data)
{
struct client *client = (struct client *)user_data;
const char *channel = (const char *)key;
client_printf(client, "channel: %s\n", channel);
}
enum command_return enum command_return
handle_channels(struct client *client, handle_channels(struct client *client,
G_GNUC_UNUSED int argc, G_GNUC_UNUSED char *argv[]) G_GNUC_UNUSED int argc, G_GNUC_UNUSED char *argv[])
{ {
assert(argc == 1); assert(argc == 1);
struct channels_context context = { struct channels_context context;
g_string_chunk_new(1024),
g_hash_table_new(g_str_hash, g_str_equal),
};
client_list_foreach(collect_channels, &context); client_list_foreach(collect_channels, &context);
g_hash_table_foreach(context.channels, print_channel, client); for (const auto &channel : context.channels)
client_printf(client, "channel: %s\n", channel.c_str());
g_hash_table_destroy(context.channels);
g_string_chunk_free(context.chunk);
return COMMAND_RETURN_OK; return COMMAND_RETURN_OK;
} }
......
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