aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMax Kellermann <max@duempel.org>2013-01-04 01:17:25 +0100
committerMax Kellermann <max@duempel.org>2013-01-04 01:17:25 +0100
commita7d1daee93446327b5a0c35d779880354cdbf66e (patch)
treecbf9c8013495c871474dc405e513e914dde0f151
parent77a99cc61d7a39745192354594086bb90ffb0b50 (diff)
downloadmpd-a7d1daee93446327b5a0c35d779880354cdbf66e.tar.gz
mpd-a7d1daee93446327b5a0c35d779880354cdbf66e.tar.xz
mpd-a7d1daee93446327b5a0c35d779880354cdbf66e.zip
CommandListBuilder: use std::list instead of GSList
Diffstat (limited to '')
-rw-r--r--src/ClientProcess.cxx11
-rw-r--r--src/CommandListBuilder.cxx9
-rw-r--r--src/CommandListBuilder.hxx20
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);
}
};