diff options
-rw-r--r-- | src/CommandListBuilder.cxx | 14 | ||||
-rw-r--r-- | src/CommandListBuilder.hxx | 43 |
2 files changed, 35 insertions, 22 deletions
diff --git a/src/CommandListBuilder.cxx b/src/CommandListBuilder.cxx index 13cf4eea9..55b82a238 100644 --- a/src/CommandListBuilder.cxx +++ b/src/CommandListBuilder.cxx @@ -25,23 +25,23 @@ void CommandListBuilder::Reset() { - for (GSList *tmp = cmd_list; tmp != NULL; tmp = g_slist_next(tmp)) + for (GSList *tmp = list; tmp != NULL; tmp = g_slist_next(tmp)) g_free(tmp->data); - g_slist_free(cmd_list); + g_slist_free(list); - cmd_list = nullptr; - cmd_list_OK = -1; + list = nullptr; + mode = Mode::DISABLED; } bool CommandListBuilder::Add(const char *cmd) { size_t len = strlen(cmd) + 1; - cmd_list_size += len; - if (cmd_list_size > client_max_command_list_size) + size += len; + if (size > client_max_command_list_size) return false; - cmd_list = g_slist_prepend(cmd_list, g_strdup(cmd)); + list = g_slist_prepend(list, g_strdup(cmd)); return true; } diff --git a/src/CommandListBuilder.hxx b/src/CommandListBuilder.hxx index dbcc15dc2..cc9e7b158 100644 --- a/src/CommandListBuilder.hxx +++ b/src/CommandListBuilder.hxx @@ -25,23 +25,38 @@ class CommandListBuilder { /** - * for when in list mode + * print OK after each command execution */ - GSList *cmd_list; + enum class Mode { + /** + * Not active. + */ + DISABLED = -1, + + /** + * Enabled in normal list mode. + */ + ENABLED = false, + + /** + * Enabled in "list_OK" mode. + */ + OK = true, + } mode; /** - * print OK after each command execution + * for when in list mode */ - int cmd_list_OK; + GSList *list; /** - * mem cmd_list consumes + * Memory consumed by the list. */ - size_t cmd_list_size; + size_t size; public: CommandListBuilder() - :cmd_list(nullptr), cmd_list_OK(-1), cmd_list_size(0) {} + :mode(Mode::DISABLED), list(nullptr), size(0) {} ~CommandListBuilder() { Reset(); } @@ -50,9 +65,7 @@ public: * Is a command list currently being built? */ bool IsActive() const { - assert(cmd_list_OK >= -1 && cmd_list_OK <= 1); - - return cmd_list_OK >= 0; + return mode != Mode::DISABLED; } /** @@ -61,7 +74,7 @@ public: bool IsOKMode() const { assert(IsActive()); - return (bool)cmd_list_OK; + return (bool)mode; } /** @@ -73,10 +86,10 @@ public: * Begin building a command list. */ void Begin(bool ok) { - assert(cmd_list == nullptr); - assert(cmd_list_OK == -1); + assert(list == nullptr); + assert(mode == Mode::DISABLED); - cmd_list_OK = (int)ok; + mode = (Mode)ok; } /** @@ -93,7 +106,7 @@ public: /* for scalability reasons, we have prepended each new command; now we have to reverse it to restore the correct order */ - return cmd_list = g_slist_reverse(cmd_list); + return list = g_slist_reverse(list); } }; |