CommandListBuilder: use std::list instead of GSList
This commit is contained in:
parent
77a99cc61d
commit
a7d1daee93
@ -29,13 +29,14 @@
|
|||||||
#define CLIENT_LIST_MODE_END "command_list_end"
|
#define CLIENT_LIST_MODE_END "command_list_end"
|
||||||
|
|
||||||
static enum command_return
|
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;
|
enum command_return ret = COMMAND_RETURN_OK;
|
||||||
unsigned num = 0;
|
unsigned num = 0;
|
||||||
|
|
||||||
for (GSList *cur = list; cur != NULL; cur = g_slist_next(cur)) {
|
for (auto &&i : list) {
|
||||||
char *cmd = (char *)cur->data;
|
char *cmd = &*i.begin();
|
||||||
|
|
||||||
g_debug("command_process_list: process command \"%s\"",
|
g_debug("command_process_list: process command \"%s\"",
|
||||||
cmd);
|
cmd);
|
||||||
@ -81,11 +82,11 @@ client_process_line(Client *client, char *line)
|
|||||||
g_debug("[%u] process command list",
|
g_debug("[%u] process command list",
|
||||||
client->num);
|
client->num);
|
||||||
|
|
||||||
auto cmd_list = client->cmd_list.Commit();
|
auto &&cmd_list = client->cmd_list.Commit();
|
||||||
|
|
||||||
ret = client_process_command_list(client,
|
ret = client_process_command_list(client,
|
||||||
client->cmd_list.IsOKMode(),
|
client->cmd_list.IsOKMode(),
|
||||||
cmd_list);
|
std::move(cmd_list));
|
||||||
g_debug("[%u] process command "
|
g_debug("[%u] process command "
|
||||||
"list returned %i", client->num, ret);
|
"list returned %i", client->num, ret);
|
||||||
|
|
||||||
|
@ -25,12 +25,7 @@
|
|||||||
void
|
void
|
||||||
CommandListBuilder::Reset()
|
CommandListBuilder::Reset()
|
||||||
{
|
{
|
||||||
for (GSList *tmp = list; tmp != NULL; tmp = g_slist_next(tmp))
|
list.clear();
|
||||||
g_free(tmp->data);
|
|
||||||
|
|
||||||
g_slist_free(list);
|
|
||||||
|
|
||||||
list = nullptr;
|
|
||||||
mode = Mode::DISABLED;
|
mode = Mode::DISABLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -42,6 +37,6 @@ CommandListBuilder::Add(const char *cmd)
|
|||||||
if (size > client_max_command_list_size)
|
if (size > client_max_command_list_size)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
list = g_slist_prepend(list, g_strdup(cmd));
|
list.emplace_back(cmd);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -20,7 +20,9 @@
|
|||||||
#ifndef MPD_COMMAND_LIST_BUILDER_HXX
|
#ifndef MPD_COMMAND_LIST_BUILDER_HXX
|
||||||
#define MPD_COMMAND_LIST_BUILDER_HXX
|
#define MPD_COMMAND_LIST_BUILDER_HXX
|
||||||
|
|
||||||
#include <glib.h>
|
#include <list>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
|
|
||||||
class CommandListBuilder {
|
class CommandListBuilder {
|
||||||
@ -47,7 +49,7 @@ class CommandListBuilder {
|
|||||||
/**
|
/**
|
||||||
* for when in list mode
|
* for when in list mode
|
||||||
*/
|
*/
|
||||||
GSList *list;
|
std::list<std::string> list;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Memory consumed by the list.
|
* Memory consumed by the list.
|
||||||
@ -56,10 +58,7 @@ class CommandListBuilder {
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
CommandListBuilder()
|
CommandListBuilder()
|
||||||
:mode(Mode::DISABLED), list(nullptr), size(0) {}
|
:mode(Mode::DISABLED), size(0) {}
|
||||||
~CommandListBuilder() {
|
|
||||||
Reset();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Is a command list currently being built?
|
* Is a command list currently being built?
|
||||||
@ -86,7 +85,7 @@ public:
|
|||||||
* Begin building a command list.
|
* Begin building a command list.
|
||||||
*/
|
*/
|
||||||
void Begin(bool ok) {
|
void Begin(bool ok) {
|
||||||
assert(list == nullptr);
|
assert(list.empty());
|
||||||
assert(mode == Mode::DISABLED);
|
assert(mode == Mode::DISABLED);
|
||||||
|
|
||||||
mode = (Mode)ok;
|
mode = (Mode)ok;
|
||||||
@ -100,13 +99,10 @@ public:
|
|||||||
/**
|
/**
|
||||||
* Finishes the list and returns it.
|
* Finishes the list and returns it.
|
||||||
*/
|
*/
|
||||||
GSList *Commit() {
|
std::list<std::string> &&Commit() {
|
||||||
assert(IsActive());
|
assert(IsActive());
|
||||||
|
|
||||||
/* for scalability reasons, we have prepended each new
|
return std::move(list);
|
||||||
command; now we have to reverse it to restore the
|
|
||||||
correct order */
|
|
||||||
return list = g_slist_reverse(list);
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user