From 19b537a142c127dd2c1d9a40a7999714f9d2175d Mon Sep 17 00:00:00 2001 From: David Robillard Date: Fri, 2 Mar 2007 00:05:18 +0000 Subject: 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 --- src/engine/Action.cpp | 35 +++++++++++++++++++++++++++++++++++ src/engine/Makefile.am | 1 + src/engine/Node.cpp | 7 +++++++ src/engine/machina/Action.hpp | 5 ++++- 4 files changed, 47 insertions(+), 1 deletion(-) create mode 100644 src/engine/Action.cpp (limited to 'src') 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 + * + * 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 +#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 #include #include +#include #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); }; -- cgit v1.2.1