summaryrefslogtreecommitdiffstats
path: root/src/server/UndoStack.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/UndoStack.cpp')
-rw-r--r--src/server/UndoStack.cpp51
1 files changed, 24 insertions, 27 deletions
diff --git a/src/server/UndoStack.cpp b/src/server/UndoStack.cpp
index 97539823..abb9fe46 100644
--- a/src/server/UndoStack.cpp
+++ b/src/server/UndoStack.cpp
@@ -18,6 +18,7 @@
#include "ingen/URIMap.hpp"
#include "ingen/URIs.hpp"
+#include "ingen/ingen.h"
#include "lv2/atom/atom.h"
#include "lv2/atom/util.h"
#include "lv2/patch/patch.h"
@@ -26,14 +27,12 @@
#include <ctime>
#include <iterator>
-#include <memory>
#define NS_RDF "http://www.w3.org/1999/02/22-rdf-syntax-ns#"
#define USTR(s) reinterpret_cast<const uint8_t*>(s)
-namespace ingen {
-namespace server {
+namespace ingen::server {
int
UndoStack::start_entry()
@@ -41,7 +40,7 @@ UndoStack::start_entry()
if (_depth == 0) {
time_t now = {};
time(&now);
- _stack.emplace_back(Entry(now));
+ _stack.emplace_back(now);
}
return ++_depth;
}
@@ -86,18 +85,18 @@ UndoStack::ignore_later_event(const LV2_Atom* first,
int
UndoStack::finish_entry()
{
- if (--_depth > 0) {
- return _depth;
- } else if (_stack.back().events.empty()) {
- // Disregard empty entry
- _stack.pop_back();
- } else if (_stack.size() > 1 && _stack.back().events.size() == 1) {
- // This entry and the previous one have one event, attempt to merge
- auto i = _stack.rbegin();
- ++i;
- if (i->events.size() == 1) {
- if (ignore_later_event(i->events[0], _stack.back().events[0])) {
- _stack.pop_back();
+ if (--_depth == 0) {
+ if (_stack.back().events.empty()) {
+ // Disregard empty entry
+ _stack.pop_back();
+ } else if (_stack.size() > 1 && _stack.back().events.size() == 1) {
+ // This entry and the previous one have one event, attempt to merge
+ auto i = _stack.rbegin();
+ ++i;
+ if (i->events.size() == 1) {
+ if (ignore_later_event(i->events[0], _stack.back().events[0])) {
+ _stack.pop_back();
+ }
}
}
}
@@ -117,7 +116,7 @@ UndoStack::pop()
}
struct BlankIDs {
- explicit BlankIDs(char prefix='b') : c(prefix) {}
+ explicit BlankIDs(const char prefix = 'b') noexcept : c{prefix} {}
SerdNode get() {
snprintf(buf, sizeof(buf), "%c%u", c, n++);
@@ -126,7 +125,7 @@ struct BlankIDs {
char buf[16]{};
unsigned n{0};
- const char c{'b'};
+ const char c;
};
struct ListContext {
@@ -138,8 +137,7 @@ struct ListContext {
, s(*subject)
, p(*predicate)
, flags(statement_flags | SERD_LIST_O_BEGIN)
- {
- }
+ {}
SerdNode start_node(SerdWriter* writer) {
const SerdNode node = ids.get();
@@ -189,8 +187,8 @@ UndoStack::write_entry(Sratom* sratom,
strftime(time_str, sizeof(time_str), "%FT%T", gmtime(&entry.time));
// entry rdf:type ingen:UndoEntry
- SerdNode p = serd_node_from_string(SERD_URI, USTR(INGEN_NS "time"));
- SerdNode o = serd_node_from_string(SERD_LITERAL, USTR(time_str));
+ SerdNode p = serd_node_from_string(SERD_URI, USTR(INGEN_NS "time"));
+ const SerdNode o = serd_node_from_string(SERD_LITERAL, USTR(time_str));
serd_writer_write_statement(writer, SERD_ANON_CONT, nullptr, subject, &p, &o, nullptr, nullptr);
p = serd_node_from_string(SERD_URI, USTR(INGEN_NS "events"));
@@ -226,7 +224,7 @@ UndoStack::save(FILE* stream, const char* name)
const SerdNode base = serd_node_from_string(SERD_URI, USTR("ingen:/"));
SerdURI base_uri;
- serd_uri_parse(base.buf, &base_uri);
+ serd_uri_parse(USTR("ingen:/"), &base_uri);
SerdWriter* writer =
serd_writer_new(SERD_TURTLE,
@@ -246,8 +244,8 @@ UndoStack::save(FILE* stream, const char* name)
reinterpret_cast<SerdEndSink>(serd_writer_end_anon),
writer);
- SerdNode s = serd_node_from_string(SERD_BLANK, USTR(name));
- SerdNode p = serd_node_from_string(SERD_URI, USTR(INGEN_NS "entries"));
+ const SerdNode s = serd_node_from_string(SERD_BLANK, USTR(name));
+ const SerdNode p = serd_node_from_string(SERD_URI, USTR(INGEN_NS "entries"));
BlankIDs ids('u');
ListContext ctx(ids, 0, &s, &p);
@@ -264,5 +262,4 @@ UndoStack::save(FILE* stream, const char* name)
serd_writer_free(writer);
}
-} // namespace server
-} // namespace ingen
+} // namespace ingen::server