aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2007-03-02 00:05:18 +0000
committerDavid Robillard <d@drobilla.net>2007-03-02 00:05:18 +0000
commit19b537a142c127dd2c1d9a40a7999714f9d2175d (patch)
tree85d7da2a138e34ca5783dffbc6547fd4500ca7ca /src
parentde25ae35ccb0613290ba20bfcf0ea15476c26ed5 (diff)
downloadmachina-19b537a142c127dd2c1d9a40a7999714f9d2175d.tar.gz
machina-19b537a142c127dd2c1d9a40a7999714f9d2175d.tar.bz2
machina-19b537a142c127dd2c1d9a40a7999714f9d2175d.zip
Work towards Action serialization.
Made edge length in dot graphs (from machina2dot) correspond to node duration to make automaton diagram map closer to music notation. git-svn-id: http://svn.drobilla.net/lad/machina@341 a436a847-0d15-0410-975c-d299462d15a1
Diffstat (limited to 'src')
-rw-r--r--src/engine/Action.cpp35
-rw-r--r--src/engine/Makefile.am1
-rw-r--r--src/engine/Node.cpp7
-rw-r--r--src/engine/machina/Action.hpp5
4 files changed, 47 insertions, 1 deletions
diff --git a/src/engine/Action.cpp b/src/engine/Action.cpp
new file mode 100644
index 0000000..a893d74
--- /dev/null
+++ b/src/engine/Action.cpp
@@ -0,0 +1,35 @@
+/* This file is part of Machina.
+ * Copyright (C) 2007 Dave Robillard <http://drobilla.net>
+ *
+ * Machina is free software; you can redistribute it and/or modify it under the
+ * terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * Machina is distributed in the hope that it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <raul/RDFWriter.h>
+#include "machina/Action.hpp"
+
+namespace Machina {
+
+void
+Action::write_state(Raul::RDFWriter& writer)
+{
+ using Raul::RdfId;
+
+ writer.write(_id,
+ RdfId(RdfId::RESOURCE, "rdf:type"),
+ RdfId(RdfId::RESOURCE, "machina:Action"));
+}
+
+
+} // namespace Machina
+
diff --git a/src/engine/Makefile.am b/src/engine/Makefile.am
index 2cda9e5..d500302 100644
--- a/src/engine/Makefile.am
+++ b/src/engine/Makefile.am
@@ -9,6 +9,7 @@ libmachina_la_LIBADD = @RAUL_LIBS@ @JACK_LIBS@ @GLIBMM_LIBS@
libmachina_la_SOURCES = \
Node.cpp \
Edge.cpp \
+ Action.cpp \
Machine.cpp \
Loader.cpp \
MidiAction.cpp \
diff --git a/src/engine/Node.cpp b/src/engine/Node.cpp
index 47eee35..7af2997 100644
--- a/src/engine/Node.cpp
+++ b/src/engine/Node.cpp
@@ -130,6 +130,13 @@ Node::write_state(Raul::RDFWriter& writer)
writer.write(_id,
RdfId(RdfId::RESOURCE, "machina:duration"),
Raul::Atom((float)_duration));
+
+ writer.write(_id,
+ RdfId(RdfId::RESOURCE, "machina:enterAction"),
+ _enter_action->id());
+ _enter_action->write_state(writer);
+
+ _exit_action->write_state(writer);
/*for (Node::Edges::const_iterator e = _outgoing_edges.begin();
e != _outgoing_edges.end(); ++e)
diff --git a/src/engine/machina/Action.hpp b/src/engine/machina/Action.hpp
index 2bffaa3..16c9b58 100644
--- a/src/engine/machina/Action.hpp
+++ b/src/engine/machina/Action.hpp
@@ -22,6 +22,7 @@
#include <iostream>
#include <raul/Deletable.h>
#include <raul/TimeSlice.h>
+#include <raul/Stateful.h>
#include "types.hpp"
namespace Machina {
@@ -29,8 +30,10 @@ namespace Machina {
/** An Action, executed on entering or exiting of a state.
*/
-struct Action : public Raul::Deletable {
+struct Action : public Raul::Deletable, public Raul::Stateful {
virtual void execute(Raul::BeatTime /*time*/) {}
+
+ virtual void write_state(Raul::RDFWriter& writer);
};