diff options
author | Max Kellermann <max@duempel.org> | 2013-01-04 01:17:25 +0100 |
---|---|---|
committer | Max Kellermann <max@duempel.org> | 2013-01-04 01:17:25 +0100 |
commit | a7d1daee93446327b5a0c35d779880354cdbf66e (patch) | |
tree | cbf9c8013495c871474dc405e513e914dde0f151 | |
parent | 77a99cc61d7a39745192354594086bb90ffb0b50 (diff) | |
download | mpd-a7d1daee93446327b5a0c35d779880354cdbf66e.tar.gz mpd-a7d1daee93446327b5a0c35d779880354cdbf66e.tar.xz mpd-a7d1daee93446327b5a0c35d779880354cdbf66e.zip |
CommandListBuilder: use std::list instead of GSList
-rw-r--r-- | src/ClientProcess.cxx | 11 | ||||
-rw-r--r-- | src/CommandListBuilder.cxx | 9 | ||||
-rw-r--r-- | src/CommandListBuilder.hxx | 20 |
3 files changed, 16 insertions, 24 deletions
diff --git a/src/ClientProcess.cxx b/src/ClientProcess.cxx index 9d3716029..69b23e868 100644 --- a/src/ClientProcess.cxx +++ b/src/ClientProcess.cxx @@ -29,13 +29,14 @@ #define CLIENT_LIST_MODE_END "command_list_end" static enum command_return -client_process_command_list(Client *client, bool list_ok, GSList *list) +client_process_command_list(Client *client, bool list_ok, + std::list<std::string> &&list) { enum command_return ret = COMMAND_RETURN_OK; unsigned num = 0; - for (GSList *cur = list; cur != NULL; cur = g_slist_next(cur)) { - char *cmd = (char *)cur->data; + for (auto &&i : list) { + char *cmd = &*i.begin(); g_debug("command_process_list: process command \"%s\"", cmd); @@ -81,11 +82,11 @@ client_process_line(Client *client, char *line) g_debug("[%u] process command list", client->num); - auto cmd_list = client->cmd_list.Commit(); + auto &&cmd_list = client->cmd_list.Commit(); ret = client_process_command_list(client, client->cmd_list.IsOKMode(), - cmd_list); + std::move(cmd_list)); g_debug("[%u] process command " "list returned %i", client->num, ret); diff --git a/src/CommandListBuilder.cxx b/src/CommandListBuilder.cxx index 55b82a238..e58afccd1 100644 --- a/src/CommandListBuilder.cxx +++ b/src/CommandListBuilder.cxx @@ -25,12 +25,7 @@ void CommandListBuilder::Reset() { - for (GSList *tmp = list; tmp != NULL; tmp = g_slist_next(tmp)) - g_free(tmp->data); - - g_slist_free(list); - - list = nullptr; + list.clear(); mode = Mode::DISABLED; } @@ -42,6 +37,6 @@ CommandListBuilder::Add(const char *cmd) if (size > client_max_command_list_size) return false; - list = g_slist_prepend(list, g_strdup(cmd)); + list.emplace_back(cmd); return true; } diff --git a/src/CommandListBuilder.hxx b/src/CommandListBuilder.hxx index cc9e7b158..a112ac33b 100644 --- a/src/CommandListBuilder.hxx +++ b/src/CommandListBuilder.hxx @@ -20,7 +20,9 @@ #ifndef MPD_COMMAND_LIST_BUILDER_HXX #define MPD_COMMAND_LIST_BUILDER_HXX -#include <glib.h> +#include <list> +#include <string> + #include <assert.h> class CommandListBuilder { @@ -47,7 +49,7 @@ class CommandListBuilder { /** * for when in list mode */ - GSList *list; + std::list<std::string> list; /** * Memory consumed by the list. @@ -56,10 +58,7 @@ class CommandListBuilder { public: CommandListBuilder() - :mode(Mode::DISABLED), list(nullptr), size(0) {} - ~CommandListBuilder() { - Reset(); - } + :mode(Mode::DISABLED), size(0) {} /** * Is a command list currently being built? @@ -86,7 +85,7 @@ public: * Begin building a command list. */ void Begin(bool ok) { - assert(list == nullptr); + assert(list.empty()); assert(mode == Mode::DISABLED); mode = (Mode)ok; @@ -100,13 +99,10 @@ public: /** * Finishes the list and returns it. */ - GSList *Commit() { + std::list<std::string> &&Commit() { assert(IsActive()); - /* for scalability reasons, we have prepended each new - command; now we have to reverse it to restore the - correct order */ - return list = g_slist_reverse(list); + return std::move(list); } }; |